본문 바로가기
BackEnd/Project

[Loan] Ch02. 대출 상담 조회 기능 구현

by 개발 Blog 2024. 9. 11.

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

이번 시간에는 지난 시간에 등록된 대출 상담 정보를 조회할 수 있는 기능을 구현한다. 이를 통해 클라이언트가 특정 상담 ID를 요청하면 해당 상담 정보를 조회할 수 있게 된다.

 

1. CounselController API 추가

클라이언트로부터 특정 상담 ID를 받아서 그 정보를 반환하는 GET API를 추가한다.

@GetMapping("/{counselId}")
public ResponseDTO<Response> get(@PathVariable Long counselId) {
    return ok(counselService.get(counselId));
}
  • 클라이언트가 /counsels/{counselId} 경로로 GET 요청을 보내면 이 메서드가 호출된다.
  • @PathVariable을 통해 경로에 포함된 counselId 값을 추출하고, 이를 서비스 계층으로 전달하여 데이터를 조회한다.
  • 조회된 데이터는 ResponseDTO 형태로 감싸서 클라이언트에 응답한다.

2. Service 메서드 추가

서비스 계층에서 상담 ID에 해당하는 데이터를 조회하기 위한 메서드를 정의한다.

Response get(Long counselId);
  • counselId를 받아 해당 상담 데이터를 Response 형태로 반환하는 메서드를 선언한다.

3. ServiceImpl 메서드 추가

실제 상담 정보를 조회하고, 이를 응답 데이터로 변환하는 비즈니스 로직을 구현한다.

@Override
public Response get(Long counselId) {
    Counsel counsel = counselRepository.findById(counselId).orElseThrow(() -> {
        throw new BaseException(ResultType.SYSTEM_ERROR);
    });

    return modelMapper.map(counsel, Response.class);
}
  • counselRepository.findById(counselId)를 통해 해당 ID에 맞는 상담 데이터를 조회한다.
  • 만약 해당 ID의 상담 정보가 존재하지 않으면 BaseException을 발생시킨다.
  • 조회된 Counsel 엔티티를 modelMapper를 사용해 Response 객체로 변환하여 반환한다.

4. 테스트 코드

두 가지 주요 테스트 케이스를 추가하여 상담 조회 기능을 검증한다.

 

(1) 등록된 상담 조회 테스트

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

    Counsel entity = Counsel.builder()
            .counselId(1L)
            .build();
    when(counselRepository.findById(findId)).thenReturn(Optional.ofNullable(entity));

    Response actual = counselService.get(findId);

    assertThat(actual.getCounselId()).isSameAs(findId);
}
  • 등록된 상담 ID(1L)에 대한 데이터를 조회하고, 해당 상담 정보가 정상적으로 반환되는지 검증한다.
  • counselRepository.findById(findId)가 해당 데이터를 반환하도록 모킹 하고, 조회 결과가 기대한 값과 일치하는지 확인한다.

(2) 존재하지 않는 상담 조회 시 예외 처리 테스트

@Test
void Should_ThrowException_When_RequestNotExistCounselId() {
    Long findId = 2L;

    when(counselRepository.findById(findId)).thenThrow(new BaseException(ResultType.SYSTEM_ERROR));

    Assertions.assertThrows(BaseException.class, () -> counselService.get(findId));
}
  • 존재하지 않는 상담 ID(2L)로 조회 요청을 할 때, 리포지토리에서 빈 값(Optional.empty())을 반환하도록 설정한다.
  • 해당 ID가 존재하지 않으면 서비스 로직에서 BaseException이 발생해야 하므로, 이를 assertThrows()로 확인한다.
  • 테스트는 예상된 예외(BaseException)가 발생하는지 검증하여 예외 처리가 제대로 작동하는지 확인한다.

 

5. API 호출 테스트 

마지막으로, 포스트맨을 이용해 API 호출 테스트를 진행한다.

(1) 정상적인 상담 조회

  • GET /counsels/1로 정상적인 상담 조회 요청을 보냈을 때, 상담 ID 1에 해당하는 상담 정보가 정상적으로 반환된다.
  • 응답 결과에는 상담자의 이름, 전화번호, 이메일, 메모, 주소 등의 정보가 포함되며, 응답 코드는 0000으로 성공을 의미한다.

(2) 존재하지 않는 상담 조회

  • GET /counsels/2로 존재하지 않는 상담 ID를 요청할 경우, 시스템 에러로 처리되어 에러 코드 9000과 함께 "system error" 메시지가 반환된다.
  • 이때 data 필드는 null로 응답된다. 이는 요청한 상담 ID에 해당하는 데이터가 없다는 것을 의미한다.

이로써 상담 조회 기능이 정상적으로 작동함을 확인할 수 있다. 다음 단계에서는 상담 정보 수정 기능을 추가하여 상담 관리 기능을 더 발전시킬 예정이다.