docs(i18n): 코드 기반 공급자 순서 설정과 검증을 기록한다

This commit is contained in:
2026-11-09 18:24:24 +09:00
parent 9136b0e3bb
commit 6093b37747
4 changed files with 229 additions and 20 deletions
@@ -3,7 +3,7 @@
| 항목 | 내용 |
|---|---|
| 작성일 | 2026-11-09 |
| 상태 | 구현·기능 범위 검증·독립 리뷰 완료 |
| 상태 | Phase 1·2 구현 및 기능 범위 검증·독립 리뷰 완료 |
| 승인 범위 | 감지·번역 별도 인터페이스, 공통 공급자 선택·실패 전환, 기능별 순서 설정 |
| 계획 | [plan-task.md](plan-task.md) |
@@ -35,6 +35,8 @@
| LP-008 | 빈/중복/알 수 없는 공급자 순서 설정은 초기화 단계에서 명확히 거부한다. 새 구현체 추가 시 기존 선택 코드나 공급자 enum 수정이 필요 없다. |
| LP-009 | 기존 파파고 캐시·번역 데이터 및 분할 번역 동작과 감지 캐시 동시성 승자 반환을 보존한다. |
| LP-010 | 추가 방법과 기능별 순서 설정 예시, 실제 AWS 미구현 상태를 문서화한다. |
| LP-011 | 공급자 순서는 `LanguageProviderOrder`의 독립 `val List<String>` 두 개로 지정한다. 기본은 각각 `listOf("papago")`이다. |
| LP-012 | 우선순위 환경변수·YAML·문자열 파싱을 제거한다. 기존 우선순위 property/env 값이 있어도 production 순서를 바꾸지 않는다. 인증정보 환경변수는 유지한다. |
## 보안·오류 처리
@@ -58,6 +60,8 @@ LSP 도구가 제공되지 않으면 Kotlin 컴파일과 ktlint로 보완하고
## 확정 구현 계약
아래는 Phase 1 구현 계약이며, 순서 설정 방식은 하단의 Phase 2 정정 계약이 우선한다. 기존 실행 기록은 보존한다.
- 기존 `TranslationProvider`와 raw `TranslateResult`는 유지한다.
- `LanguageDetectionProvider`: `providerName: String`, `detect(query: String): String?`.
- `DetectedLanguage`: `detectedLanguage: String`, `providerName: String`.
@@ -79,3 +83,16 @@ LSP 도구가 제공되지 않으면 Kotlin 컴파일과 ktlint로 보완하고
- 공통 `TranslationLanguages`로 서비스 언어 정책만 옮긴다. Papago 분할은 Papago adapter에 유지한다.
- 현재 entity에는 공급자별 cache key가 있으므로 DDL 변경 없이 실제 공급자를 기록한다.
캐시 두 개가 있으면 설정상 앞선 결과를 선택하며 특정 job의 공급자를 영구 고정하는 새 모델은 만들지 않는다.
## Phase 2 결정 정정 — 2026-11-09
사용자는 YAML·환경변수 대신 코드의 상수 목록으로 감지·번역 순서를 지정하도록 승인했다.
- 유일한 production 순서 편집 지점은 `i18n/translation/LanguageProviderOrder.kt`의
`detectionOrder = listOf("papago")`, `translationOrder = listOf("papago")`이다. Kotlin 목록은 `const val`이 아닌 `val`이다.
- 목록의 왼쪽부터 사용한다. 감지·번역은 각각 수정할 수 있으며 변경 후 빌드·배포한다.
- 기존 `LanguageProviderProperties`는 typed-list 생성자와 명시적 Spring 기본 생성자로 코드 목록을 읽는다.
선택 코드·호출자의 이름 변경을 확산시키지 않는다. 문자열 생성자·`@Value`·split/trim은 제거한다.
- 테스트는 전역 목록을 바꾸지 않고 테스트 전용 bean에 typed list를 주입하여 독립 순서와 invalid order를 검증한다.
- 과거 우선순위 environment/property override는 무시한다. 다른 환경변수나 Spring 설정 체계는 변경하지 않는다.
- 실패 전환·공급자 검증·캐시·DB·인증·AWS 미구현 정책은 Phase 1을 그대로 유지한다.