본문 바로가기
개발 활동/스위프

AWS Elastic Beanstalk로 간단 배포

by 다음에바꿔야지 2024. 4. 22.

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는 정말 간편하게 배포해주는 시스템인것 같다. 더 스터디해볼 필요가 다분하다. 프로젝트에서 쓸 수 있을지 확인해봐야겠다.