# ============================================================================= # 로컬 dev 전용 오버라이드 — `docker compose` 가 docker-compose.yml 과 자동 병합한다. # 목적: app 을 "WAR 굽기" 대신 소스 bind-mount + `mvn spring-boot:run` 으로 띄워 # 코드/JSP 변경을 이미지 재빌드 없이 반영(로컬 빠른 루프). # # 배포 이미지는 이 파일과 무관(별도 경로). 배포/운영 빌드는 base 만 명시 사용: # docker compose -f docker-compose.yml up -d --build app # Dockerfile WAR 굽기 # (override 자동병합을 피하려고 `-f docker-compose.yml` 로 base 만 지정한다.) # # 반영 방법(로컬, 이미지 재빌드 0): # - JSP/정적: 저장 즉시 반영(Jasper 가 마운트된 webapp 에서 재컴파일). 재시작 불필요. # - Java 코드: `docker compose restart app` (spring-boot:run 재기동 ~1~2s) # 또는 `docker compose exec app mvn -o -P dev -DskipTests compile` 후 restart. # 전제: 호스트 ~/.m2 에 의존성이 캐시돼 있어야 offline(-o) 으로 뜬다(기존 빌드 이력으로 충족). # # 참고: devtools 자동재시작은 도입하지 않음 — 컨테이너 spring-boot:run 에는 소스 자동 # 재컴파일러가 없어(IDE 부재) 이득이 미미하고, SNAPSHOT devtools 의 offline 해소가 # 불안정해 restart/exec-compile 루프가 더 견고하다. # ============================================================================= services: app: image: maven:3.9-eclipse-temurin-21 # base 의 build(Dockerfile WAR 굽기)를 로컬에선 사용하지 않는다. build: !reset null working_dir: /build # offline: 프록시 CA 우회 + 재현성. 새 의존성 추가 시에만 일시적으로 -o 제거 후 1회 온라인. command: ["mvn", "-o", "-P", "dev", "-DskipTests", "spring-boot:run"] volumes: - .:/build # 소스 bind-mount (코드/JSP 즉시 공유) - ${HOME}/.m2:/root/.m2 # 호스트 의존성 캐시 재사용(offline 가능)