[BE-21] dev/prod compose 기동 검증 · 초기 4사 등록 절차
작업 내용 (설계 의도)
근거 TDD: 20260722-타깃-공고-알림-및-지원-히스토리-tdd.md — “Release Scenario”
변경 사항
TDD의 Release Scenario 6단계를 실제로 수행 가능한 상태로 만들고 검증합니다. 코드 산출물보다 검증 아티팩트와 절차 문서가 주된 결과물입니다.
수행 범위:
- dev/prod compose 기동 검증 —
docker-compose.yml(dev)과docker-compose.prod.yml(prod) 양쪽으로 기동해 헬스체크 200, Flyway V1 적용 성공, 스케줄러 등록을 확인합니다. prod 이미지 태그는 릴리즈 태그({YYYYMMDD}-{NN})로 고정하며latest를 쓰지 않습니다. - 단계적 활성화 절차 검증 — 피처 플래그 4종이 초기값
false로 시드되어 있고, DB UPDATE만으로 재기동 없이 동작이 바뀌는지 확인합니다. 이것이 무중단 롤백의 근거입니다. 활성화 순서는 discord-dispatch → auto-close → aggregator.collection → cross-source-dedup입니다(Release Scenario). - 초기 4사 + 애그리게이터 6소스 등록 절차 — 당근(Greenhouse
daangn) / 배민(내부 API) / 우리은행(인크루트wooribank) / 수협은행(인크루트suhyup-bank) 회사 종속형 4사 + 애그리게이터 6종(사람인·점핏·원티드·리멤버·잡코리아·서핏) 소스(직무 카테고리 코드 지정)의 등록 요청 예시와 확인 지점을 절차 문서로 남깁니다(FR-7·60). 규약 청정 2종(6a) → 회색지대 4종(6b) 순으로 단계 활성화(Release Scenario). - 시딩 동작 확인 — 첫 수집 후 공고가
notification_eligible=0으로 적재되고 발송이 0건인지 확인합니다. - 롤백 리허설 — 플래그 OFF 시 마감 판정·발송이 즉시 멈추는지, prod 이미지 태그를 직전 값으로 되돌려 재기동되는지 확인합니다.
이 티켓은 BE-01이 만든 compose·Dockerfile을 수정하지 않습니다. 기동 검증 중 설정 결함이 발견되면 수정 범위를 이 티켓에서 처리하되, 변경 파일이 BE-01 소유와 겹치므로 마지막 wave 단독 배치로 두어 충돌을 원천 차단합니다.
롤백: 각 단계가 독립적이며, 실패 시 컨테이너 중지 + 스키마 드롭(데이터 0건)으로 처음부터 재수행 가능합니다.
의존
- BE-19, BE-20 (전 기능 완성 후 수행)
다이어그램
처리 흐름
sequenceDiagram participant O as 운영자 participant D as docker compose participant A as 애플리케이션 participant F as feature_flags participant S as 채용 소스 O->>D: up -d (dev) D->>A: 기동 + Flyway V1 A-->>O: health 200 O->>A: 회사 4곳 등록 O->>A: 1회차 수집 (시딩) A->>S: 목록 조회 A-->>O: 공고 적재 · 알림 0건 O->>F: notification.discord-dispatch = true A-->>O: 재기동 없이 발송 활성화 O->>F: posting.auto-close = true (마지막) A-->>O: 마감 판정 활성화
클래스 의존
flowchart LR subgraph Compose["컨테이너 구성"] Dev[docker-compose.yml] Prod[docker-compose.prod.yml] App[app 서비스] DB[mysql 8.0] end subgraph Runtime["런타임 확인 대상"] Flag[feature_flags] Flyway[flyway_schema_history] Sched[Scheduler 4종] end Dev --> App Prod --> App App --> DB App --> Flag App --> Flyway App --> Sched
테스트 케이스
- dev compose로 기동 시 헬스체크가 200을 반환하고 Flyway V1이 SUCCESS로 기록된다
- prod compose로 기동 시 이미지 태그가 릴리즈 태그로 고정되어 있고
latest가 사용되지 않는다 - 초기 기동 시 피처 플래그 4종이 모두
false로 시드되어 있다 - 플래그를 DB에서
true로 UPDATE하면 재기동 없이 다음 배치 실행부터 동작이 바뀐다 - 6개 스케줄러(00:00 수집 / 00:10 애그리게이터 / 00:30 마감 / 08:30 dedup / 08:50 평가 / 09:00 발송)가 각각 등록되고 지정된 cron·타임존(Asia/Seoul)으로 설정된다
- 초기 4사 등록 절차대로 실행하면 회사 종속형 소스가 5건(우리은행 2건 포함) 등록된다
- 애그리게이터 6종 소스가
companyId=null로 등록되고 다음 수집(00:10) 대상에 포함된다 - 잡코리아 어댑터가 키워드 검색 경로를 호출하려 하면 규약 정책이 차단한다(회색지대 규약 준수 확인)
- 애그리게이터 첫 수집 후 발견 회사가
DISCOVERED로 자동 등록되고 공고가notification_eligible=0으로 적재된다 - 피처 플래그 4종(
posting.auto-close·notification.discord-dispatch·posting.cross-source-dedup·aggregator.collection)이 모두false로 시드되어 있다 - 첫 수집 후 공고가
notification_eligible=0으로 적재되고 발송이 0건이다 posting.auto-close=false상태에서 마감 판정이 0건으로 동작한다- prod 이미지 태그를 직전 값으로 되돌려 재기동하면 정상 동작한다
- 컨테이너 재기동 후에도 수집 이력과 공고 데이터가 보존된다