libs/feature/auth: 공통 인증 서비스와 CQRS 핸들러가 이미 존재하므로, AuthProviderRegistry 등 핵심 컴포넌트를 여기로 정리한다.
libs/shared/contracts-auth: DTO, 이벤트 payload, 공급자 계약 정의를 유지하고 Kakao 전용 계약이 필요하면 동일한 패턴으로 확장한다.
(libs/feature/auth-wir는 레거시 시스템과의 임시 통합을 위해 유지되는 코드이므로 이번 구조 재편 범위에서 제외한다.)
신규 라이브러리 생성(필요 시)
공통 인증 인프라: nx g @nx/nest:lib --name=core-auth --directory=libs/core/auth --importPath=@core/auth --tags=scope:core,domain:auth
TimeMachine 어댑터, Crypto/Hash 유틸, 외부 API 클라이언트 초기화를 이곳으로 이동한다.
KR 전용 공급자: nx g @nx/nest:lib --name=feature-auth-kr --directory=libs/feature/auth-kr --importPath=@feature/auth-kr --tags=scope:feature,domain:auth,region:kr
Kakao OAuth 흐름, API 어댑터, 예외 클래스를 포함한다.
EU 공급자 리팩터링(선택): nx g @nx/nest:lib --name=feature-auth-eu --directory=libs/feature/auth-eu --importPath=@feature/auth-eu --tags=scope:feature,domain:auth,region:eu
기존 DE 구현을 분리할 때 사용한다. 현재 구조가 유지 가능하면 기존 feature-auth 내에서 provider를 모듈화한다.
HTTP 어댑터/유틸(선택)
추가 인프라가 필요하면 nx g @nx/js:lib --name=core-http-kakao --directory=libs/core/http-kakao --importPath=@core/http-kakao --tags=scope:core,type:http 로 생성해 Kakao 전용 REST 클라이언트를 캡슐화한다.
libs/core/auth는 AuthProviderRegistry와 AuthProvider 인터페이스를 제공해 지역별 공급자를 동적으로 등록한다. 공통 도메인 모듈(FeatureAuthModule)은 region:common 태그를 사용해 어느 지역에서도 의존할 수 있도록 했다.
libs/feature/auth는 공급자-불문 공통 로직과 ExternalAuthService를 제공해 인가 URL 생성 및 코드 교환을 애플리케이션 계층에 노출한다.
libs/feature/auth-kr은 KakaoAuthProvider를 제공하며, core-http-kakao의 KakaoOAuthHttpClient를 통해 Kakao API 연동과 idempotency 검증을 담당한다.
libs/feature/auth-eu는 비밀번호 기반 인증을 담당하는 PasswordAuthProvider와 de/EU 전용 정책을 나타내는 EuAuthProvider를 등록해 기존 EU 흐름을 모듈 단위로 구성한다.
신규 공급자 모듈은 OnModuleInit에서 AuthProviderRegistry에 자신을 등록해 애플리케이션 초기화 시 자동으로 탐색된다.