NEXT STEP/Review 정리

[Review] ATDD 3주차 1차 PR

샤아이인 2022. 8. 1.

 

권승철 리뷰어 님께 감사의 말을 전하고 싶다!!

 

와 개인적으로 이번 3주차는 Spring Security를 비슷하게 만든 뼈대 코드 위에서 인증 처리 테스트를 작성하는데, 진짜 어려우면서 꿀잼이다.

아직 Spring Security를 공부해본적은 없지만, 큰 틀을 배워가는 것 같아 너무 재미있다.

 

1. 질문

1-1) 인터셉터 처리 방식

public void addInterceptors(InterceptorRegistry registry) {
  registry.addInterceptor(new SecurityContextPersistenceFilter());
  registry.addInterceptor(new UsernamePasswordAuthenticationFilter(loginMemberService)).addPathPatterns("/login/form");
  registry.addInterceptor(new TokenAuthenticationInterceptor(loginMemberService, jwtTokenProvider)).addPathPatterns("/login/token");
  registry.addInterceptor(new BasicAuthenticationFilter(loginMemberService));
  registry.addInterceptor(new BearerTokenAuthenticationFilter(jwtTokenProvider));
}

위와 같은 인터셉트 등록에서, UsernamePasswordAuthenticationFilter, TokenAuthenticationInterceptor 같은 경우
로그인 처리를 인터셉터에서 해주는 격이니까? 바로 false를 반환하도록 처리 했는데, 이게 맞는 방식일까요?

 

답변:

 

1-2) 요구사항 질문

우리의 요구사항을 보면 "지하철역, 노선, 구간을 변경하는 API는 관리자만 접근이 가능하도록 수정하세요."
라고 명시되어 있는데, MemberAcceptanceTest를 보면 다음과 같이 비어 있는 메서드 들이 있습니다.

    @DisplayName("회원 정보를 관리한다.")
    @Test
    void manageMember() {
    }

    @DisplayName("나의 정보를 관리한다.")
    @Test
    void manageMyInfo() {
    }

비어 있는 이유가 회원 정보도 관리자만 수정 가능하도록 작성해보라는 의미인가요??

회원 관리 기능의 CRUD를 하나의 큰 흐름으로 인수테스트를 작성해보자는 의미였다!

인수테스트 합치기에 해당되는 내용이다.

 

2. 리뷰 정리

2-1) 예외 catch하기

 

음 사실 이런 리뷰가 달릴거라는 생각은 했던 부분이다.

하지만 나 또한 Exception으로 놔둔 이유가 있었다.

 

위 인터셉터 에서 로그인 처리를 하던 도중 어떠한 이유든 예외가 발생한다면 false를 반환하도록 catch부분에서 작석해주는 것이 적합하지 않을까?

로그인 과정에서 오류가 나면 일단 튕겨주는게 적합하지 않나? 란 생각이 들었다.

 

하지만 리뷰어의 말을 듣고보니 생각이 조금 바뀌었는데

모든 예외를 다 튕겨버리면, 이게 로그인이 잘못되서 튕긴건지? 아니면 다른 부분에서 예외가 발생하여(ex Json 파싱이라던가?) 튕긴건지?

구분할수가 없다. 로그인 오류가 아니라면 true를 반환하여 다음 interceptor로 넘어가는 것 또한 적합한것 같다?

 

2-2) 매직 리터럴 분리

 

흠... 사실 분리한다 해도 다음과 같이 분리할 것 같은데

private static final String EMAIL = "email";
private static final String PASSWORD = "password";

꼭 분리해야하나? 란 생각이 들었습니다.


문자 자체로 의미가 충분하게 전달된다 생각되어 변경하지 않았었습니다 ㅎㅎ

이에 대한 리뷰어님의 의견이 궁금합니다!!

 

답변:

흠 principal 객체 자체에 담을 수 있는 정보가 단지 email/password가 아닌, 다른 전략 또한 사용이 가능하며

이에 따라 다형적으로 적용할 수 있다는 리뷰어의 답문인것 같다.

 

따라서 username, credentail로 상수를 추출하여 사용하면 더 좋을것 같다.

말씀해주신 것 처럼 email/password 은 너무 세부적이다.

 

2-3) import에서 * (wild card) 사용 금지

나:

좋은 리뷰 감사합니다 ㅎㅎ
혹시 리뷰어님은 그럼 *은 아예 사용하지 않는 편이신가요?
혹 가끔 사용하신다면 기준이 있을까요? 몇개 이상 정도면 그냥 *(wild card)를 사용한다던가? 하는

 

답변:

 

 

'NEXT STEP > Review 정리' 카테고리의 다른 글

[Review] ATDD 3주차 3차 PR  (0) 2022.08.04
[Review] ATDD 3주차 2차 PR  (0) 2022.08.03
[Review] ATDD 2주차 4차 PR  (0) 2022.07.26
[Review] ATDD 2주차 3차 PR  (0) 2022.07.25
[Review] ATDD 2주차 2차 PR  (0) 2022.07.22

댓글