Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3주차 과제] 조상현 #45

Open
wants to merge 21 commits into
base: main
Choose a base branch
from

Conversation

Cho-SangHyun
Copy link

저번주까지 했던 작업

토큰 발급 / 검증 기능 구현 및 관련 테스트 구현까지 했습니다

이번 주에 어떤 작업을 했는지 설명해주세요.

로그인 기능 구현
인터셉터로 응답값 통일
까지 했습니다..

이 외에 서블릿이 뭔지, DI가 구체적으로 뭘 말하는건지..등에 대해 공부했습니다

개발일지4 - 로그인 완성
개발일지5 - ResponseEntity
개발일지6 - 인터셉터로 통일

서블릿에 대한 조사
DI에 대한 조사


질문하고 싶은 부분

인터셉터를 통해 응답값을 통일시켜줄 때에 관한 질문입니다.

  • 필터에서 request와 response를 wrapping하는 이유가 얘네들은 한 번씩만 읽을 수 있도록 구현된 애들이어서라고 이해했습니다
  • 응답값을 인터셉터에서 통일시켜줄거니까 afterCompletion에서 전달받은 response를 읽어야 한다고 이해했습니다.
  • 또한 찾아보니 MessageConverter가 객체를 JSON으로 바꿔주는 과정에서도 response를 읽어야 한다고 공부했습니다.

이렇게 최소 두 번을 읽게 되는데, response는 한 번만 읽도록 만들어진 애니까 두 번이고 세 번이고 읽을 수 있게 하기 위해서 래핑한 객체를 따로 만드는 건가요? 두 번 이상 읽게 되니까 래핑하는 건 이해했지만 어느 부분에서 읽는 것이길래 두 번 이상 읽게 되는지를 모르겠습니다.

또한, 저렇게 인터셉터와 컨버터에서 읽기 때문에 문제가 생기는게 맞다면 그 순서도 궁금합니다(컨버터가 먼저 읽은 다음에 인터셉터의 afterCompletion에서 읽게 되는지, 아니면 인터셉터의 afterCompletion에서 먼저 읽고 컨버터가 읽는지).

또한, 만약 이게 맞다면

이번 주는 어떻게 학습했나요? 아래 질문에 짧게 답변주세요!

이번 주에 학습에 투자한 시간

하루 2~3시간 정도.. 나머지는 알고리즘 학습 등에 투자했습니다

학습 하면서 좋았던 점

  • 서블릿이 뭔지 알게 된 것
  • 스프링에서 요청을 처리하는 방법에 대해 대략적으로 느낌이라도 잡은 것(디스패처 서블릿이 받고 핸들러 찾아서 위임하는 식으로 처리.. 등)
  • afterCompletion으로 응답값을 통일하는 법을 알게 된 것
  • BCryptPasswordEncoder는 encode할때마다 결과가 달라지는 애란 걸 알게 된 것. 많이 헤멨는데 이번에 알게 돼서 앞으로 까먹을 일 없을 듯..

@YOONSEOUNGHWAN
Copy link
Collaborator

FeedBack

인터셉터를 통해 응답값을 통일시켜줄 때에 관한 질문입니다.

필터에서 request와 response를 wrapping하는 이유가 얘네들은 한 번씩만 읽을 수 있도록 구현된 애들이어서라고 이해했습니다
응답값을 인터셉터에서 통일시켜줄거니까 afterCompletion에서 전달받은 response를 읽어야 한다고 이해했습니다.
또한 찾아보니 MessageConverter가 객체를 JSON으로 바꿔주는 과정에서도 response를 읽어야 한다고 공부했습니다.
이렇게 최소 두 번을 읽게 되는데, response는 한 번만 읽도록 만들어진 애니까 두 번이고 세 번이고 읽을 수 있게 하기 위해서 래핑한 객체를 따로 만드는 건가요? 두 번 이상 읽게 되니까 래핑하는 건 이해했지만 어느 부분에서 읽는 것이길래 두 번 이상 읽게 되는지를 모르겠습니다.
->1. 우선 AfterCompletion에서 읽는 Reponse는 Controller단에서 만들어진 JSON 응답 값 입니다.
2. 우리는 이 응답값을 읽고(여기서 Buffer를 읽습니다.) 새로운 응답값으로 만들어주어야 합니다.
3. 새로운 응답값은 caching된 response에 적혀있으므로 마지막에
4. copyToresponse를 통해 해당 chaching된 response를 실제 응답 response로 갈아끼워줍니다.

또한, 저렇게 인터셉터와 컨버터에서 읽기 때문에 문제가 생기는게 맞다면 그 순서도 궁금합니다(컨버터가 먼저 읽은 다음에 인터셉터의 afterCompletion에서 읽게 되는지, 아니면 인터셉터의 afterCompletion에서 먼저 읽고 컨버터가 읽는지).
-> 1. Controller단에서 Converter가 먼저 JSON형식의 response를 작성합니다.
2. Interceptor에서 해당 response를 읽고 새로운 response를 만듭니다.
3. copyToResponse로 해당 response를 응답값으로 덮어씁니다.
\

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants