Spring Boot 백엔드와 React 프론트엔드로 구성된 사진관리 프로젝트를 Docker 기반으로 배포하였다. 이 글에서는 Docker를 이용해 개발 환경을 구성하고 서버에 배포한 과정을 정리해 보도록 하자

서버 환경 준비

sudo apt update && sudo apt upgrade -y
sudo apt install -y docker.io docker-compose openjdk-17-jdk git

Spring Boot 앱 도커화

백엔드 앱은 Gradle로 build한 JAR 파일을 컨테이너에 복사하여 실행하는 방식으로 구성한다.

FROM openjdk:17
VOLUME /tmp
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENV SPRING_PROFILES_ACTIVE=prod
ENTRYPOINT ["java","-jar","/app.jar"]

React 앱 도커화

프론트는 Vite 기반으로 빌드한 정적 파일을 nginx에 serve하는 형태로 구성하였다.

FROM nginx:alpine
COPY ./dist /usr/share/nginx/html
COPY ./default.conf /etc/nginx/conf.d/default.conf


Docker Compose로 통합 관리

docker-compose.yml로 백엔드와 프론트엔드를 동시에 관리할 수 있도록 구성했다.

services:
  backend:
    build:
      context: ./pictureManagerServer
      dockerfile: Dockerfile
    container_name: springboot-app
    ports:
      - "8080:8080"
    volumes:
      - /home/user/application/pictureManagerServer/photos:/app/photos
      - /home/user/application/pictureManagerServer/logs:/app/logs
    environment:
      SPRING_PROFILES_ACTIVE: prod

  frontend:
    build:
      context: ./pictureManagerClient
      dockerfile: Dockerfile
    container_name: react-nginx
    ports:
      - "3000:80"

volumes:
  db_data:

docker-compose up --build -d
  

보안 설정 및 배포 주의사항

  • DB 정보나 비밀키는 .env 또는 application-secret.yml 등 외부 파일로 분리
  • nginx reverse proxy 구성 및 HTTPS 인증서(예: Let’s Encrypt) 적용 필요
  • 도메인 및 방화벽 설정은 운영 환경에 맞게 조정

마무리

Docker를 이용해 Spring Boot와 React 앱을 분리된 컨테이너에 배포하면서 운영환경 구성의 유연성과 효율성을 확보하였다. 개발과 운영 환경을 분리해 배포 자동화로 확장할 수 있는 기반을 마련하였다.


연결문서

댓글남기기