안녕하세요.
지난 포스트까지는 RDS 및 ElastiCache를 통해 클라우드 환경에서 MySQL과 Redis를 구축해보는 시간을 가졌습니다. 이번 포스트에서는 구축한 환경을 바탕으로 소스코드를 배포하는 내용을 다루도록 하겠습니다. 이전 포스트 내용이 궁금하신 분들은 아래 링크를 클릭해주세요 :)
1. JDK 설치
(1) 스프링부트 버전과 호환되는 JDK를 선택해서 설치합니다. 저는 스프링부트 3.2 버전을 사용하고 있기에 JDK 17을 설치했습니다.
🖥️ sudo apt install openjdk-17-jre-headless
(2) 설치가 완료되면 명령어를 입력해서 자바 버전이 맞는지 확인합니다.
🖥️ java -version
2. 빌드파일 생성 및 서버 실행
(1) 소스코드를 배포하려는 프로젝트가 존재하는 레포지토리를 클론합니다.
🖥️ git clone [레포지토리 주소.git]
(2) application.yml 설정 파일로 이동해서 로컬 접속환경을 RDS 및 ElastiCache 엔드포인트로 변경합니다.
🖥️ sudo vi application.yml
(3) 클론한 레포지토리로 이동해서 명령어를 통해 파일을 빌드합니다.
🖥️ ./grdadlew build
(4) 만약에 'Permission denied'로 인해 빌드가 올바르게 진행되지 않으면, 아래 명령어를 입력 후 다시 빌드를 진행합니다.
🖥️ sudo chmod +x gradlew
(5) 빌드 완료 후 파일이 만들어진 경로로 이동해서 jar 파일을 실행합니다.
🖥️ cd /build/libs
🖥️ java -jar [빌드 파일].jar
💥주의사항
EC2 인바운드 규칙에서 HTTP는 80번 포트에 대해 연결이 가능합니다. 따라서 스프링부트가 기본으로 사용하는 8080번 포트를 80번으로 변경해줘야 하는데, 설정 파일에서 포트를 변경 후 빌드한 파일을 실행하면 오류가 발생합니다. 1024번 이하 포트는 sudo 권한을 필요로 하기 때문인데, 오히려 시스템을 취약하게 만들 수 있어서 권장하지 않는다고 합니다. 따라서 sudo 권한으로 서비스를 실행하는 대신, 8080번으로 요청이 들어오면 80번으로 라우팅되도록 운영하는 방식을 사용했습니다.
(6) IP 테이블에서 8080번 포트와 80번 포트에 트래픽이 발생하는 것을 허용합니다.
🖥️ sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
🖥️ sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
(7) 80번 포트로 들어오는 요청을 8080번 포트로 라우팅합니다.
🖥️ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
(8) 서버 실행 후 EC2 인스턴스의 퍼블릭 IPv4을 URL에 붙여넣고 접속을 시도합니다.
💡 스프링 시큐리티를 연동했기 때문에 403 오류가 발생했지만, 컨트롤러가 설정됐다면 구성한 화면이 보여지게 됩니다.
마무리
이번 포스팅 내용까지 포함해서 다사다난했던 웹 애플리케이션 배포 과정이 종료됐습니다. 처음 진행해본만큼 어려움도 많았고, 시간도 많이 소요돼서 힘들었지만 포기하지 않고 끝까지 매달린 덕분에 성공적으로 마칠 수 있었다고 생각합니다. 진행 과정에서 문제가 발생한 경우에는 댓글을 남겨주시면 확인해보고 답글 달아드리도록 하겠습니다.
포스팅한 내용이 도움이 되었다면 공감 부탁드립니다 :)
감사합니다.
'Infra > AWS' 카테고리의 다른 글
[Infra] AWS를 활용한 웹 애플리케이션 배포(3) - ElastiCache를 통해 클라우드 환경에 Redis 구축 (2) | 2024.01.07 |
---|---|
[Infra] AWS를 활용한 웹 애플리케이션 배포(2) - RDS를 통해 클라우드 환경에 MySQL 구축 (2) | 2024.01.06 |
[Infra] AWS를 활용한 웹 애플리케이션 배포(1) - EC2 인스턴스 생성 및 연결 (0) | 2023.12.25 |
댓글