본문 바로가기
BackEnd/Project

[Loan] Ch03. 대출 신청 조회 기능 구현

by 개발 Blog 2024. 9. 11.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

이번 장에서는 대출 신청 정보를 조회하는 기능을 구현한다. 사용자가 특정 applicationId를 통해 대출 신청 정보를 조회할 수 있도록 하며,

해당 요청을 처리하는 로직을 단계별로 설명한다.

 

1. ApplicationController 메서드 추가

ApplicationController에 대출 신청 조회 요청을 처리하는 GET 메서드를 추가한다. 클라이언트에서 요청한 applicationId에 해당하는 대출 신청 정보를 반환한다.

@GetMapping("/{applicationId}")
public ResponseDTO<Response> get(@PathVariable Long applicationId) {
    return ok(applicationService.get(applicationId));
}
  • get 메서드
    이 메서드는 @GetMapping("/{applicationId}")을 통해 특정 대출 신청 정보를 조회한다. applicationService.get()을 호출하여 대출 신청 정보를 가져온 후, 성공적으로 조회되면 ResponseDTO로 응답한다.

2. ApplicationService 메서드 추가

ApplicationService 인터페이스에 대출 신청 정보를 조회하는 메서드를 추가한다.

Response get(Long applicationId);
  • get 메서드
    이 메서드는 applicationId를 받아 해당 신청 정보를 조회하고, 이를 반환하는 역할을 한다.

3. ApplicationServiceImpl 구현체 추가

ApplicationServiceImpl 클래스에서 ApplicationService 인터페이스를 구현하여 대출 신청 정보를 실제로 조회하는 로직을 작성한다.

@Override
public Response get(Long applicationId) {
    Application application = applicationRepository.findById(applicationId).orElseThrow(() ->{
        throw new BaseException(ResultType.SYSTEM_ERROR);
    });

    return modelMapper.map(application, Response.class);
}
  • get 메서드 구현
    • 데이터 조회: applicationRepository.findById(applicationId)를 통해 데이터베이스에서 대출 신청 정보를 조회한다.
    • 예외 처리: 만약 해당 applicationId에 대한 신청 정보가 없을 경우 BaseException을 발생시켜 시스템 오류로 처리한다.
    • DTO 변환: 조회된 Application 엔티티를 Response DTO로 변환하여 반환한다. ModelMapper를 사용해 엔티티를 DTO로 쉽게 변환할 수 있다.

4. 테스트 코드 추가

대출 신청 조회 기능이 정상적으로 동작하는지 검증하기 위해 테스트 코드를 작성한다.

@Test
void Should_ReturnResponseOfExistingApplicationEntity_when_RequestExistApplicationId() {
    Long findId = 1L;

    Application entity = Application.builder()
            .applicationId(1L)
            .build();
    when(applicationRepository.findById(findId)).thenReturn(Optional.ofNullable(entity));

    Response actual = applicationService.get(findId);

    assertThat(actual.getApplicationId()).isSameAs(findId);
}
  • 테스트 시나리오 : 특정 applicationId를 조회했을 때, 해당 ID에 맞는 대출 신청 정보가 반환되는지 확인한다. Mockito를 사용하여 applicationRepository의 동작을 모의하고, 반환된 값이 요청한 ID와 일치하는지 assertThat을 통해 검증한다.

5. 실행 테스트 

대출 신청 조회 기능을 테스트해 본 결과, API 호출을 통해 특정 applicationId로 대출 신청 정보를 정상적으로 조회할 수 있었다. 요청된 대출 신청 정보는 JSON 형식으로 반환되었으며, 응답 코드 0000과 함께 성공적인 결과를 확인할 수 있었다.

  • 신청 정보 조회
    사용자가 입력한 이름, 전화번호, 이메일, 희망 대출 금액 등 기본 정보와 함께 신청일자와 생성일자, 수정일자도 정상적으로 조회되었다. 약정일자는 아직 설정되지 않아 null로 반환되었다.
  • SQL 로그 확인
    데이터베이스 조회 시 실제 실행된 SQL 쿼리도 확인했다. application_id와 is_deleted=false 조건을 사용하여 논리적으로 삭제되지 않은 데이터를 정확하게 조회하는 쿼리가 실행되었음을 알 수 있다.