Cloud

AWS EC2에 스프링부트 첫 배포한 후기 [RDS/MySql]

rexondex 2024. 9. 30. 13:18

aws 우분투에서 .jar파일 실행
회원정보관리 페이지, 정보보기와 탈퇴 제공
로그인하면 RDS의 mysql 테이블에 OAuth2를 통한 구글 로그인 레코드를 저장시킨다.
Google 로그인 정보로 글쓰기/ 수정/ 삭제/ 회원정보보기/ 탈퇴 모두 정상 작동하였다.

 


 

[ AWS 배포를 위해 밟은 절차 ]

 

1. 스프링부트 프로젝트를 .jar 파일로 만든다.

2. AWS EC2 인스턴스를 우분투로 생성 및 연결한다.

3. AWS RDSmySql로 생성하여 로컬에서 실행할때와 같은 구조로 테이블과 제약조건을 구성한다.

 

4. AWS의 우분투 환경에 FileZilla로 연결하여 .jar 파일을 업로드한다.

5. 우분투 콘솔에서 .jar 파일을 실행시킨다.

( 프로젝트에서 사용하는 자바 버전을 처음 한번은 명령어를 통해 설치해줘야 한다. )

 

6. 로컬 콘솔에서 봤던 것처럼 로그를 통해 스프링부트가 제대로 실행되는지 확인한다.

 

7. [... Started ... :8080 ...] 등 로그가 확인되면 "ec2-...-...com" 형식의 퍼블릭주소에 포트 :8080 을 붙여 접속한다.

8. 의도한 방법대로 잘 작동되는지 확인한다. 절대경로/상대경로 문제가 발생할 수 있고 DB환경 세팅에 대한 오류가 있을 수 있다.

9. 프리티어 유저라면 EC2 와 탄력적 IP 등 서비스에서 지속적인요금이 발생할  수 있으므로 테스트 후엔 해제할 필요가 있다.

 

10. 추가적으로 AWS의 Route53 기능을 이용하여 가비아 등 도메인을 판매하는 사이트를 통해 도메인을 구입하여 도메인을 연결해보는 것도 좋을것같다. ( Route53은 유료 서비스로 구분되는 것 같습니다 )

 


 

[ 배포 후기 ] 

 

환경을 세팅하는 것에 익숙해진다면 로컬에 환경을 구성하듯 EC2의 환경, 콘솔을 이용하여 실행 환경을 세팅하고 RDS에서 DB환경을 세팅하여 .jar 패키지를 실행, 접속 확인만 되면 현재 프로젝트를 구동하는데 있어 큰 문제가 없었던 것 같습니다.

 

전체적으로 요금이 발생하는 유료 서비스다보니 하나하나 꼼꼼히 어떤 기능이 있는지 체크하는 것도 꽤 많은 시간이 들었습니다.

 

저는 EC2의 우분투 환경에 FileZilla를 통해 로컬에서 생성한 .jar 패키지를 업로드하는 방법을 사용했습니다. 터미널 명령어 scp 로 전달하는 방법도 있다는데 저는 파일질라가 좀더 편리했던 것 같습니다.

 

한달동안 EC2와 탄력적IP , RDS를 모두 실행시켜 놨는데 프리티어 요금제가 다 소모되어서 추가요금이 나왔습니다(5달러 과금)

 

가비아에서 프로젝트명.site 로 된 도메인을 결제하였는데 다음번 클라우드에 연결할때는 ROUTE53 을 통해 도메인까지 연결해볼 생각입니다.

ROUTE53 으로 처음 결제한 도메인에 연결을 시도해봤는데 네임서버DNS를 가비아와 AWS에 매핑해놨는데 도메인 주소로 접속이 안되서 보류했습니다. ( 어디의 문제인지 찾지 못함 )

 

 

제 프로젝트의 경우 스프링부트 안에 리액트 프로젝트를 통합시킨 환경이었습니다.

그래서 스프링부트는 웹어플리케이션서버(WAS)로서 동작하면서 .jar 파일로 통합 배포할때 프론트환경인 리액트도 한꺼번에 배포하기 위해서 이 방법을 택했습니다.

 

타임리프서버사이드렌더링을 하면 더 쉽게 게시판 어플리케이션을 만들 수 있지 않을까? 라고 생각하여 전체 HTML을 모두 타임리프로만 작성했습니다.

그러나 "HTML에 웹서버에서 처리한 정보를 담기만 하면 되니 개발할때 빠르고 편하겠다" 라는 예상과 달리 많은 양의 DTO, 엔터티들을 복잡할정도로 많이 생성해야만 했습니다.

 

매우 복잡하고 번거로운 작업이였습니다.

 

그래서 클라이언트사이드렌더링으로 방향을 전환하고 리액트 프로젝트를 스프링부트 안에 넣어놓으면 배포할때도 한번에 배포하면 되고, 스프링부트에서 서버작업을 하면서 리액트는 VSCode로 실행하여 관리 및 작성하면 되어서 편리했습니다.

그리고 같은 프로젝트 경로 안에 있지만 서로 다른 환경을 가지기때문에 확실하게 침범하지 않는 작업 영역을 구분지을 수 있는게 장점이라고 생각했습니다.

 

이렇게 진행한 결과 예상했던 것과 같은 편리함을 누릴 수 있었습니다.