Fix/qa - #107
Fix/qa#107choi-jin-wook wants to merge 2 commits into
Conversation
- Base64 인코딩된 FCM 서비스 계정 키를 환경변수로 주입
- 로컬 환경에서는 기존 classpath 자격 증명을 폴백으로 사용
- 운영 환경에서 키 누락 시 애플리케이션 기동 실패 처리
| # FCM 서비스 계정 키. 이미지에 굽지 않고 .env.prod 의 env 로 주입받는다. | ||
| # required: 키가 없으면 기동을 깨서 배포 시점에 드러낸다(kafka.admin.fail-fast 와 같은 철학). | ||
| fcm: | ||
| service-account-b64: ${FCM_SERVICE_ACCOUNT_B64:} | ||
| required: true No newline at end of file |
There was a problem hiding this comment.
fcm.required: true가 application-aws.yml뿐 아니라 이 base application.yml에도 그대로 들어가 있습니다. application.yml은 프로파일과 무관하게 항상 로드되는 base 설정이므로, FCMConfig.java의 주석("운영(aws 프로파일)에서만 true. 키가 없으면 기동을 깨서 배포 시점에 드러낸다")과 기본값(@Value("${fcm.required:false}"))의 의도와 달리 로컬 개발/CI 환경에서도 fail-fast가 적용됩니다.
이 저장소에는 serviceAccountKey.json 파일이 존재하지 않고(.gitignore에 등록됨), FCM_SERVICE_ACCOUNT_B64 환경변수도 로컬에는 보통 없으므로, openCredentials()가 null을 반환 → required == true → IllegalStateException으로 @PostConstruct가 실패해 애플리케이션 컨텍스트 로딩 자체가 깨집니다. 이 PR이 새로 추가한 "키 없으면 경고 로그만 남기고 계속 부팅" 폴백 경로(log.warn("FCM 키 없음 - 푸시 비활성화 상태로 기동"))가 모든 프로파일에서 도달 불가능한 죽은 코드가 되는 셈입니다.
이 저장소는 fail-fast류 설정(예: spring.kafka.admin.fail-fast: true)을 prod(application-aws.yml) 전용으로만 두는 관례가 이미 있는데, 이번 변경은 그 관례와도 어긋납니다. application.yml(base)의 required는 false로 두고, true는 application-aws.yml 쪽에만 남겨야 합니다.
| # FCM 서비스 계정 키. 이미지에 굽지 않고 .env.prod 의 env 로 주입받는다. | |
| # required: 키가 없으면 기동을 깨서 배포 시점에 드러낸다(kafka.admin.fail-fast 와 같은 철학). | |
| fcm: | |
| service-account-b64: ${FCM_SERVICE_ACCOUNT_B64:} | |
| required: true | |
| fcm: | |
| service-account-b64: ${FCM_SERVICE_ACCOUNT_B64:} | |
| required: false |
No description provided.