Skip to content

Mybatis에서 JPA로 전환#34

Merged
sgn07124 merged 11 commits intomainfrom
refactor/migration
Oct 17, 2025
Merged

Mybatis에서 JPA로 전환#34
sgn07124 merged 11 commits intomainfrom
refactor/migration

Conversation

@sgn07124
Copy link
Owner

@sgn07124 sgn07124 commented Oct 17, 2025

User description

관련 이슈 (Related Issues)


PR Type

Enhancement, Tests


Description

  • MyBatis → JPA 리포지토리 전환 완료

  • 서비스 로직 도메인 주도 리팩터링

  • 페이징·카운트 JPA Pageable로 이관

  • 테스트 전면 수정 및 보강


Diagram Walkthrough

flowchart LR
  MyBatis["MyBatis mappers"] -- "replace" --> JPA["Spring Data JPA repositories"]
  Services["Service layer"] -- "use repos + domain logic" --> JPA
  Paging["Manual paging/count"] -- "Pageable + Page" --> JPA
  Tests["Unit tests"] -- "mock repos, adapt asserts" --> Services
Loading

File Walkthrough

Relevant files
Tests
7 files
CommentServiceImplTest.java
댓글 서비스 테스트를 JPA 리포지토리 기반으로 전환                                                       
+174/-124
SharedPostServiceImplTest.java
공유 게시글 테스트를 엔티티/리포지토리 중심으로 재작성                                                     
+193/-86
PasswordResetServiceImplTest.java
비밀번호 재설정 테스트를 도메인 로직/리포지토리로 갱신                                                     
+85/-86 
QuestionServiceImplTest.java
질문 서비스 테스트를 JPA 기반 조회로 리팩터링                                                           
+39/-39 
AnswerServiceImplTest.java
답변 서비스 테스트를 리포지토리/도메인 이벤트로 전환                                                       
+43/-27 
RecentPromptFilterServiceImplTest.java
최근 프롬프트 필터 캐시/DB 로직 테스트 교체                                                             
+49/-29 
EmailServiceImplTest.java
이메일 서비스 테스트 리포지토리 기반으로 변경                                                               
+15/-15 
Enhancement
6 files
CommentServiceImpl.java
댓글 서비스 JPA 전환 및 도메인 검증 도입                                                               
+35/-45 
SharedPostServiceImpl.java
공유 게시글 서비스 JPA·도메인 매핑 리팩터링                                                             
+82/-30 
PasswordResetServiceImpl.java
비밀번호 재설정 도메인 주도·리포지토리 전환                                                                 
+32/-60 
EmailServiceImpl.java
이메일 인증 로직을 Repository/JPA로 마이그레이션                                               
+23/-22 
AnswerServiceImpl.java
답변 저장/삭제 로직 JPA 및 도메인 메서드화                                                             
+28/-20 
QuestionServiceImpl.java
질문 생성/목록 조회를 JPA Pageable로 전환                                                       
+31/-9   
Additional files
33 files
InsightPrepApplication.java +1/-0     
PasswordVerification.java +73/-0   
PasswordMapper.java +2/-2     
AuthRepository.java +25/-0   
EmailRepository.java +29/-0   
PasswordRepository.java +14/-0   
AuthServiceImpl.java +5/-4     
Member.java +3/-0     
MemberRepository.java +7/-0     
Comment.java +4/-0     
SharedPost.java +9/-0     
CommentRepository.java +14/-0   
SharedPostRepository.java +14/-0   
QuestionResponse.java +2/-0     
Answer.java +5/-0     
Question.java +8/-2     
FeedbackEventListener.java +3/-3     
AnswerRepository.java +28/-0   
FeedbackRepository.java +12/-0   
QuestionRepository.java +13/-0   
RecentPromptFilterRepository.java +24/-0   
QuestionCleanupScheduler.java +7/-3     
FeedbackServiceImpl.java +8/-6     
RecentPromptFilterServiceImpl.java +27/-23 
CustomUserDetailsService.java +3/-3     
SecurityUtil.java +3/-3     
JpaConfig.java +9/-0     
AuthServiceImplSignUpTest.java +6/-6     
AuthServiceImplTest.java +5/-5     
FeedbackEventListenerTest.java +5/-6     
FeedbackServiceImplTest.java +11/-7   
CustomUserDetailsServiceTest.java +4/-4     
SecurityUtilTest.java +4/-4     

@sgn07124 sgn07124 self-assigned this Oct 17, 2025
@sgn07124 sgn07124 linked an issue Oct 17, 2025 that may be closed by this pull request
@github-actions
Copy link

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ Recommended focus areas for review

Package Typo

Repository 패키지 경로가 reqository로 보입니다. 실제 패키지/경로와 일치하는지 확인이 필요합니다. 오타일 경우 컴파일 실패 또는 빈 주입 문제를 야기할 수 있습니다.

import com.project.InsightPrep.domain.post.reqository.CommentRepository;
import com.project.InsightPrep.domain.post.reqository.SharedPostRepository;
Behavior Change

resolve 실패 시나리오가 기존 CONFLICT에서 ALREADY_RESOLVED로 전환된 것으로 보입니다. JPA 전환에 따른 비즈니스 규칙 변경이 의도된 것인지 확인해 주세요.

@Test
@DisplayName("resolve: markResolved() 내부 예외 발생 → IllegalStateException")
void resolve_conflict() {
    // given
    long postId = 5L;
    long loginId = 10L;

    Member owner = Member.builder()
            .id(loginId)
            .build();

    // markResolved() 안에서 IllegalStateException 터지도록 미리 RESOLVED 상태
    SharedPost post = SharedPost.builder()
            .id(postId)
            .member(owner)
            .status(PostStatus.RESOLVED)
            .build();

    given(securityUtil.getLoginMemberId()).willReturn(loginId);
    given(sharedPostRepository.findById(postId)).willReturn(Optional.of(post));

    // when & then
    assertThatThrownBy(() -> service.resolve(postId))
            .isInstanceOf(PostException.class) // 서비스가 PostException으로 래핑했는지 확인
            .hasMessageContaining(PostErrorCode.ALREADY_RESOLVED.getMessage());
}
Assertion Specificity

예외 검증에서 일부 테스트가 예외 타입만 확인하고 메시지나 에러코드까지 일관되게 검증하지 않습니다. 에러 코드 상수로 메시지를 함께 검증하면 회귀를 더 잘 잡아낼 수 있습니다.

    assertThatThrownBy(() -> service.resetPassword(token, "pw"))
            .isInstanceOf(AuthException.class);
}

@sgn07124 sgn07124 merged commit d737baf into main Oct 17, 2025
3 checks passed
@sgn07124 sgn07124 deleted the refactor/migration branch October 17, 2025 07:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

MyBatis에서 JPA로 전환

1 participant