Skip to content

refactor: Member, Auth, Image, Cleanup 기능 전반 Kotlin 마이그레이션(#128)#132

Open
chaiminwoo0223 wants to merge 1 commit intodevelopfrom
refactor/128
Open

refactor: Member, Auth, Image, Cleanup 기능 전반 Kotlin 마이그레이션(#128)#132
chaiminwoo0223 wants to merge 1 commit intodevelopfrom
refactor/128

Conversation

@chaiminwoo0223
Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 commented Feb 16, 2026

📌 작업 내용 및 특이사항

✅ 변경 범위가 커진 이유

  • 이번 PR에서는 변경된 파일 수가 기존(약 110~120개) 대비 크게 증가했습니다.
  • Member, Auth가 현재 서비스 전반에서 공통적으로 사용되는 핵심 도메인이기 때문입니다.
  • 특히, Member Query / Command Service를 참조하는 Application 계층과 테스트 코드가 다수 존재하여, 마이그레이션 과정에서 관련 파일들이 함께 변경되었습니다.
  • 언어 전환 및 구조 정리로 인한 변경이 대부분이며, 삭제보다는 추가/변경된 파일 위주로 확인해 주시면 감사하겠습니다.

✅ Java → Kotlin 마이그레이션 개요

  • Member, Auth, Image, Cleanup 전반을 Java → Kotlin으로 마이그레이션했습니다.
  • 단순 문법 변환이 아니라, Kotlin–Java 혼용 환경에서도 안정적으로 동작하도록 구조를 정리하는 데 초점을 맞췄습니다.
  • 마이그레이션 과정에서 기존 로직의 의미가 변경되지 않도록, 정적 팩토리 메서드(of, from)도메인 책임 구조(Factory, Policy, Service, Facade)를 최대한 유지했습니다.

✅ 테스트 코드 Kotlin 마이그레이션

  • Java로 작성된 Member, Auth, Image 테스트 코드를 Kotlin으로 전환했습니다.
  • 단순히 코드를 옮기는 데 그치지 않고, Kotlin의 간결한 문법을 활용해 테스트 구조를 정리하고 누락된 케이스(완료 상태 검증)를 추가했습니다.
  • Kotlin–Java 혼용 환경에서 발생할 수 있는 접근자 차이(getter 인식 문제, record → data class 전환에 따른 호출 방식 변화 등)를 테스트 단계에서 먼저 확인했습니다.
  • Member, Auth, Image 도메인 전반에 대해 단위 테스트와 통합 테스트를 Kotlin 기준으로 정비했습니다.
  • Fixture는 object 사용을 지양하고, class + DSL(withXXX) 패턴으로 통일하여 테스트 간 상태 공유 문제를 해결했습니다.
  • 마이그레이션의 기준은 컴파일 성공이 아니라 모든 테스트 통과이며, 테스트가 통과하는 상태를 확인한 후에야 마이그레이션을 완료했습니다.

@JvmStatic 적용으로 인한 Java ↔ Kotlin 정적 호출 문제 해결

  • Kotlin 마이그레이션 과정에서 Java ↔ Kotlin 간 JVM 상호운용 방식 차이로 인해 정적 메서드 호출 이슈가 발생했습니다.
  • Kotlin의 object에 정의된 메서드는 JVM 레벨에서 기본적으로 INSTANCE.create() 형태로 노출됩니다.
  • 하지만, 기존 Java 코드 및 테스트 / Fixture에서는 xxxFactory.create() 형태의 정적(static) 호출 방식을 사용하고 있었습니다.
  • 이로 인해 Kotlin object로 전환 후, 일부 코드에서 컴파일 오류가 발생했습니다.
  • 이를 해결하기 위해 @JvmStatic을 적용하여, create() 메서드가 JVM 레벨의 static 메서드로 노출되도록 변경하여 문제를 해결했습니다.
  • 본 설정은 Java–Kotlin 혼용 구간에서의 호환성을 위한 임시 조치이며, Kotlin 마이그레이션이 모두 완료되면 @JvmStatic을 제거할 예정입니다.

✅ Member 도메인 Kotlin 마이그레이션

  • MemberController Kotlin 전환
  • MemberFacade Kotlin 전환
  • MemberQueryService, MemberCommandService Kotlin 전환
  • MemberRepository, MemberJpaRepository, MemberRepositoryAdapter Kotlin 전환
  • MemberErrorCode, MemberPolicy Kotlin 전환
  • MemberFactory Kotlin 전환

✅ Auth 도메인 Kotlin 마이그레이션

  • AuthController Kotlin 전환
  • AuthFacade Kotlin 전환
  • TokenService, KakaoSignupProfileService, KakaoLoginService Kotlin 전환
  • KakaoOauthClient, KakaoOauthProvider, TokenProvider Kotlin 전환
  • KakaoSignupProfileRedisRepository, KakaoSignupProfileRedisRepositoryAdapter Kotlin 전환
  • RefreshTokenRedisRepository, RefreshTokenRedisRepositoryAdapter Kotlin 전환
  • LogoutTokenRedisRepository, LogoutTokenRedisRepositoryAdapter Kotlin 전환
  • AuthErrorCode, AuthCookieHelper Kotlin 전환

✅ Image 도메인 Kotlin 마이그레이션

  • ImageService Kotlin 전환
  • ImageCleanupBatchEvent, ImageEventPublisher, ImageEventListener Kotlin 전환
  • S3ImageStorageClient, S3ImageStorageProvider, TikaImageProbeProvider Kotlin 전환
  • S3ErrorCode, TikaErrorCode, ImageErrorCode, ImagePolicy Kotlin 전환
  • S3ExceptionTranslator Kotlin 전환
  • ImageConstants, ImageKeyFactory, ImageUrlUtil Kotlin 전환

✅ Cleanup 도메인 Kotlin 마이그레이션

  • HardDeleteExecutor, HardDeleteFacade Kotlin 전환

✅ Member DTO Kotlin 마이그레이션

  • Presentation Reqeust DTO: UpdateMemberRequest, PresignProfileImageRequest, ConfirmProfileImageRequest Kotlin 전환
  • Presentation Response DTO: LoadMemberDetailResponse, PresignProfileImageResponse Kotlin 전환
  • Application DTO: CreateMemberCommand, PresignedProfileImageInfo, MemberInfo, MemberDetail Kotlin 전환

✅ Auth DTO Kotlin 마이그레이션

  • Presentation Reqeust DTO: KakaoSignupRequest, KakaoLoginRequest, LogoutRequest Kotlin 전환
  • Presentation Response DTO: LoginResponse, ReissueTokenResponse Kotlin 전환
  • Application DTO: KakaoSignupProfile, OAuthLoginOutcome, TokenInfo Kotlin 전환
  • Infrastructure DTO: KakaoProfile, KakaoAccount, KakaoUserInfoResponse, KakaoTokenResponse Kotlin 전환

✅ Image DTO Kotlin 마이그레이션

  • Application DTO: CleanupImagesResult, PresignedImageInfo Kotlin 전환
  • Infrastructure DTO: ImageHeadInfo Kotlin 전환

✅ Test 인프라 공통 베이스 Kotlin 마이그레이션

  • BaseUnitTest 추가 (공통 단위 테스트 설정 추상화)
  • BaseIntegrationTest 추가 (통합 테스트 환경 공통 설정 추상화)

✅ build.gradle 의존성 추가

  • kotlin-reactor 의존성 추가 (Reactor ↔ Kotlin 확장 함수 지원)

🌱 관련 이슈


🔍 참고사항(선택)

  • TripReportFacade.confirmImage()@Transactional 적용
  • RedisTemplateObjectMapper 주입하여 GenericJackson2JsonRedisSerializer 역직렬화 문제 해결

📚 기타(선택)

  • java auth, image, cleanup 패키지 제거 (Kotlin 마이그레이션 완료)
  • test java member, auth, image 패키지 제거 (Kotlin 마이그레이션 완료)

@chaiminwoo0223 chaiminwoo0223 self-assigned this Feb 16, 2026
@chaiminwoo0223 chaiminwoo0223 added the 🪄refactor 기능 개선 및 리팩토링 label Feb 16, 2026
@chaiminwoo0223 chaiminwoo0223 force-pushed the refactor/128 branch 2 times, most recently from 171c1b1 to 3868ccf Compare February 16, 2026 17:19
* feat: MemberController.kt 구현
* feat: MemberFacade.kt 구현
* feat: MemberQueryService.kt, MemberCommandService.kt 구현
* feat: MemberRepository.kt, MemberJpaRepository.kt, MemberRepositoryAdapter.kt 구현
* feat: MemberErrorCode.kt, MemberPolicy.kt 구현
* feat: MemberFactory.kt 구현

* feat: AuthCookieHelper.kt 구현
* feat: AuthController.kt 구현
* feat: AuthFacade.kt 구현
* feat: TokenService.kt, KakaoSignupProfileService.kt, KakaoLoginService.kt 구현
* feat: KakaoOauthClient.kt, KakaoOauthProvider.kt, TokenProvider.kt 구현
* feat: KakaoSignupProfileRedisRepository.kt, KakaoSignupProfileRedisRepositoryAdapter.kt 구현
* feat: RefreshTokenRedisRepository.kt, RefreshTokenRedisRepositoryAdapter.kt 구현
* feat: LogoutTokenRedisRepository.kt, LogoutTokenRedisRepositoryAdapter.kt 구현
* feat: AuthErrorCode.kt 구현

* feat: ImageService.kt 구현
* feat: ImageCleanupBatchEvent.kt, ImageEventPublisher.kt, ImageEventListener.kt 구현
* feat: S3ImageStorageClient.kt, S3ImageStorageProvider.kt, TikaImageProbeProvider.kt 구현
* feat: S3ErrorCode.kt, S3ExceptionTranslator.kt 구현
* feat: TikaErrorCode.kt 구현
* feat: ImageErrorCode.kt, ImagePolicy.kt 구현
* feat: ImageConstants.kt 구현
* feat: ImageKeyFactory.kt 구현
* feat: ImageUrlUtil.kt 구현

* feat: HardDeleteExecutor.kt, HardDeleteFacade.kt 구현

* feat: UpdateMemberRequest.kt, PresignProfileImageRequest.kt, ConfirmProfileImageRequest.kt DTO 추가
* feat: LoadMemberDetailResponse.kt, PresignProfileImageResponse.kt DTO 추가
* feat: CreateMemberCommand.kt, PresignedProfileImageInfo.kt DTO 추가
* feat: MemberInfo.kt, MemberDetail.kt DTO 추가

* feat: KakaoSignupRequest.kt, KakaoLoginRequest.kt, LogoutRequest.kt DTO 추가
* feat: LoginResponse.kt, ReissueTokenResponse.kt DTO 추가
* feat: KakaoSignupProfile.kt, TokenInfo.kt, OAuthLoginOutcome.kt DTO 추가
* feat: KakaoProfile.kt, KakaoAccount.kt, KakaoUserInfoResponse.kt, KakaoTokenResponse.kt DTO 추가

* feat: PresignedImageInfo.kt, CleanupImagesResult.kt DTO 추가
* feat: ImageHeadInfo.kt DTO 추가

* refactor: TripReportFacade.confirmImage()에 @transactional 적용
* refactor: auth, image, cleanup 패키지 제거 (Kotlin 마이그레이션 완료)

* test: MemberFixture.kt, CreateMemberCommandFixture.kt, UpdateMemberRequestFixture.kt 추가
* test: PresignProfileImageRequestFixture.kt, ConfirmProfileImageRequestFixture.kt 추가
* test: MemberTestHelper.kt 추가
* test: MemberQueryServiceTest.kt, MemberCommandServiceTest.kt 단위 테스트 추가
* test: MemberControllerIntegrationTest.kt 통합 테스트 추가

* test: TokenFixture.kt, KakaoSignupRequestFixture.kt, KakaoLoginRequestFixture.kt, LogoutRequestFixture.kt 추가
* test: KakaoTokenResponseFixture.kt, KakaoUserInfoResponseFixture.kt 추가
* test: TokenTestHelper.kt, KakaoOauthTestHelper.kt, AuthCookieTestHelper.kt 추가
* test: TokenServiceTest.kt, KakaoSignupProfileServiceTest.kt, KakaoLoginServiceTest.kt 단위 테스트 추가
* test: AuthControllerIntegrationTest 통합 테스트 추가

* test: ImageTestConstants.kt, ImageHeadInfoFixture.kt 추가
* test: ImageServiceTest 단위 테스트 추가

* test: BaseUnitTest.kt, BaseIntegrationTest.kt 추가
* test: test java member, auth, image 패키지 제거 (Kotlin 마이그레이션 완료)

* chore: build.gradle에 jackson-module-kotlin 의존성 추가
* chore: build.gradle에 kotlin-reactor 의존성 추가
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🪄refactor 기능 개선 및 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🪄[REFACTOR]: Member, Auth, Image, Cleanup 기능 전반 Kotlin 마이그레이션

1 participant