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

[BE] feat: 세션 저장 정보를 리졸버를 통해 컨트롤러에 가져온다 #1087

Conversation

Kimprodp
Copy link
Contributor


🚀 어떤 기능을 구현했나요 ?

  • 요청 헤더에서 세션을 가져와서 회원/비회원 정보 객체를 생성하여 컨트롤러 파라미터로 전달하는 리졸버를 구현했습니다.
  • 리졸버 구현 후 컨트롤러에 적용하면서, 일부 api를 수정했습니다.

🔥 어떻게 해결했나요 ?

  • api 요청 시, 회원/비회원 세션이 필수 또는 선택인 경우가 존재합니다.
  • 각 리졸버(회원, 비회원)에서 요청 헤더에서 세션을 찾고, SessionManger를 통해 저장 정보를 가져옵니다.
  • 이때 세션 어노테이션이 필수이나, 세션 정보가 존재하지 않으면 예외가 발생합니다.
  • 세션 어노테이션이 필수가 아닐 경우, 세션 정보가 존재하지 않으면 null을 반환합니다.
  • 어노테이션 속성에 관계없이 세션 정보가 존재한다면, dto 객체를 생성하여 반환합니다.

여기서 Member로 생성하여 반환하지 않는 이유는, 각 도메인에서 Member를 직접적으로 사용할 필요 없이 id만을 사용하기 때문에 굳이 다른 패키지의 객체를 전송할 필요가 없다고 생각했습니다. 내부 필드가 하나여도 dto를 통해 감싸서 전달하는 것이 안전해 보입니다.

  • 추가로, 진행하면서 api 수정이 필요한 부분도 함께 진행했습니다.

  • 우선 uri와 메서드명을 통일했습니다.

  • 각종 uri와 메서드명이 자원 중심과 뷰 중심이 섞여있어서 자원 중심으로 통일했습니다.
    즉, api를 특정 페이지 뷰에 종속되지 않게 하기 위해서 여러모로 통일 시켰습니다. (이 부분이 괜찮은지 잘 봐주세요.)
    지금까지 api가 특정 페이지에 종속되어 있다 보니, 여러 응답에서 리뷰 그룹 정보(리뷰이, 프로젝트명)가 중복되어서 계속 응답됩니다. 단순히 요청에 대한 자원만 제공한다면 불필요해 보입니다. 페이지에서 자원의 정보와 함께 제공하는 그룹의 정보들은 /groups?(기존의 groups/summary) 로 요청해서 사용하면 될 것 같습니다.

  • 수정하면서 aop 로직이 필요한 부분 TODO로 남겨놓았습니다. (산초 작업 시, 일치하는지 확인해주세요)

📝 어떤 부분에 집중해서 리뷰해야 할까요?

  • 이번에 회원이 추가되면서 느낀건데, 지금까지 api가 특정 페이지에 너무 종속되어 있어서 너무 헷갈립니다..
  • 특히 메서드명도 뷰 중심적이여서 특정 api가 어떤 페이지에서 제공되는지를 계속 생각해야 합니다.
  • 어느정도 종속을 뗄 수 있는 부분은 같이 진행하려 합니다.
  • gather 같이 특정 기능을 위해서만 만들어진 api는 어쩔 수 없다고 생각해서 위치를 따로 분류했습니다.

📚 참고 자료, 할 말

  • 이번꺼 빠르게 머지되면, 세부 구현 필요한 부분들 바로 진행할게요. (조회 부분에서 스키마 수정이 필요해보여서 따로 작업하려 합니다)

Copy link

Test Results

169 tests  +10   166 ✅ +10   5s ⏱️ -1s
 62 suites + 2     3 💤 ± 0 
 62 files   + 2     0 ❌ ± 0 

Results for commit fc83aa7. ± Comparison against base commit 073cec3.

This pull request removes 2 and adds 12 tests. Note that renamed tests count towards both.
reviewme.api.ReviewApiTest ‑ 자신이_받은_리뷰의_요약를_조회한다()
reviewme.review.service.ReviewDetailLookupServiceTest ‑ 리뷰_그룹에_해당하지_않는_리뷰를_조회할_경우_예외가_발생한다()
reviewme.api.ReviewApiTest ‑ 자신이_받은_리뷰의_개수를_조회한다()
reviewme.auth.controller.GuestReviewGroupSessionResolverTest ‑ 세션을_통해_비회원_리뷰_그룹_코드를_반환한다()
reviewme.auth.controller.GuestReviewGroupSessionResolverTest ‑ 어노테이션의_속성이_false일때_세션에_저장된_데이터가_없다면_null을_반환한다()
reviewme.auth.controller.GuestReviewGroupSessionResolverTest ‑ 어노테이션의_속성이_flase일때_세션이_없다면_null을_반환한다()
reviewme.auth.controller.GuestReviewGroupSessionResolverTest ‑ 어노테이션의_속성이_true일때_세션에_저장된_데이터가_없다면_예외가_발생한다()
reviewme.auth.controller.GuestReviewGroupSessionResolverTest ‑ 어노테이션의_속성이_true일때_세션이_없다면_예외가_발생한다()
reviewme.auth.controller.LoginMemberSessionResolverTest ‑ 세션을_통해_로그인_회원을_반환한다()
reviewme.auth.controller.LoginMemberSessionResolverTest ‑ 어노테이션의_속성이_false일때_세션에_저장된_데이터가_없다면_null을_반환한다()
reviewme.auth.controller.LoginMemberSessionResolverTest ‑ 어노테이션의_속성이_flase일때_세션이_없다면_null을_반환한다()
reviewme.auth.controller.LoginMemberSessionResolverTest ‑ 어노테이션의_속성이_true일때_세션에_저장된_데이터가_없다면_예외가_발생한다()
…

@Kimprodp Kimprodp closed this Feb 11, 2025
@Kimprodp
Copy link
Contributor Author

브랜치명 오류로 해당 PR 닫고 다시 올립니다 😢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

[BE] 세션 저장 정보를 리졸버를 통해 컨트롤러에 가져온다
1 participant