Latte 개발일지 : 8. 중간 점검

이동건·2021년 11월 12일
1

Latte

목록 보기
8/9
post-thumbnail

팀원들과 중간점검을 실시했고, 백엔드 팀원과의 피드백을 통해 다음의 사항들을 수정하기로 하였다.
팀원이 맡은 로그인 및 인증 부분이 완료되어 userId를 받는 형식에서 토큰을 사용해 유저를 파악하는 것으로 변경하였다.

다음은 수정 사항들이다.

  • 컨트롤러에서 Request Response를 DTO로 분리
  • 컨트롤러에 있는 findby부분 다 service로 빼기
  • 어노테이션 사용해서 토큰으로부터 값 받아 유저 id 넣기
  • Exception 폴더 분리하기

위의 사항을 하나씩 처리한다.

  • 컨트롤러에서 Request Response를 DTO로 분리


    다음과 같이 dto package에 request, response를 만들어주었고 분리해주었다.
    그에 따라 controller에서는 해당 부분을 삭제하였다.

  • 컨트롤러에 있는 findby부분 다 service로 빼기

  • 어노테이션 사용해서 토큰으로부터 값 받아 유저 id 넣기

    다음과 같이 findby부분을 Service로 빼서 Repository에 의한 의존을 없앴으며

    @AuthenticationPrincipal을 이용해 토큰으로부터 이메일을 받아오고, 해당 Service에서 email을 통해 userId를 받아오도록 하였다.

    Repository에서 바로 반환하던 부분 역시 Service로 빼서 Repository 의존을 없앴다.


    이로써 Controller는 Service만 의존하도록 설계되었다.


모든 테스트도 잘 통과하는 걸 볼 수 있었다.

  • Exception 폴더 분리하기

    Exception 폴더를 분리하기 위해 ErrorCode, CustomException, CustomExceptionHandler, ErrorBody와 Exception들을 만들어주었다.

    CustomException은 에러코드를 받아주었다.

    다음과 같이 Exception Code를 ENUM 타입으로 만들어주었다.

    에러코드는 다음과 같이 custom exception에서 사용되었다.

    ErrorBody에서는 코드, 메시지, 상태를 넘기도록 만들었고


    CustomExceptionHandler는 다음과 같이 작성했다.
    @ExceptionHandler(XXException.class) 라고 작성한 경우, @ControllerAdvice에서 명시한 클래스에서 throw new XXException( .. ) 이 발생하면 핸들러는 이를 감지하고 해당 메소드를 수행한다.

다음과 같이 Exception들을 분리하였다.


테스트 시에 문제가 발생했다. assertj의 assertThatIllegalArgumentException()을 사용하고 있었는데 더이상 IllegalArgumentException이 아닌 Custom Exception이기 때문에 테스트를 통과하지 못하고 있었다.

그래서 다음과 같이 assertThatThrownBy와 hasMessage로 바꾸어 주었다.

그러자 테스트를 통과하는 걸 볼 수 있었다.

이로인해 중간 점검의 수정 사항들을 해결할 수 있었다.
확실히 코드가 깔끔해진 느낌을 받았고 Exception Handling 부분은 공부가 되었다.

profile
코드를 통한 세계의 창조

0개의 댓글