ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2021.05.29 기록장
    TIL 2021. 5. 29. 00:48

    To Do

    • oauth 구현 인터셉터 구현, 어노테이션으로 구분, or handlerMethod Argument로 구현할지 2개다 사용
    • 책 읽기
    •  인터셉터, 필터 공부

    Done

    • oauth 구현 인터셉터 구현, 어노테이션으로 구분, or handlerMethod Argument로 구현할지 2개다 사용
    • 책 읽기

    Weekly goal

    • 책 읽기
    • 블로그 읽기

    Feeling

    오늘은 미션과 object책 2 챕터를 읽었다. 다형성에 관한 부분이 나왔는데 이번 미션에 도입해볼 만한 곳이 있어 고민을 해봤다.

    하지만 적용이 쉽지 않았다. 

     

    적용을 해보려던 곳은 추가 비용 부분이다.

    room.class

    추가 비용에는 주간 세일, 청소비, 서비스비 등이 있는데, 각각 객체로 만들고 하나의 부모를 상속하려 했다.

    room에서는 부모를 리스트로 가지고 있고.

     

    그러고 나서 calcTotalPrice에서 루프를 돌면서 부모의 정의된 하나의 메서드를 돌리려고 했는데 문제는 주간 세일이었다.

    나머지 추가 비용은 금액을 추가시키는 로직이고, 주간 세일은 금액을 감소시키는 로직이다. 또 fewNights도 필요하다.

    루프를 돌 때 어느 하나는 빼야 하고 나머지는 더해야 하는 로직이 생긴다.

    만약 같은 메서드로 처리한다고 해도 fewNights를 불필요하는 다른 객체에게도 넘겨야 하는 문제가 있었다.

    그래서 일단은 보류하기로 했다.

     

     

    미션

    intercepter

    handlerMethodArgumentResovler

    convertor

    오늘은 oauth를 사용하면서 위의 3가지 기술을 도입했다. 

     

    인터셉터는 로그인이 필요한 곳에 접근할 때 로그인 여부를 판단했고

    메서드 리졸버는 인터셉터를 통과하고 나서 request에서 jwt를 꺼내고 거기서 id를 또 꺼내는 작업을 해준다.

    컨버터는 로그인 부분에서 사용했는데 pathvariable을 사용할 때 enum으로 받으려고 사용했다.

     

    1.intercepter

    인터셉터는 Auth메서드가 붙은 메서드만 검증을 진행한다. 

    일단은 rooms path만 검증한다.

     

    2.handlerMethodArgumentResovler

    파라미터에 UserId 어노테이션이 붙어있으면 해당 리졸버가 작동을 한다. 로그인 검증은 인터셉터에서 했으니 jwt에서 id를 꺼내서 전달한다.

    https://jaehun2841.github.io/2018/08/10/2018-08-10-spring-argument-resolver/#custom-argument-resolver-%EB%A7%8C%EB%93%A4%EA%B8%B0

     

    3.convertor

    맨 위의 사진이 converter이다. 이렇게 string이 들어오면 enum에서 같은 것을 찾아서 돌려준다.

    이렇게 한 이유는 oauth를 ios와 fe가 동시에 사용하기 때문이다.

    http://localhost:8080/v1/auth/desktop

    http://localhost:8080/v1/auth/ios

    로 접근하면 enum으로 바꾸고 해당 enum을 사용해서 oauth를 사용한다.

     

    처음에는 파라미터로 구분할까 하다가 그럼 분기문이 발생하기에 converter를 사용했다.

     

     

    하지만 문제는 oauth객체를 만드는데에서 발생한다.

    현재 외부 라이브러리로 만들어 사용하고 있는 Oauth의 모습이다. 

    계획은 객체를 만들 때 모든 것을 완벽히 만들고 메서드를 호출하는 식으로 계획했다.

    하지만 ios와 fe는 각각 다른 app이기에 clientId와 clientSecret이 다르고 redirecetUri까지 다르다.

    이렇게 되면 2개의 객체를 생성하지 않는 이상 매번 set으로 바꿔줘야 한다.

    이건 마음에 들지 않는다. 이유는  clientId는 txt로 저장되어 있고 Environment로 꺼내 쓰기 때문이다. -> 매번 io작업이 일어난다.

     

    그래서 이 부분은 내일 리팩토리을 해야겠다.

    'TIL' 카테고리의 다른 글

    2021.05.31 ~06.01 기록장  (0) 2021.05.31
    2021.05.30 기록장  (2) 2021.05.30
    2021.05.28 기록장  (0) 2021.05.28
    2021.05.27 기록장  (0) 2021.05.27
    2021.05.26 기록장  (0) 2021.05.26

    댓글

Designed by Tistory.