본문 바로가기
Infra/AWS

[Infra] AWS를 활용한 웹 애플리케이션 배포(4) - 소스코드 배포

by Blue Developer 2024. 1. 7.

안녕하세요.

 

지난 포스트까지는 RDS 및 ElastiCache를 통해 클라우드 환경에서 MySQL과 Redis를 구축해보는 시간을 가졌습니다. 이번 포스트에서는 구축한 환경을 바탕으로 소스코드를 배포하는 내용을 다루도록 하겠습니다. 이전 포스트 내용이 궁금하신 분들은 아래 링크를 클릭해주세요 :)

 

[Infra] AWS를 활용한 웹 애플리케이션 배포(1) - EC2 인스턴스 생성 및 접속

안녕하세요. 프로젝트를 진행하게 되면 기능 개발이 어느정도 완료된 시점에 소스코드를 배포해서 팀원들과 함께 테스트를 진행하는 등 협업이 필요한 경우가 발생합니다. 저는 조사한 여러 클

hareandrabbit.tistory.com

 

[Infra] AWS를 활용한 웹 애플리케이션 배포(2) - RDS를 통해 클라우드 환경에 MySQL 구축

안녕하세요. 지난 포스트에서는 웹 애플리케이션 배포를 위해 EC2 인스턴스를 생성하고, 생성한 인스턴스에 연결해보는 내용을 다뤘습니다. EC2를 통해 깃허브 레포지토리에 저장된 소스코드를

hareandrabbit.tistory.com

 

[Infra] AWS를 활용한 웹 애플리케이션 배포(3) - ElastiCache를 통해 클라우드 환경에 Redis 구축

안녕하세요. 지난 포스트에서는 RDS를 통해 데이터베이스를 생성하고, 생성한 DB에 EC2 인스턴스를 연결하는 내용을 다뤘습니다. RDS와 마찬가지로 클라우드 환경에서 Redis 같은 In-Memory DB를 구축하

hareandrabbit.tistory.com

 

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번으로 라우팅되도록 운영하는 방식을 사용했습니다.

 

Unable to run Spring Boot on 80 port - Questions - OneCompiler

To run anything under 1024 port you need sudo permission on Unix systems, so you need to start the service with root permissions. But running the service sudo permissions is not really a good idea as it makes your system more vulnerable to attack. So follo

onecompiler.com

 

(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 오류가 발생했지만, 컨트롤러가 설정됐다면 구성한 화면이 보여지게 됩니다.

 

마무리

 

이번 포스팅 내용까지 포함해서 다사다난했던 웹 애플리케이션 배포 과정이 종료됐습니다. 처음 진행해본만큼 어려움도 많았고, 시간도 많이 소요돼서 힘들었지만 포기하지 않고 끝까지 매달린 덕분에 성공적으로 마칠 수 있었다고 생각합니다. 진행 과정에서 문제가 발생한 경우에는 댓글을 남겨주시면 확인해보고 답글 달아드리도록 하겠습니다.

 

포스팅한 내용이 도움이 되었다면 공감 부탁드립니다 :)

 

감사합니다.

댓글