Skip to content

refactor: TripReportStudyLog, TripReport, Dummy 기능 전반 Kotlin 마이그레이션(#129)#130

Merged
chaiminwoo0223 merged 1 commit intodevelopfrom
refactor/129
Feb 13, 2026
Merged

refactor: TripReportStudyLog, TripReport, Dummy 기능 전반 Kotlin 마이그레이션(#129)#130
chaiminwoo0223 merged 1 commit intodevelopfrom
refactor/129

Conversation

@chaiminwoo0223
Copy link
Contributor

@chaiminwoo0223 chaiminwoo0223 commented Feb 9, 2026

📌 작업 내용 및 특이사항

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

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

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

  • Java로 작성된 TripReportStudyLog, TripReport, Dummy 테스트 코드를 Kotlin으로 전환했습니다.
  • 단순히 코드를 옮기는 데 그치지 않고, Kotlin의 간결한 문법을 활용해 테스트 구조를 정리하고 누락된 케이스(완료 상태 검증)를 추가했습니다.
  • Kotlin–Java 혼용 환경에서 발생할 수 있는 접근자 차이(getter 인식 문제, record → data class 전환에 따른 호출 방식 변화 등)를 테스트 단계에서 먼저 확인했습니다.
  • TripReportStudyLog, TripReport, Dummy 도메인 전반에 대해 단위 테스트와 통합 테스트를 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을 제거할 예정입니다.

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

  • TripReportStudyLogCommandService Kotlin 전환
  • TripReportStudyLogRepository, TripReportStudyLogJpaRepository, TripReportStudyLogRepositoryAdapter Kotlin 전환
  • TripReportStudyLogFactory Kotlin 전환

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

  • TripReportController Kotlin 전환
  • TripReportFacade Kotlin 전환
  • TripReportQueryService, TripReportCommandService Kotlin 전환
  • TripReportRepository, TripReportJpaRepository, TripReportRepositoryAdapter Kotlin 전환
  • TripReportErrorCode, TripReportPolicy Kotlin 전환
  • TripReportFactory Kotlin 전환

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

  • DummyStampController, DummyMissionController Kotlin 전환
  • DummyStampFacade, DummyMissionFacade Kotlin 전환
  • DummyTripCommandService, DummyStampCommandService, DummyMissionCommandService Kotlin 전환

✅ TripReport DTO Kotlin 마이그레이션

  • Presentation Request DTO: CreateTripReportRequest, ConfirmTripReportImageRequest, PresignTripReportImageRequest Kotlin 전환
  • Presentation Response DTO: CreateTripReportResponse, LoadTripReportsResponse, LoadTripReportDetailResponse, LoadTripRetrospectDetailResponse, PresignedTripReportImageResponse Kotlin 전환
  • Application DTO: TripReportInfo, TripReportsInfo, TripReportDetail, PresignedTripReportImageInfo, TripRetrospectSummary, TripRetrospectDetail Kotlin 전환

✅ Dummy DTO Kotlin 마이그레이션

  • Presentation Response DTO: LoadDummyStampInfoResponse, LoadDummyMissionInfoResponseKotlin 전환
  • Application Command DTO: CreateDummyTripCommand, CreateDummyStampCommand, CreateDummyMissionCommand Kotlin 전환
  • Application DTO: DummyStampInfo, DummyStampsInfo, DummyMissionInfo, DummyMissionsInfo Kotlin 전환

🌱 관련 이슈


🔍 참고사항(선택)

  • TripReportQueryRepository.java에 findAllActiveByMemberId 메서드 추가 -> Kotlin 스타일 규칙상 함수명에 _(언더스코어) 금지

📚 기타(선택)

  • StudyLogTestHelper.kt에 saveDeletedStudyLog 메서드 추가
  • test java trip, dummy 패키지 제거 (Kotlin 마이그레이션 완료)

@chaiminwoo0223 chaiminwoo0223 self-assigned this Feb 9, 2026
@chaiminwoo0223 chaiminwoo0223 added the 🪄refactor 기능 개선 및 리팩토링 label Feb 9, 2026
)

* feat: TripReportStudyLogCommandService.kt 구현
* feat: TripReportStudyLogRepository.kt, TripReportStudyLogJpaRepository.kt, TripReportStudyLogRepositoryAdapter.kt 구현
* feat: TripReportStudyLogFactory.kt 구현

* feat: TripReportController.kt 구현
* feat: TripReportFacade.kt 구현
* feat: TripReportQueryService.kt, TripReportCommandService.kt 구현
* feat: TripReportRepository.kt, TripReportJpaRepository.kt, TripReportRepositoryAdapter.kt 구현
* feat: TripReportErrorCode.kt, TripReportPolicy.kt 구현
* feat: TripReportFactory.kt 구현

* feat: DummyStampController.kt, DummyMissionController.kt 구현
* feat: DummyStampFacade.kt, DummyMissionFacade.kt 구현
* feat: DummyTripCommandService.kt, DummyStampCommandService.kt, DummyMissionCommandService.kt 구현

* feat: CreateTripReportRequest.kt, ConfirmTripReportImageRequest.kt, PresignTripReportImageRequest.kt 추가
* feat: CreateTripReportResponse.kt, LoadTripReportsResponse.kt, LoadTripReportDetailResponse.kt 추가
* feat: LoadTripRetrospectDetailResponse.kt, PresignedTripReportImageResponse.kt 추가
* feat: TripReportInfo.kt, TripReportsInfo.kt, TripReportDetail.kt, PresignedTripReportImageInfo.kt 추가
* feat: TripRetrospectSummary.kt, TripRetrospectDetail.kt 추가

* feat: LoadDummyStampInfoResponse.kt, LoadDummyMissionInfoResponse.kt 추가
* feat: CreateDummyTripCommand.kt, CreateDummyStampCommand.kt, CreateDummyMissionCommand.kt 추가
* feat: DummyStampInfo.kt, DummyStampsInfo.kt, DummyMissionInfo.kt, DummyMissionsInfo.kt 추가

* refactor: TripReportQueryRepository.java에 findAllActiveByMemberId 메서드 추가

* test: TripReportStudyLogCommandServiceTest.kt 단위 테스트 추가

* test: TripReportFixture.kt, CreateTripReportRequestFixture.kt 추가
* test: ConfirmTripReportImageRequestFixture.kt, PresignTripReportImageRequestFixture.kt 추가
* test: TripReportTestHelper.kt 추가
* test: TripReportQueryServiceTest.kt, TripReportCommandServiceTest.kt 단위 테스트 추가
* test: TripReportControllerIntegrationTest.kt 통합 테스트 추가

* test: DummyTripCommandServiceTest.kt, DummyStampCommandServiceTest.kt, DummyMissionCommandServiceTest.kt 단위 테스트 추가
* test: DummyStampControllerIntegrationTest.kt, DummyMissionControllerIntegrationTest.kt 통합 테스트 추가

* test: StudyLogTestHelper.kt에 saveDeletedStudyLog 메서드 추가
* test: test java trip, dummy 패키지 제거 (Kotlin 마이그레이션 완료)
Copy link
Contributor

@hisonghy hisonghy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인이 늦었습니다 👀
머지부탁드려요!

@chaiminwoo0223 chaiminwoo0223 merged commit 30a646c into develop Feb 13, 2026
2 checks passed
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]: TripReportStudyLog, TripReport, Dummy 기능 전반 Kotlin 마이그레이션

2 participants