키보드워리어

[AWS] elastic beanstalk을 이용하여 웹서비스 배포 본문

개발 관련/AWS 정리

[AWS] elastic beanstalk을 이용하여 웹서비스 배포

꽉 쥔 주먹속에 안경닦이 2023. 4. 2. 22:17
728x90

안녕하세요! 오늘 저는 AWS Elastic Beanstalk를 사용하여 웹 애플리케이션을 배포해보려고 합니다.

시작부터 난관 - 502 Bad Gateway

REST API를 디자인한 todolist를 배포하려고 

 

todolist를 REST API를 만들었습니다.

 

그리고 maven run as를 활용해서 

clean install로 jar파일을 만들었는데요!

 

문제는 사이트에 계속해서 502 bad gate way가 뜨더라고요 ㅠ,ㅠ

502 bad gate way
정말 골치 아팠던 이녀석..

그래서 저는 Maven run을 통해 clean install도 해보고 package로도 해보고
jar로도 만들어보고 war파일로도 만들어보고 정말 여러 가지 방법을 시도해 봤습니다.

하지만 502는 사라지지 않더라고요 ㅜㅜ. 구성포트를 잘못했는지,
아니면 링크를 잘못 타고 들어간 건지 갈피를 못 잡고 있었어요. (장장 2일 동안)

아니 왜 localhost8080에서는 잘 돌아가는데 aws에는 안 되는 거지?

여러 유튜브 자료들을 참고하여 실수한 건 없는지 차근차근 돌아봤어요.

그랬더니 왜 그런지 힌트를 조금 찾을 수 있겠더라고요..!

https://www.youtube.com/watch?v=qUHf_a2DRio 

 

힌트는 위 유튜브 영상에서 찾아볼 수 있었어요.

위 영상을 강의해 주시는 유튜버분께서는 웹서버를 배포할 때 localhost:8080을 안 쓰시더라고요!

 

 

아~ 이게 엔드포인트랑 관련이 있나??

 

 

생각이 들었던 저는 제가 만들었던 jar파일을 삭제하고 

다시 application.properties 파일을 들여다보게 되었습니다.

 

#spring.jpa.hibernate.ddl-auto=update
#spring.datasource.url=jdbc:mysql://localhost:3306/test
#spring.datasource.username=root
#spring.datasource.password=****
#spring.jpa.show-sql=true
#spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

여기서 저 localhost:3306 녀석 좀 쎄하게 느껴지더라고요. 저곳은 엔드포인트가 있는 곳!

하지만 aws에서 들어갈 수 없어!

 

다음은 chatGPT에서 얻은 답변입니다.
AWS Elastic Beanstalk에 애플리케이션을 배포할 때 올바른 데이터베이스 구성을 사용하고 있는지 확인해야 합니다.
제공한 구성에서 로컬 MySQL 데이터베이스(localhost:3306)에 연결하는 것으로 나타납니다.
이 구성은 로컬 시스템에서 작동하지만 Elastic Beanstalk에 배포할 때는 작동하지 않습니다.
"localhost"는 실제 데이터베이스 서버가 아니라 Elastic Beanstalk 인스턴스 자체를 참조하기 때문입니다.

 

 

 

그렇군요!

해답을 얻은 저는 데이터베이스를 삭제하고 jar파일로 구성 후에 elastic beanstalk로 배포를 해보니,, 드디어 되더라고요 ㅜㅜ..

 

server_port 5000번 지정
server_port 5000번 지정

그리고도 안 되는 분은 elastic beanstalk의 환경속성에 server_port를 5000으로 추가해 주시기 바랍니다.

왜냐면 아마존의 포트가 5000이거등요..

서버 배포 완료된 모습
서버 배포 완료된 모습

 

그러면 데이터베이스는 언제 연결해야 하는 건가요?

데이터베이스 또는 다른 관리형 데이터베이스 서비스에 Amazon RDS 인스턴스를 사용하고 올바른 연결 세부 정보로 application.properties 파일을 업데이트해야 합니다.

 

RDS 인스턴스 환경을 조금 바꿔주세요.

인바운드 규칙
인바운드 규칙

데이터 베이스 VPC 보안 클릭! -> 인바운드 규칙 위와 같이 바꿔주기

 

 

다음은 Amazon RDS MySQL 인스턴스를 사용하도록 애플리케이션을 구성하는 방법의 예입니다.

spring.datasource.url=jdbc:mysql://나의 엔드포인트 지점:3306/test

 

엔드포인트 지정!

엔드포인트는 네트워크 또는 인터넷에서 특정 서비스, 리소스 또는 서버의 위치를 ​​나타내는 URL 또는 주소입니다.
웹 서비스, API 및 클라우드 컴퓨팅의 맥락에서 엔드포인트는 종종 클라이언트 애플리케이션이 특정 서비스 또는 리소스에 액세스 하고 상호 작용하는 데 사용하는 URL을 나타냅니다.

 

Amazon RDS의 경우 엔드포인트는 애플리케이션이 데이터베이스에 연결할 수 있도록 하는 RDS 인스턴스의 고유한 URL이 있습니다.
웹 서비스를 RDS 인스턴스에 연결하려면 올바른 RDS 엔드포인트를 가리키도록 application.properties 파일을 업데이트해야 합니다.

 

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://test.cluor7izmj6k.ap-southeast-2.rds.amazonaws.com:3306/test
spring.datasource.username=root
spring.datasource.password=****
spring.jpa.show-sql=true
server.port=5000
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

 

databases 연결하기
databases 연결하기

저는 이렇게 해서 서버 배포를 할 수 있었습니다!

연결 완료된 모습
연결 완료된 모습

 

 

 참고하시면 좋은 글 

 

2022.08.11 - [개발 관련/AWS 정리] - 【AWS】S3의 기능을 활용해보자!

 

【AWS】S3의 기능을 활용해보자!

안녕하세요 【키보드 워리어】 블로그 방문자 여러분, 안경닦이입니다. 오늘은 AWS - S3 에 대해 포스팅해보겠습니다~ S3란? :Amazon Simple Storage Service(Amazon S3)는 업계 최고 수준의 확장성, 데이터 가

keyboardwarrior.tistory.com

 

2022.08.10 - [개발 관련/AWS 정리] - 【AWS】클라우드 서비스 aws에 대한 포스팅

 

【AWS】클라우드 서비스 aws에 대한 포스팅

안녕하세요! 【키보드 워리어】 블로그 방문자 여러분, 안경닦이입니다. 오늘은 AWS에 대해 알아보겠습니다. AWS란? AWS는 Amazon Web Service에 약칭으로 클라우드 아키텍처 인프라를 제공해주는 서비

keyboardwarrior.tistory.com

 

728x90