Docker ‐ Docker에서 프로필 분리 방법 - dnwls16071/Backend_Summary GitHub Wiki
❗문제
- 최근 아래와 같은 내용을 중점적으로 공부하기 위해 프론트엔드 개발자 1명과 실시간 상품 주문 및 주문 현황 대시보드 설계 토이 프로젝트를 진행 중에 있다.
- 클라우드를 활용한 배포는 마지막에 하기로 합의를 보아 프론트엔드 분이 로컬에서 개발하기 용이한 구조롤 설계를 해야하는 상황이 발생했다.
- Docker로 스프링 애플리케이션 컨테이너 1대와 PostgreSQL 컨테이너 1대를 띄우기로 했다. 이 때, 나도 로컬 환경에서 개발을 해야했기에 매번 조정을 하기 어려워 고민을 하는 와중에 Docker Profile 개념을 찾아보게 되었다.
📚 Docker Profile
- Profiles help you adjust your Compose application for different environments or use cases by selectively activating services.
- Services can be assigned to one or more profiles; unassigned services start/stop by default, while assigned ones only start/stop when their profile is active.
- This setup means specific services, like those for debugging or development, to be included in a single compose.yml file and activated only as needed.
🫢해결
- 소프트웨어 개발에서는 다양한 환경(개발, 테스트, 운영 등)에 따라 설정값을 유연하게 변경할 필요가 있다.
- Spring은 이런 요구사항을 효과적으로 해결하기 위해 profile 기능을 제공한다.
@Profile 어노테이션도 활용이 가능하며 application-{profile}.yml와 같이 유연하게 분리를 해서 처리를 할 수 있었는데 나는 후자의 방법이 적합하다고 판단해서 후자로 처리했다. 테스트 코드 측에서는 @Profile 어노테이션을 사용했다.
services:
my-app-db:
container_name: "my-app-db"
image: postgres
ports:
- "5432:5432"
expose:
- "5432"
volumes:
- "./pgdata:/var/lib/postgresql/data"
environment:
- "POSTGRES_DB=my-app-db"
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=root"
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U postgres -d my-app-db" ]
interval: 10s
timeout: 5s
retries: 5
spring-application:
container_name: "spring-application"
build: .
ports:
- "8080:8080"
environment:
- "SPRING_DATASOURCE_URL=jdbc:postgresql://my-app-db:5432/my-app-db"
- "SPRING_PROFILES_ACTIVE=docker"
depends_on:
my-app-db:
condition: service_healthy
profiles:
- "for_front"
$ docker-compose --profile for_front up -d