본문으로 바로가기

3주 차 미션 : ATDD (지하철 노선 관리)

 

저장소 : https://github.com/prodo-developer/atdd-subway-admin

 

느낀점

  • 인수 테스트의 각 스텝들을 메서드로 분리
  • 임베디드 사용  @Embedded Distance -> @embeddable Sections
  • 불분명한 익셉션 처리는 기능에 맞는 익셉션으로 분리
  • 서비스 분리

이번 과정의 목표 경험

  • 객체들간의 역할과 책임 분리
  • 인수 테스트 경험
  • @ControllerAdvice를 이용한 Exception handler
  • 동기들과 페어 프로그래밍 진행

내 코드 피드백

 

리뷰어님의 친절한 피드백으로 인수 테스트의 각 스텝들을 메서드로 분리를 통해 비 개발직군들도 알아보기쉽게

리팩토링 할 수 있었다. 지하철_노선_생성됨()  으로 변경.

 

LineService에서 제어하던 여러 기능들을 분리하는 피드백을 받았다.

stationRepository를 제어하기 보다는 stationService로 분리해서 결합을 낮추는게 좋았다.

 

중복적인 라인들이 보여 가독성도 줄이고, LineRequest로 하여금 값에 대한 검증 역할을 위임을 할수 있게 되었다.

 

인스턴스를 분리하는 과정에있어 숫자로 표현하는것 보다 @Embedded와 enum같은 다양한 방법들도 추천해주셨다.

리스펙! ㅎㅎ

 

EntityNotFoundException을 사용하셨는데, EntityNotFoundException는 JPA에서 연관관계가 잘못되었을 경우를 용도로 사용하는 Exception 입니다 😄
물론 큰 관점에서는 사용해도 괜찮은데, StationNofFoundException등과 같이 별도로 상황에 맞는 Exception을 정의하고
사용하신다면 400, 500 같은 상황에서 디버깅에 좀 더 용이할 것 같습니다 😄

-> 공통 익셉션을 사용하다보면 상황에 맞는 익셉션을 만들어주자.

https://cheese10yun.github.io/checked-exception/

 

 

@ControllerAdvice를 이용한 Exception handler를 사용하게 되었다. 

확장판 : @RestControllerAdvice 

@ControllerAdvice + @ResponseBody 의 확장판

 

package nextstep.subway.common.error;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class ErrorAdvice {

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(IllegalArgumentException.class)
    public void handleIllegalArgumentException(IllegalArgumentException e) {
    }

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler(IllegalStateException.class)
    public void handleIllegalStateException(IllegalArgumentException e) {
    }
}

 

자세하게 알고싶다면?

아래 블로그를 참고해주세요~ 

@RestControllerAdvice 를 이용해서 예외 처리하기

 

후기

이번 ATDD 수업은 기존에 생각하던 TDD에서 개발자가 보는 관점이라면 전혀 모르는사람이 봤을때도

쉽게 알아볼수있는게 장점이었다.

리팩터링 전 레거시 코드에 대한 테스트 코드를 작성해야하는데 메서드가 커서 테스트 코드 작성이 어려움이

있었는데 인수테스트를 통해 인수테스트를 먼저 구현한후 단위 테스트를 통해 기능을 완성해 가는 과정이

재미가 있었다.

 

협업에서도 기회가 있으면 해도 좋은기회라 생각한다.