[KB_최종 프로젝트 CI/CD] 티켓팅 서비스 구축 - AWS EC2 인스턴스로 스프링 프로젝트 수동 베포

JUN·2024년 10월 6일
0

KB IT's your life

목록 보기
14/16

EC2 접속하기 까지 진행된 EC2 인스턴스를 통해 배포가 진행됩니다.

배포될 프로젝트는 https://github.com/KBfinance-team-MetalWallet/metal-wallet-backend 입니다.
이전 페이지를 확인하고 오세요.

서론

이 글에서는 AWS EC2에서의 Java 환경(JDK)Tomcat 설정부터, GitHub에서 프로젝트를 클론하고 빌드한 후 이를 WAR 파일로 배포하는 과정을 자세히 다룬다.

두 가지 배포 방법을 제시하여, 직접 빌드하여 배포하는 방법과 빌드된 파일을 외부에서 가져오는 방법을 비교하며, 각각의 장단점을 설명하고자 한다.

ℹ️ 현재 EC2 인스턴스 (240930-KB-deploy-test) 상태

Ubuntu - ubuntu-noble-24.04-amd64-server-20240801

보안 규칙 - 인바운드 ssh 0.0.0.0:22 허용 HTTP 0.0.0.0:80 허용

배포될 Spring 프로젝트( https://github.com/KBfinance-team-MetalWallet/metal-wallet-backend ) 정보

배포를 위해 필요한 주요 환경 요소:

  • Java Development Kit (JDK) 17
  • MySQL 8.0.33 (또는 호환 가능한 버전)
  • Tomcat 9 (Servlet API 4.0.1과 호환)
  • Gradle (빌드 도구)

추가 라이브러리 및 프레임워크:

  • Spring Framework 5.3.24
  • Spring Security 5.7.3
  • Hibernate 5.6.15.Final
  • MyBatis 3.5.13
  • Logback

 1. Ubuntu 환경에서 JDK 설치하는 법

Spring Framework 5.3.24 에서 JDK 17 를 사용 예정이다.

$ sudo apt update && /
sudo apt install openjdk-17-jdk -y

2. Ubuntu 환경에서 Tomcat 설치하는 법

Spring Framework 기반 애플리케이션을 실행하려면 외부 WAS(Web Application Server)가 필요하며, Tomcat을 사용할 수 있다. Tomcat 9은 Spring Framework 5.x 및 Servlet API 4.0.1과 호환된다.

1. Tomcat 사용자 생성 및 설치

# Tomcat 설치를 위한 사용자 추가
$ sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat

# Tomcat 9 다운로드 (최신 버전 사용)
$ wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.95/bin/apache-tomcat-9.0.95.tar.gz

# 다운로드한 파일 압축 해제
$ sudo tar xvf apache-tomcat-9.0.95.tar.gz -C /opt/tomcat

# 디렉토리명 변경
$ sudo mv /opt/tomcat/apache-tomcat-9.0.95 /opt/tomcat/latest

# Tomcat에 권한 부여
$ sudo chown -R tomcat: /opt/tomcat/latest

2. Tomcat 환경 설정

Tomcat이 설치된 경로를 환경 변수로 설정한다.

# 환경 변수 설정을 위한 파일 열기
$ sudo nano /etc/systemd/system/tomcat.service

# 다음 내용 추가 (설정 파일에 Tomcat 경로 설정)
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"

ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh

[Install]
WantedBy=multi-user.target

3. Tomcat 서버 시작 및 활성화

# systemd를 통해 Tomcat 서비스 활성화
$ sudo systemctl daemon-reload
$ sudo systemctl start tomcat

톰캣 상태 확인

# 톰캣 상태 확인
sudo systemctl status tomcat

톰캣이 잘 설치되어 실행되고 있다면 서버 자동 시작 설정을 합니다.

# 서버 자동 시작 설정
$ sudo systemctl enable tomcat

4. 방화벽 설정 (필요한 경우)

Tomcat의 기본 포트는 8080이므로 EC2 보안 그룹에서 포트 8080을 열어줘야 외부에서 접근할 수 있다.

# EC2 보안 그룹에서 8080 포트 열기

3. GitHub에서 Spring 프로젝트 Clone 하기

EC2 인스턴스에 Spring 프로젝트를 배포하려면 GitHub에서 프로젝트를 클론하고 설정 파일을 맞추는 작업이 필요하다.

# Git 설치 (설치 안 되어 있을 경우)
$ sudo apt install git -y

# 프로젝트 Clone
$ ggit clone https://lee-junr:ghp_xxxxxxxxxxxxxxxxxxxxx@github.com/KBfinance-team-MetalWallet/metal-wallet-backend.git

# 디렉토리로 이동
$ cd metal-wallet-backend

git clone https://lee-junr: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@github.com/KBfinance-team-MetalWallet/metal-wallet-backend.git

4. 프로젝트 빌드 및 배포

방법 1: WAR 파일 직접 빌드

프로젝트를 직접 빌드하여 WAR 파일을 생성하는 방법

1. Gradle로 프로젝트 빌드

Tomcat이 Spring Framework 애플리케이션을 실행하려면 프로젝트를 WAR 파일로 빌드해야 합니다. 프로젝트의 build.gradle에 WAR 플러그인이 설정되어 있어야 한다.

# 권한이 없을 시 실행 권한('+x')을 추가
sudo chmod +x ./gradlew

# Gradle을 사용해 프로젝트를 빌드한다.
$ ./gradlew clean build

빌드가 성공하면 build/libs/ 디렉토리 안에 WAR 파일이 생성됩니다.

방법 2: 빌드된 WAR 파일 외부에서 가져오기

이미 빌드된 WAR 파일을 외부에서 가져와 배포하는 방법

# 예: SCP를 사용하여 로컬 머신에서 WAR 파일을 EC2로 전송
$ scp -i your-key.pem path/to/your-app.war ec2-user@your-ec2-ip:/home/ec2-user/

WAR 파일 Tomcat에 배포 (공통)

두 방법 모두 WAR 파일을 확보한 후, Tomcat의 webapps 폴더로 복사하여 배포

# WAR 파일을 Tomcat의 webapps 디렉토리로 복사
$ sudo cp /path/to/your-app.war /opt/tomcat/latest/webapps/

저같은 경우는 해당 pem 파일을 사용하여 Elastic IP 처리된 ec2 인스턴스로 war 파일을 보내줬습니다.(나중에 s3로 진행해도 될듯?)

scp -i 240930-KB-deploy-test-key-pair.pem metal-wallet-backend-1.0-SNAPSHOT.war ubuntu@15.164.199.174:/home/ubuntu

Tomcat 재시작

# Tomcat 서버 재시작
$ sudo systemctl restart tomcat

Tomcat이 WAR 파일을 인식하고 자동으로 애플리케이션을 구동한다.

브라우저에서 EC2 IP 또는 도메인에 접속하여 애플리케이션이 잘 실행되는지 확인할 수 있다.

# 예시: http://your-ec2-ip:8080/your-app

이 두 가지 방법을 통해 Spring Framework 기반 프로젝트를 EC2 인스턴스에 배포하고 실행할 수 있다.

직접 빌드하는 방식은 소스 코드 관리와 빌드 프로세스를 더 잘 제어할 수 있지만, 외부에서 가져오는 방식은 빌드 환경이 다른 경우나 빠른 배포가 필요한 경우에 유용하다.

결론

AWS EC2.micro 로 War 파일을 서버에서 직접 빌드하고자 했으나 서버의 자원이 생각보다 작아 빌드 실패가 자주 발생했다.
이에 다음 글에서는 서버에서 직접 빌드하는 방식보다는 Github Actions를 사용해서 빌드시키고 빌드된 파일을 서버로 보내는 방식을 사용해볼까 한다.

profile
순간은 기록하고 반복은 단순화하자 🚀

0개의 댓글