[GGB] AWS EC2 위에 Spring Boot 프로젝트 올리기

Kim Hyen Su·2024년 7월 16일

GGB

목록 보기
6/13

#GGB #EC2 #SpringBoot

개요

저번 포스팅에서 AWS EC2에 Docker 및 Docker-Compose를 설치했습니다. 이번에는 실제 SpringBoot 프로젝트를 EC2 위에 올리겠습니다. 과정을 간단하게 요약하면, 다음과 같습니다.
1. Docker 이미지로 build
2. Docker 이미지 Dockerhub에 push
3. docker-compose.yml 파일 정의 및 git push
4. EC2 서버에서 해당 Github Repository Clone 및 실행

이번 포스팅에서는 간단하게 EC2에서 서버를 실행하는 정도만 구현하고, 이후에 추가로 CI/CD를 고려하여 리팩토링할 예정입니다.

docker 이미지로 build

build를 수행하기 전, build folder를 한번 제거하여 빌드 이전 상태로 만들어줍니다.

$ ./gradlew clean

그 다음으로 프로젝트를 build 해줍니다.

$ ./gradlew build

위 과정에서 오류가 발생했었으며, 관련 내용은 아래의 링크를 참조 바랍니다.

⚠️ Trouble-Shooting

Dockerfile을 정의해줍니다.

FROM openjdk:17-jdk-slim
COPY build/libs/graduationgoodbye-0.0.1-SNAPSHOT.jar ggb.jar
ENTRYPOINT ["java", "-jar", "ggb.jar"]
  • FROM : 베이스 이미지를 지정합니다., OpenJDK17 버전의 경량화된(slim) 이미지입니다.
  • COPY : jar 파일을 Docker image에 복사 후 포함시킵니다. 이 때, 이름을 "ggb.jar" 이름으로 복사합니다.
  • ENTRYPOINT : 컨테이너 시작 시 실행할 명령어를 지정합니다. 즉, 컨테이너 시작 시마다 실행되는 명령어를 정의합니다.

마지막으로, .jar 파일을 docker 이미지로 빌드해줍니다.

$ docker build -t 계정명/이미지명:버전명
  • -t : 이미지 이름을 붙여주는 옵션

Docker 이미지 Dockerhub에 push

dockerhub에 이미지를 push하기 위해서는 다음과 같은 명령어를 입력해주면 됩니다.

docker push 계정명/레포지토리명:버전명

위에서 레포지토리명 입력 시 계정명으로 넣어주지 않으면, dockerhub로 접근이 불가능하게 됩니다. 따라서 Docker 이미지 빌드 시 잘 확인해줘야 합니다.

Docker-Compose 정의

version: '3'
services:
  db:
    container_name: mysql
    image: mysql:8.4
    environment:
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_DATABASE=test
    ports:
      - "13306:3306"
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./data/test:/var/lib/mysql
  app:
    container_name: ggb
    image: kimhyensu/ggb:1.0
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/test?useSSL=false
      - SPRING_DATASOURCE_USERNAME=root
    depends_on:
      - db
    healthcheck:
      test: if netstat -ltn | grep -c "8080"; then echo 0; else echo 1; fi
      interval: 10s
      timeout: 5s
      retries: 2
  • version : Docker Compose 버전을 정의합니다.
  • sevices : 실행할 서비스를 정의합니다.
  • {서비스명} : 사용할 서비스 명을 정의합니다.
  • image : base 이미지를 정의합니다.
  • ports :

EC2에서 SpringBoot 프로젝트 실행

git clone을 사용하여 필요한 프로젝트를 github 레포지토리로 부터 가져옵니다.

그 다음 docker-compose -d up 명령어를 통해서 서버를 실행시켜줍니다.

정상적으로 서버가 기동된 것을 확인할 수 있습니다.

마무리

이번 포스팅을 끝으로 EC2에 SpringBoot 프로젝트를 올려 배포하는 과정에 대해서 정리하였습니다. 처음 AWS EC2와 Docker 및 Docker-Compose를 사용하여 배포를 경험해봤습니다. 추후 Jenkins를 사용하여 CI/CD 구축 후 개발 과정에 들어갈 예정이므로, 관련된 구현 과정들도 기록하도록 하겠습니다.

profile
백엔드 서버 엔지니어

0개의 댓글