프로젝트 환경
이번 프로젝트에서는 Docker Compose를 이용해서 다음과 같은 개발 환경을 구성하였다.
Spring Boot
│
├── PostgreSQL
└── Redis
모든 서비스는 하나의 Docker Network 안에서 실행되고 Spring Boot는 PostgreSQL과 Redis를 내부 네트워크를 통해 통신하도록 구성했다.
Docker Compose란?
Dockerfile은 하나의 컨테이너를 만드는 방법을 정의.
실제 프로젝트에서는
- Spring Boot
- PostgreSQL
- Redis
처럼 여러 개의 컨테이너가 함께 동작해야한다. 이들을 하나의 파일에서 관리하기 위해 사용하는 것이 Dokcer Compose이다
docker compose up
이 명령어를 실행하면 Spring Boot, PostgreSQL, Redis가 모두 실행된다.
docker-compose.yml 작성하기
services: ----> Docker Compose에서 실행할 컨테이너들을 정의하는 영역
spring: ---> 컨테이너 (1)
build:
context: . --->빌드 기준 디렉토리
dockerfile: Dockerfile --->사용할 Dockerfile 지정
container_name: threeservings-server
ports:
- "19096:19096" ---> 호스트 PC: 19096 -> 컨테이너: 19096
depends_on: ---> Spring Boot보다 PostgreSQL, Redis 컨테이너가 먼저 실행하도록
- postgres
- redis
environment:
SPRING_PROFILES_ACTIVE: ${SPRING_PROFILES_ACTIVE}
DB_URL: ${DB_URL}
DB_USERNAME: ${DB_USERNAME}
DB_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: ${REDIS_HOST}
REDIS_PORT: ${REDIS_PORT}
restart: always ---> 컨테이너가 종료되면 자동 재시작
postgres: ---> 컨테이너 (2)
image: postgres:16 ---> Docker Hub의 공식 이미지 사용
container_name: threeservings-db
ports:
- "5432:5432"
environment:
POSTGRES_DB: threeservings
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- threeservings-postgres-data:/var/lib/postgresql/data
restart: always
redis: ---> 컨테이너 (3)
image: redis:7
container_name: threeservings-redis
ports:
- "6379:6379"
volumes:
- threeservings-redis-data:/data
restart: always
volumes:
threeservings-postgres-data:
threeservings-redis-data:
Docker Compose 실행 시
docker compose up --build
를 입력하면 Dockerfile을 이용해 Spring 이미지 생성
DB_URL은 무슨 URL일까?
#DB_URL
DB_URL=jdbc:postgresql://postgres:5432/threeservings
Docker에서는
Spring Container
↓
PostgreSQL Container
처럼 컨테이너끼리 통신한다.
Docker Compose는 실행 시 자동으로 하나의 Docker Network를 생성한다. 이때 postgres는 Docker Compose의 서비스 이름이다. Docker 내부 DNS가 postgres에서 PostgreSQL Container로 연결되도록 자동으로 찾아준다.
EC2에서도 그대로 사용할 수 있을까?
처음에는 EC2에서는 구매한 도메인으로 바꿔야하는 것인가? 라는 의문이 있었지만 그렇지 않았다.
EC2에서도 Spring, PostgreSQL, Redis를 Docker Compose로 실행하면 Docker Network가 다시 생성된다.
따라서
DB_URL=jdbc:postgresql://postgres:5432/threeservings
REDIS_HOST=redis
를 그대로 사용할 수 있다.
그렇다면 언제 DB_URL이 변경될까?
AWS RDS를 사용할 경우이다.
Spring -> AWS RDS
구조가 되므로
DB_URL=jdbc:postgresql://RDS주소:5432/threeservings
로 변경된다.
Redis도 ElastiCache를 사용할 경우
REDIS_HOST=Redis Endpoint
로 변경된다.
Nginx와는 무슨 관계일까?
처음에는 대여한 도메인을 DB_URL에도 사용해야 하는 줄 알았다.
하지만 역할이 다르다.
사용자
↓
api.threeservings.shop
↓
Nginx
↓
Spring
↓
PostgreSQL
도메인은
사용자가 Spring API에 접속하기 위한 주소
이다.
반면
Spring
↓
PostgreSQL
은 서버 내부 통신이다.
따라서 DB와 Redis는 도메인을 사용하지 않는다.
'Project > 삼인분' 카테고리의 다른 글
| [Infra] 운영 서버 메모리와 Swap 필요성 (0) | 2026.07.15 |
|---|---|
| [결제 도메인] 프로젝트 피드백 및 배운 점 (0) | 2026.07.14 |
| [Infra: AWS] Docker Hub를 활용한 EC2 배포 환경 구축 (AWS EC2 + Docker + Docker Hub) (0) | 2026.07.07 |
| [Infra: Docker] Dockerfile 만들기 (0) | 2026.07.06 |
| [Infra] 인프라 아키텍처 설계하기 (0) | 2026.07.02 |
