Docker

Docker를 활용한 3tier 배포(DB, FE, BE)

프론트엔드코린이 2025. 7. 22. 11:32

🔥 3티어 Docker 배포 가이드

📌 1. Database (PostgreSQL)

✅ 준비 파일: init.sql

-- 1. 테이블 생성
CREATE TABLE greetings (
    id SERIAL PRIMARY KEY,
    lang VARCHAR(10) UNIQUE NOT NULL,
    message TEXT NOT NULL
);

-- 2. 초기 데이터 삽입
INSERT INTO greetings (lang, message) VALUES
('kr', '안녕하세요'),
('en', 'hello world'),
('jp', '곤니찌와');

application.yml 예시

spring:
  datasource:
    url: jdbc:postgresql://hello-db:5432/hello_db
    username: hellouser
    password: 1234

✅ Docker 네트워크 생성

docker network create hello-net

✅ PostgreSQL 컨테이너 실행

docker run -d \
  --name hello-db \
  --network hello-net \
  -v hello-data:/var/lib/postgresql/data \
  -v "$(pwd)"/init.sql:/docker-entrypoint-initdb.d/init.sql \
  -e POSTGRES_DB=hello_db \
  -e POSTGRES_USER=hellouser \
  -e POSTGRES_PASSWORD=1234 \
  postgres:17

🛠️ 2. Backend (Spring Boot)

✅ Dockerfile

# 빌드 단계
FROM gradle:8.8-jdk17-alpine AS build
WORKDIR /app
COPY . .
RUN gradle bootJar

# 실행 단계
FROM openjdk:17-slim
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

✅ 이미지 빌드

docker build -t hello-backend -f ./backend/Dockerfile ./backend

✅ 컨테이너 실행

docker run -d \
  --name hello-backend \
  --network hello-net \
  -p 8080:8080 \
  -e SPRING_DATASOURCE_URL=jdbc:postgresql://hello-db:5432/hello_db \
  -e SPRING_DATASOURCE_USERNAME=hellouser \
  -e SPRING_DATASOURCE_PASSWORD=1234 \
  hello-backend

✅ 동작 확인

curl http://localhost:8080

🎨 3. Frontend (Next.js)

✅ Dockerfile

FROM node:20-alpine
WORKDIR /app

ARG NEXT_PUBLIC_API_URL
ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL

COPY package*.json ./
RUN npm install
COPY . .

RUN npm run build

EXPOSE 3000

CMD ["npm", "start"]

✅ 이미지 빌드

docker build -t hello-frontend \
  --build-arg NEXT_PUBLIC_API_URL=http://localhost:8080 \
  -f ./frontend/Dockerfile ./frontend

✅ 컨테이너 실행

docker run -d \
  --name hello-frontend \
  -p 3000:3000 \
  hello-frontend

 

 

📊 전체 요약

Database postgres:17 hello-db 내부 5432 init.sql로 초기화 수행
Backend hello-backend hello-backend 8080 Spring Boot 앱 실행
Frontend hello-frontend hello-frontend 3000 Next.js 앱, API URL 전달 필요
네트워크 - hello-net - 모든 컨테이너가 이 네트워크에 연결됨

 

'Docker' 카테고리의 다른 글

Docker compose 사용법  (0) 2025.07.22