AWS EC2를 사용하기 위해 여러 방면으로 서치를 해보던 중, 간단하게 배포가 가능한 Elastic Beanstalk를 알게 되었다. 요즘에는 복잡한 배포 과정 없이 개발자는 코딩에만 집중할 수 있도록 배포를 자동화해주는 기능을 많이 제공한다고 한다. 그래서 이번에 Beanstalk를 통해 간단한 테스트 어플리케이션을 배포해보았다.
0단계) AWS - Elastic Beanstalk 시작
메인 화면에서 '애플리케이션 생성' 버튼을 클릭한다.
1단계) 환경 구성
1단계: 환경 구성은
- 환경 티어
- 애플리케이션 정보
- 환경 정보
- 플랫폼 유형
- 애플리케이션 코드
- 사전 설정
로 구성되어 있다.
하나씩 살펴보면,
<환경 티어>
- '웹 서버 환경' 선택
(웹 API를 실행한다는 설명에 따라, 이 옵션을 제일 자주 사용하지 않을까 싶다.
<애플리케이션 정보>
- 애플리케이션 이름: {서비스이름}
(배포 실습용이기 때문에 간단히 test라고 작성했다.)
<환경 정보>
- 환경 이름: {서비스이름}
(도메인에 들어가니까 서비스 이름이 들어가야되지 않나 싶어 'Test'라고 작성했다.) - 도메인은 자동 생성하도록 비워두었다.
<플랫폼>
- 플랫폼 유형: 관리형 플랫폼 -> Java / Correto 17 / 4.2.2 선택
(개발 언어에 따라 플랫폼을 다르게 설정해주어야 한다.)
<애플리케이션 코드>
- 코드 업로드
(로컬에서 작성한 코드를 직접 업로드할 것이기 때문에 선택했다.) - 버전 레이블: 1.0
(최초 버전이기 때문에 1.0으로 입력했다.) - 파일 선택 후 IntelliJ에서 Build한 Jar 파일을 업로드해주었다.
(./gradlew build -> build > libs > SNAPSHOT.jar 업로드) => 처음에 zip파일을 잘못올려서 실패한 스샷인데 성공한 스샷을 찍지 못해 이걸로 대체합니다..
<사전 설정>
- 단일 인스턴스
(프리 티어 사용 가능이라고 적혀있어서 선택의 여지가 없다.)
이렇게 환경 구성을 완료하면 2단계로 넘어갈 수 있다.
2단계) 서비스 액세스 구성
미리 EC2로의 배포를 시도해보면서 서비스 역할을 생성해놓았다. 그래서 기존 서비스 역할 사용을 선택해 서비스 역할, 키 페어, 인스턴스 프로파일을 선택했다.
3단계) 네트워킹, 데이터베이스 및 태그 설정
이 부분 이후부터는 스터디가 필요할 것으로 보인다. AWS의 배경지식이 없다면 쉽사리 건드리지 못할 용어와 설정인 것 같다. 그래도 배포 실습이 목적이니 계속 진행해본다.
- VPC
(강좌나 검색을 해보면 아무도 건드리지 않아서 나도 건드리지 않았다. - 인스턴스 설정: 모두 선택
(모두 선택하면 작동하지 않을까 싶어 모두 선택해보았다. 다음 스터디에서 조금 더 연구해봐야겠다.)
4단계) 인스턴스 트래픽 및 크기 조정 구성
이 부분도 그대로 두었다. 더 연구가 필요하다!!!
다만 용량 부분에서 인스턴스 유형에 t3.small이 디폴트로 선택되어있는데, t3.micro가 프리티어 제한이라 t3.small을 제거해주었다.
5단계) 업데이트, 모니터링 및 로깅 구성
여기도 딱히 바꾼 건 없다. 하지만 나중에 '환경 속성'을 수정했다. 이어지는 내용에서 확인!
여기까지 모두 설정을 완료하고, 환경을 시작했다. 잘 돼라!!!
실패...
: 하지만 불안하게 WARN이 나타났다. 이게 잘못된 건지 모르고 WARN이니까 되겠지~ 하고 그냥 기다렸다. 환경 설정이 완료되었다는 메시지도 보였는데 도메인을 눌러보니 CONNECTION-REFUSE가 나타난다..
다행히도 구글링해보니 금방 찾을 수 있었다. 나는 zip파일을 올리래서 프로젝트 전체를 압축해서 올렸는데 그렇게 하는게 아니라고 한다. 그래서 찾아찾아 IntelliJ에서 프로젝트를 Build한 Jar 파일을 다시 업로드해주었다.
(./gradlew build -> build > libs > SNAPSHOT.jar 업로드)
이제 다른 에러가 나타난다.. 502 Bad Gateway.. nginx.. 바로 구글링해본다.
다행히 해결방법을 금방 찾았다.
블로그(https://dream-and-develop.tistory.com/509)에서 깔끔하게 정리된 내용을 보니,
ELB의 로드 밸런서의 nginx가 기본적으로 포트 5000을 가리키고 있어서 서버 포트 번호를 5000으로 설정해주어야 한다고 한다.
이는 Spring Boot 공식 문서에도 나와있는 내용이다.
(https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html)
그런데, 내 프로젝트에서 properties 파일에 server.port=5000을 추가해놨는데..?
결국 블로그에서와 같이 Elastic Beanstalk 환경 속성에서 SERVER_PORT를 직접 추가해주었다.
다시 도메인 클릭해보니, Whitelabel Error Page가 보인다! 정말 반가운 페이지였다 :)
여러 시행착오가 있었지만 Beanstalk는 정말 간편하게 배포해주는 시스템인것 같다. 더 스터디해볼 필요가 다분하다. 프로젝트에서 쓸 수 있을지 확인해봐야겠다.
'개발 활동 > 스위프' 카테고리의 다른 글
외부 API 연동 - WireMock으로 테스트하기 (0) | 2024.05.31 |
---|---|
외부 API 연동 - 외부 API에 문제가 있으면? Circuit Breaker Pattern & Resilience4j (0) | 2024.05.30 |
외부 API 연동하기 - OpenFeign을 이용한 ChatGPT 연동 (0) | 2024.05.30 |
외부 API 연동하기 - 종류 (0) | 2024.05.30 |
[Test] 애플리케이션 테스트 방법 (0) | 2024.04.29 |