목차
3단계 종료
1. API Response응답 결과에는 올바른 정보를 담는다.
httpStatus.created는 자원의 생성이 잘 되었음을 의미한다.
그리고 생성된 자원에 대해서 요청 메세지를 Location 헤더로 응답한다고 한다.
그래서, 나는 구간(Section)을 생성해서 저장했으므로 해당 구간의 아이디를 Location에 담아줬지만,
이렇게 받환받은 Location에 매핑되는 구간조회 API는 존재하지 않으며 사실 필요도 없다.
line을 조회하면 section정보를 얻을 수 있기에 Location은 line조회 path를 반환하는게 맞다.
2. dtoentity 변환 로직은 DTO나 Entity에게 책임을 주도록 하자.
private Section createSection(SectionRequest request) {
return Section.Builder()
.upStation(findStationById(request.getUpStationId()))
.downStation(findStationById(request.getDownStationId()))
.distance(request.getDistance())
.build();
}
Java
복사
기존에 request를 Section으로 변환해주는 서비스계층 메소드였다.
다른 많은 dtoentity 메소드는 각각의 dto나 entity에 넣어놓고 해당 메소드만 서비스계층에 뒀던 이유는 상행역(upStation)과 하행역(downStation)의 아이디를 통해 조회를해서 Station Entity를 받아올 필요가 있었기 때문인데, 이 부분은 그냥 서비스 계층에서는 해당 지하철역 엔티티를 조회한다음 이 엔티티들을 파라미터로 넘겨서 DTO에서 Entity를 생성하도록 코드를 변경했다.
3. dtoentity의 로직은 entity보다는 dto나 converter를 이용하자.
dto는 view의 요구사항에 맞춰 만들어진 객체이기에 요구사항 변경에따른 변경이 잦은편이다.
그렇기에 entity에서 dto를 참조하면 dto의 잦은 변경으로 entity도 변경되야하는 경우가 생긴다.
그렇기에 dto와 entity간의 변환은 dto혹은 converter 레이어를 만들어 처리하는게 좋다.
4. 일급 컬렉션을 사용해 콜렉션을 관리하자.
TDD때도 나왔던 이야기로 콜렉션 필드는 일급 콜렉션을 이용하면 관련 로직의 응집도를 높힐 수 있다.
더하여 JPA에서 콜렉션을 일급 콜렉션으로 다루고싶다면, Embedded / Embeddable 어노테이션을 이용하면 된다.
5. 래퍼 클래스보다는 원시값을 사용하자.
래퍼 클래스에서는 NullPointerException의 위험이 있고 퍼포먼스 적으로도 차이가 있다. 더하여 객체화 되었기 때문에 실제 값은 같더라도 동등비교시 오류가 발생할 수 있다.