# =============================================================================
# 로컬 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 가능)
