-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
📌 PostgreSQL + Spring Boot: 개발·배포·Docker Compose 통합
https://hub.docker.com/_/postgres
1. PostgreSQL Docker 컨테이너 실행
docker run -d -p 5432:5432 --name postgres -e POSTGRES_PASSWORD=rootpass postgres:16-alpine
docker logs postgres
docker ps- 컨테이너 이름: postgres
- 비밀번호: rootpass
- 포트 매핑: 5432:5432
2. 개발 환경 (application-dev.yml)
server:
port: 8080 # 충돌 문제 시 수정
spring:
# JPA
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect # PostgreSQL
show_sql: true
format_sql: true
# 데이터소스
datasource:
driver-class-name: org.postgresql.Driver # PostgreSQL
url: jdbc:postgresql://localhost:5432/postgres
username: postgres
password: rootpass- localhost를 통해 로컬에서 PostgreSQL 컨테이너에 직접 연결
3. 개발 실행 결과
- Pet 엔티티에 대응되는 테이블이 자동 생성됨 (Hibernate ddl-auto: create)
- Docker PostgreSQL과 연결 성공 시 아래처럼 테이블이 보임
4. 배포 환경 준비 (prod)
- 네트워크 구성
docker network create db-network
docker network connect db-network postgres
docker network inspect db-networkSpring Boot 컨테이너와 PostgreSQL 컨테이너를 같은 네트워크에 연결
내부 통신 주소는 postgres (컨테이너 이름)
- application-prod.yml
server:
port: 8080 # 충돌 문제 시 수정
spring:
# JPA
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
dialect: org.hibernate.dialect.PostgreSQLDialect
show_sql: true
format_sql: true
# 데이터소스
datasource:
driver-class-name: org.postgresql.Driver
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}- .env 파일
DB_URL=jdbc:postgresql://postgres:5432/postgres
DB_USERNAME=postgres
DB_PASSWORD=rootpassPostgreSQL 컨테이너 이름을 postgres로 사용하여 같은 네트워크 내에서 연결
5. 배포용 Spring Boot 이미지 빌드 & 실행
docker build -t my-boot:postgres -f Dockerfile .
docker run -d -p 8787:8080 --name boot-container-250522 --env-file .env --network db-network my-boot:postgres
docker logs boot-container-250522- 8787 포트로 외부에 노출
- 환경 변수는 .env로부터 주입
- PostgreSQL과 동일 네트워크(db-network) 사용
3. Docker Compose로 통합 자동화
- docker-compose.yml
services:
# spring boot
app:
build: .
ports:
- "${APP_PORT}:8080" # 외부 -> 내부 포트 연결
env_file:
- ".env"
networks:
- "app-network"
depends_on:
- postgresql # DB 먼저 실행
# Postgres
postgresql:
image: "postgres:16-alpine"
env_file:
- ".env"
ports:
- "${DB_PORT}:5432" # 외부 -> DB 포트 연결
volumes:
- "db-data:/var/lib/postgresql/data"
networks:
- "app-network"
volumes:
db-data: # DB 데이터 영속화
networks:
app-network:- .env
DB_URL=jdbc:postgresql://postgresql:5432/postgres
DB_USERNAME=postgres
DB_PASSWORD=rootpass
# 포트
APP_PORT=18787
DB_PORT=15432
# DB
POSTGRES_PASSWORD=rootpasspostgresql은 서비스 이름이며 내부 네트워크의 호스트명으로 작동
docker compose up # 실행
docker compose down # 중지 및 정리