🐳 Docker 기반 서버 구성

정의

Docker 기반 서버 구성은 애플리케이션과 실행 환경을 컨테이너 단위로 분리해 배포하는 방식이다.

Spring Boot 백엔드와 React 프런트엔드를 각각 컨테이너로 분리하면 배포와 운영이 더 깔끔해진다.

🧭 기본 구성 흐름

  1. 서버에 Docker와 관련 도구를 설치한다.
  2. 백엔드와 프런트엔드를 각각 이미지로 만든다.
  3. docker-compose.yml로 전체 서비스를 묶는다.
  4. 포트와 볼륨, 환경 변수를 설정한다.
  5. 컨테이너를 실행하고 운영한다.

🛠️ 서버 환경 준비

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

🧱 Spring Boot 컨테이너 예시

정의

Spring Boot는 Gradle로 빌드한 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 컨테이너 예시

정의

React는 정적 파일을 빌드한 뒤 nginx로 서빙하는 구성이 일반적이다.

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 파일은 별도로 관리한다.
  • nginx reverse proxy와 HTTPS 설정도 함께 확인한다.
  • 운영 환경에 맞게 포트와 볼륨 경로를 조정한다.
  • 컨테이너 재시작 정책과 로그 경로도 함께 고려한다.

📌 정리

  • Docker 기반 서버 구성은 서비스를 컨테이너 단위로 분리해 운영하는 방식이다.
  • 백엔드, 프런트엔드, DB를 분리하면 관리가 쉬워진다.
  • docker-compose를 사용하면 여러 컨테이너를 함께 다루기 편하다.

연결문서

댓글남기기