NeXTSTEP22 ATDD, 클린 코드 with Spring 5기 후기 어느덧 ATDD과정 또한 수료하게 되었다. 나 같은 경우 미션 4개를 모두 수행하고, 리뷰어와 의견을 잘 나누면서 나름 성공적으로 과정을 수료한 것 같다. 1. 과정 소개 ATDD, Clean Code with Spring 과정은 스프링 웹 애플리케이션을 개발하는 과정에서 ATDD(인수 테스트 주도 개발) 프로세스를 경험하고 클린코드 작성과 인수 테스트 기반 리팩터링에 대해 고민해보는 과정이다. 위와 같은 순서로 수업이 진행된다. 매주 목요일 7시 30분부터 10시 30분까지 주당 3시간씩 수업이 있었다. 과제 하나당 1주일씩 잡으면 되는데, 목요일날 3시간 수업을 듣고 난 후 그다음 주 목요일 전까지 해당 주차의 미션을 완주하면 된다. (다만 2주차 과제는 2주가 주어진다, 2주라 정말 다행이라 느껴지.. NEXT STEP/ATDD, 클린 코드 with Spring 5기 2022. 8. 15. [Review] ATDD 4주차 3차 PR 최홍준 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) 문서화의 범위 현재 경로 조회하는 "/paths" API는 로그인 여부와 상관 없이 모든 유저가 호출할 수 있습니다! 추가로 로그인 한 유저같은 경우 경로 조회시 회원의 나이마다 적용되는 할인 정책이 다른데, 이 API는 로그인을 한 경우와, 하지 않는 경우를 나눠서 문서화 해야하는지 궁금합니다! 정책과 스펙 사이의 고민이였던 것 같다. 리뷰어의 말씀이 타당한것 같다. API 문서는 스펙을 보여주는 문서지, 정책사항까지 보여줄 필요는 없는것 같다. 따라서 응답 값이 동일하니 따로 정리하지 않는쪽으로 방향을 정하였다. 2. 리뷰 정리 2-1) Hook 메서드의 사용 해당 메서드의 로직은 다음과 같다. public abstract class.. NEXT STEP/Review 정리 2022. 8. 15. [Review] ATDD 4주차 2차 PR 최홍준 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 리뷰 정리 1-1) 최단 경로 구하는 로직 원래 Service에서 최단 경로를 구하는 로직은 다음과 같았습니다. public PathResponse findShortestPath(Long source, Long target, PathCondition pathCondition) { Station upStation = stationService.findById(source); Station downStation = stationService.findById(target); List lines = lineService.findLines(); SubwayMap subwayMap = new SubwayMap(lines); Path path = subwayMap.. NEXT STEP/Review 정리 2022. 8. 12. [Review] ATDD 4주차 1차 PR 최홍준 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) 인수테스트 작성과 문서 작성 우선 ATDD 사이클에 의하여 인수테스트 작성 RestDocs 작성 순서로 진행하게 되었습니다. 다만 인수테스트를 작성했을때 최단 시간으로 경로를 찾는 인수테스트가 통과를 하지는 못하는 상황 이였습니다. @DisplayName("두 역의 최단 시간 경로를 조회한다.") @Test void findPathByTime() { // when ExtractableResponse response = 두_역의_최단_시간_경로_조회를_요청(교대역, 양재역); // then assertThat(response.jsonPath().getList("stations.id", Long.class)).containsExactly(교.. NEXT STEP/Review 정리 2022. 8. 8. [Review] ATDD 3주차 3차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) Bearer 인증방식에서 권한이 없을 경우 public abstract class AuthenticationChainingFilter implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(isAlreadyLoginUser()) { return true; } try { AuthenticationToken token = convert(request); UserDetails userDetails = findU.. NEXT STEP/Review 정리 2022. 8. 4. [Review] ATDD 3주차 2차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) 공통의 테스트를 만들었어야 하는가? 미션중 TokenAuthenticationInterceptor와 UsernamePasswordAuthenticationFilter 를 추상화 하는 단계에서는, 두 필터에 공통적으로 적용 가능한 테스트를 작성한 후, 공통 부분을 추상화 했어야 할까요? 두 필터의 공통으로적용할 테스트를 작성하기 어렵다 생각되어 새로운 테스트는 작성하지 못하고, 기존의 테스트 코드로 구현하게 된것 같아 아쉽습니다. 리뷰어 님이라면 어떻게 하셨을까요? 의견 궁금합니다!! 답변: 공통의 테스트를 작성하기시 보다는, 구현체 위주의 테스트를 작성한다고 하셨다. 추상 클래스를 기반으로 하는 테스트는 인수테스트 선에서 처리하시는 것 .. NEXT STEP/Review 정리 2022. 8. 3. [TIL] 일일 회고 2022/08/01 요즘 한 일 1. ATDD 리뷰 정리 https://blogshine.tistory.com/485 [Review] ATDD 2주차 4차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) Exception과 Domain #323 (comment) 지난 번 리뷰에 대한 저의 생각입니다 ㅎㅎ 의견 달아주시면 감사하겠습니다! 예외를 나타내는 클래스가 htt blogshine.tistory.com https://blogshine.tistory.com/489 [Review] ATDD 3주차 1차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 와 개인적으로 이번 3주차는 Spring Security를 비슷하게 만든 뼈대 코드 위에서 인증 처리 테스트를 작성하는데, 진짜 어려우면서 꿀잼이.. NEXT STEP/회고록 2022. 8. 1. [Review] ATDD 3주차 1차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 와 개인적으로 이번 3주차는 Spring Security를 비슷하게 만든 뼈대 코드 위에서 인증 처리 테스트를 작성하는데, 진짜 어려우면서 꿀잼이다. 아직 Spring Security를 공부해본적은 없지만, 큰 틀을 배워가는 것 같아 너무 재미있다. 1. 질문 1-1) 인터셉터 처리 방식 public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SecurityContextPersistenceFilter()); registry.addInterceptor(new UsernamePasswordAuthenticationFilter(loginMemberService).. NEXT STEP/Review 정리 2022. 8. 1. [Review] ATDD 2주차 4차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) Exception과 Domain #323 (comment) 지난 번 리뷰에 대한 저의 생각입니다 ㅎㅎ 의견 달아주시면 감사하겠습니다! 예외를 나타내는 클래스가 http status를 상태로 갖는 게 괜찮을까요? => 사실상 Spring에서 벗어날 일이 없을 거라 거의 100% 확신하기 때문에 Spring에 의존적인 부분들을 가져다 사용해도 무방하다 생각합니다! 비즈니스 로직에 대한 예외처리인데, http 라는 프로토콜에 의존하게 된다고 생각합니다. 가장 중요한 도메인에 관련한 클래스들은 외부 기술에 종속되지 않도록 구현하는 것을 추천드립니다 => Entity Class 즉, Domain안에서는 HttpStatus에 대한 import가 없.. NEXT STEP/Review 정리 2022. 7. 26. [TIL] 일일 회고 2022/07/25 요즘 한 일 1. ATDD 리뷰 정리 2차, 3차 PR에 대한 리뷰를 정리하였다. 부족한 부분이야 항상 많지만, 다양한 주제로 리뷰어와 예기할 수 있어 좋다! https://blogshine.tistory.com/479 [Review] ATDD 2주차 2차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! https://github.com/next-step/atdd-subway-path/pull/299 2단계 - 지하철 구간 추가 리팩터링 by zbqmgldjfh · Pull Request #299 · next-step/atdd-subway-pat.. blogshine.tistory.com https://blogshine.tistory.com/482 [Review] ATDD 2주차 3차 PR 권승철 .. NEXT STEP/회고록 2022. 7. 25. [Review] ATDD 2주차 3차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) CustomException의 사용 이번에 CustomException을 좀더 세분화 하기위해, 기존의 SectionException을 SectionsAdd, SectionsDelete 별로 나눠 CustomException을 구현하게 되었습니다. 그보다 더 세부적인 내용들은 예외 안에서 메시지로 구별하였습니다! 우선 모든 예외가 공통적으로 상속받을 BusinessException을 구현하였습니다. 해당 class 안에는 HttpStatus를 저장 할 수 있습니다. public class BusinessException extends RuntimeException { private final HttpStatus httpStatus; pu.. NEXT STEP/Review 정리 2022. 7. 25. [Review] ATDD 2주차 2차 PR 권승철 리뷰어 님께 감사의 말을 전하고 싶다!! 1. 질문 1-1) 일급 컬렉션에 대한 재질문 지난번 대화를 통해 sections을 방어적 복사를 해도, sections에 담긴 원소인 section은 변경의 위험이 있음을 인지하게 되었습니다. 따라서 리뷰어님의 의견을 수용하여 Sections.getSections() 메서드는 제거하였지만, "순서대로 역을 조회하는 기능" 때문에 어차피 역들은 변경의 위험에 있을 수 밖에 없지 않나? 란 생각이 들었습니다. 일급컬렉션은 컬렉션의 불변성만 보장하면 됐던 것 아닐까? 란 생각도 들구요 ㅎㅎ 변경 위험의 노출 정도를 줄였다 생각하면 될까요? 이에 대한 의견이 궁금합니다!! 답변: 1-2) 구간 길이 검증의 불가능 미션의 요구사항 중 다음과 같은 사항이 있습니다... NEXT STEP/Review 정리 2022. 7. 22. 이전 1 2 다음