2024. 11. 26. 10:40ㆍAWS
EC2에 인스턴스 , 접속하는것, 포트열어서 외부에서 확인
nginx를 이용해서 했다.
- 실제 프로젝트를 할 때는 부트를 띄워야 한다.
- EC2에 부트 프로젝트를 띄우려고 한다.
- 1GB로 띄워주나? 리눅스는 가볍기에 가능하다.
- 인스턴스 종료 : 15분 후에 사라짐
=================================================1번주자====================================
1. region 확인
2. 인스턴스 생성
> Boot1Server
> t2.micro
> keypair MyKey선택
> 인스턴스 시작
- JDK, 인스턴스를 깔아놓은 상태에서 템플릿으로 사용할 수 있다.
3. 인스턴스 연결
- IntelliJ, PuTTY, 바로연결, cla를 이용한 연결등이 있다.
4. git과 jdk설치할거다
sudo yum install git -y
- JDK를 설치해야한다.
sudo yum install java-17-amazon-corretto-devel -y
- devel이 없는건 java 명령어는 먹긴한다.
-y : 설치하실거예요?를 생략하는것
> 버전 체크 : java -version
> javac : 컴파일 동작하는지 확인
인스턴스 생성
1. 깃 프로젝트 가져온다.
- 이 플젝은 컨트롤러가 두개있다.
> 두개를 만든 이유 :
HealthController -> 핑날리는것으로 생각하면된다. 체크하는것
HelloController -> 경로를 잘 봐야한다. /api/sample/hello
https://github.com/zk2840174/serverEx1.git
GitHub - zk2840174/serverEx1
Contribute to zk2840174/serverEx1 development by creating an account on GitHub.
github.com
2. git을 사용하기 위해
git config --global user.name "KimBoris"
git config --global user.email “zlas2345@gmail.com"
3. git clone https://github.com/zk2840174/serverEx1.git
GitHub - zk2840174/serverEx1
Contribute to zk2840174/serverEx1 development by creating an account on GitHub.
github.com
4. cd serverEx1
> ls -a
> ./gradlew build하면 안먹음
> chmod +x gradlew (권한추가)
> 그다음 ./gradlew build하면됨 > 그래들 다운로드
>> 우리프로젝트 중에 boot해서 build하던것이 실행된다.
빌드하면 시간이 꽤걸림
5. ./gradlew bootJar
cd build/libs
ls
들어가면 jar파일이 두개들어가있다.
- 자바명령어를 통해 실행이 가능하다
- 파일이름 복사해놓고
java -jar (jar파일)
- 스프링 부트가 뜨는것을 확인할 수 있음
- 22번포트만 열려있어서 브라우저에서 볼 수 없다.
> EC2인스턴스 가서 보안 > 보안그룹 > 인바운드 규칙 편집 > 8080포트 추가 Anywhere
> 인스턴스 > 퍼블릭 IP주소 복사해서 브라우저에서 확인가능
> Helloworld가 보여야 한다.
{host}/api/sample/hello도 확인이 되어야 한다.
===========================================2번주자==========================================
지금까지 했던거 다하면 되는데 똑같이 하는데 git, JDK설치
- 경로 확인
> git clone받을건데 git clone받을때 serverEx2를 받아라
>> HealthController는 똑같다. >sample2라는 단어가 추가로 붙는다.
>> HelloController -> api2/sample 이다.
---------------------------------------------------------------------------------------------------------------------------------------------------------------
로드발란스한테는 리스너라는것이 있다.
> 어떤 포트를 받아서 어떻게 처리할건지를 정의해주는것 = 리스너 (규칙이 있다)
>> 규칙을 만든다. 여러종류의 규칙이 있따. > API로 들어오면 1번, API2로 들어오면 2번으로 보내
>>> 리스너가 붙는 대상이 있다. > 대상그룹 (타겟 그룹)
>>>> 로드발란서 설정을 하기위해선 2가지 방법이 있다.
>>>>> L4라는 것이 있다.
>>>>>> ELB에 IP가 붙는다. 그럼 여기로 붙는다 그 후 1번과 2번 EC로 간다.
1. 대상그룹을 1개만 만들거다.
2. 대상그룹을 2개를 만들거다.
------------------------------------------------------------------------1번 주자---------------------------------------------------------------------
서버1개로 실습
1. 서버가 떠 있는지 확인 (2개 서버)
2. EC2 > 로드 밸런서 > 생성 > 유형 Application LoadBalancer > 생성
3. 이름 : TestLB, 네트워크 매핑 : VPC 가 있어야 한다. VPC = 가상네트워크 , 이 안에서 하위로 내려가는 네트워크가 또 있다. > 가용영역에 있는것 3,4개있는거 다 체크 > 보안그룹 : 그대로 둬 (나중에 8080포트에 대해 조치해야함)
> 리스너 및 라우팅 > HTTP : 80 => 80으로 들어오면 내가 받아먹는다. > 옆에보면 대상그룹이 있음 >
- 대상그룹 생성 (새탭) -> 그룹의 세부 정보지정 > 기본구성 인스턴스 > 그룹이름 : TestGroup1 > 프로토콜 : 8080포트로 수정 > 상태검사 ->헬스 컨트롤러를 위한 경로 -<< 상태 검사 경로(/) 라고 되어있다. > 그래서 "" 경로로 만들어놨음 이게 있어야 돌아가기 때문에 > 다음 > 대상 서버가 되는 인스턴스를 잡아줘야 한다. > 인스턴스가 지금 2개인데 부트 1예제만 할거다 > boot1Server > 아래에 보류중인 것으로 포함 누르면 > 밑으로 내려간다. (대상보기) > 대상그룹 생성
> 대상합계, 사용되지않음 1개 > 대상그룹은 만들어졌지만 사용된적은 없어 > 리스터 및 라우팅 설정 > 대상그룹쪽 새로고침 > TestGroup1 선택 > 생성 > 설정을 바꿔주는중
- 로드발란서 메뉴 들어가보면 : 프로비저닝 설정이 있다.(세팅을 변경하고있고 바꾸고있다)
> 리소스 맵 - 신규 : 어떻게 연결되는건지를 비쥬얼하게보여준다.
>> DNS정보 = 연결하는 서버의 주소가 된다.
>>> 보안그룹 -> 인바운드 규칙이 자동으로 만들어져 있다.
>>>> DNS서버:8080포트
>>>>> host/api/sample/hello 해보면 데이터 나옴
HelloWorld
>>>>>> 보안 확인 > 보안그룹 > 80, 8080둘다 추가
IPv4, HTTP, TCP, 80
Ipv4, 사용자 지정 TCP, 8080
- 보안 anywhere로 빠져야 돌아간다.
----------------------------------------------------------------------------여기까지 서버를 1개 띄우는것 -------------------------------------------
[2] 서버를 2개 띄우는법
- 시작전에 몇가지 지우고 간다.
대상그룹안에 인스턴스를 2개 8080포트
1. 로드 발란서에 리스너 및 규칙 > 80포트 삭제
2. 대상 그룹 > 생성 > TestGroup2 > 포트번호 = 8080 나머지 다 그대로 다음 > 대상그룹 > 인스턴스가 2개인것을 확인할 수 있다. > 둘다 체크 > 둘다 내려 (포함) > 대상그룹생성 > 대상합계가 2개가 된것을 확인 > 로드밸런싱/로드밸런서 >
리스너 및 규칙 > 대상그룹 선택 > TestGroup2로 설정 > 추가 > 80포트로 테스트그룹2가 되어있다.
> 리소스 맵 신규 - 서버가 2개로 나눠진것을 알 수 있다. 대상그룹은 매핑그룹이라고 생각하면 좋다.
> 지금 현재 두개의 인스턴스 경로 / - 하지만 내용이 다르다.
>> DNS주소를 새로고침하면 왔다갔다한다 , 컨트롤 누르고 하는것과 아닌것은 차이가 난다.
>>> 로드발란서 - 리스너 : HTTP 80 규칙 들어가면 -> 기본값밖에 없다.> 규칙추가 > 이름 : API1 > 조건 추가 > 조건을 선택하세요 > 경로 -> /api/* > 확인 > 다음 > 대상그룹 > TestGroup1 선택 > 다음 > API1 우선 순위 : 1 > 생성 > 로드발란서가 이규칙을 적용하기 까지 시간이 조금 걸린다. > 로드발란서 리소스 맵 확인
>>>> 규칙 하나 더 추가
>>>>> 조건 : 경로 : /api2/* > 확인 > 대상그룹 추가 > TestGroupAPI2 > 80포트 내린다. > 그다음 리스너 가서 새로고침 > TestGroupAPI2 선택 > 우선순위 1
- 정리
api/ 로 호출 하면 1번
api2/로 호출하면 2번
- chatgpt에 물어봐야 할 것
> EC2에서 세션이 종료되고 프로그램이 계속 실행되게하는방법
>> nohup을 사용하면 세션이 살아 있다.
nohub java -jar your-spring-boot-app.jar &