CustomOidcUserService 구현

2025. 9. 9. 01:35·Spring

클라이언트로 부터 받은 code를 바탕으로 유저 정보를 가져왔다. 이후 유저 정보를 멤버 엔티티로 전환하기 위해 CustomOidcUserService를 구현했다.

OidcUserService를 상속받는 것과 위임받는 것에는 무슨 차이가 있을까..

방법1) 상속 방식 extends OidcUserService

public class CustomOidcUserService extends OidcUserService {
    @Override
    public OidcUser loadUser(OidcUserRequest request) {
        OidcUser user = super.loadUser(request);
        // 사용자 커스터마이징
        return user;
    }
}

방법2) 위임 방식

implements OAuth2UserService<OidcUserRequest, OidcUser> + delegate

public class CustomOidcUserService implements OAuth2UserService<OidcUserRequest, OidcUser> {
    private final OidcUserService delegate = new OidcUserService();

    @Override
    public OidcUser loadUser(OidcUserRequest request) {
        OidcUser user = delegate.loadUser(request);
        // 사용자 커스터마이징
        return user;
    }
}

위임방식을 사용하는 경우 더 유연하게 테스트 코드를 조작할 수 있다.

아래와 같이 진짜 구글 API 호출 없이도 delegate.loadUser() 부분을 mocking할 수 있다.

상속받은 경우 super.loadUser(request) 코드로 인해 단위테스트가 어렵다.

@Test
void 사용자정보를_정상적으로_가져온다() {
    // 1. delegate를 mocking
    OidcUserService mockDelegate = mock(OidcUserService.class);
    OidcUser mockUser = mock(OidcUser.class);

    when(mockDelegate.loadUser(any())).thenReturn(mockUser);

    // 2. 내가 테스트할 대상에 mock 주입
    CustomOidcUserService service = new CustomOidcUserService(mockDelegate);

    // 3. 테스트 실행
    OidcUser result = service.loadUser(mock(OidcUserRequest.class));

    // 4. 검증
    assertEquals(mockUser, result);
}

'Spring' 카테고리의 다른 글

프레임워크를 사용하는 이유  (0) 2023.10.06
@Transactional의 작동 방식과 롤백되지 않는 문제(Checked Exception)  (0) 2023.08.31
Spring Data JPA Projections  (0) 2023.04.24
'Spring' 카테고리의 다른 글
  • 프레임워크를 사용하는 이유
  • @Transactional의 작동 방식과 롤백되지 않는 문제(Checked Exception)
  • Spring Data JPA Projections
연잔
연잔
  • 연잔
    Bit by Bit
    연잔
  • 전체
    오늘
    어제
    • 분류 전체보기
      • TIL
      • 생각정리
      • JAVA
      • Spring
      • Database
      • 운영체제
      • 네트워크
      • WEB
      • Docker
      • Jenkins
      • DevOps
      • git
      • Etc
        • Error
      • html, css
      • 프로젝트
        • MoaaMoaa
        • TEDbear
        • ChePo
      • Book
        • 클린 코드
        • 클린아키텍처
        • 데이터 중심 애플리케이션 설계
        • IT 엔지니어를 위한 네트워크 입문
        • 주니어가 반드시 알아야할 실무지식
      • SSAFYcial
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Algolithm
    인터넷
    HTML
    HTTP
    SSAFY
    algorithm
    싸피
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
연잔
CustomOidcUserService 구현
상단으로

티스토리툴바