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

[REFACTOR] 소셜 로그인 코드 리팩토링 및 프로젝트 디렉토리 구조 변경 #8

Merged
merged 5 commits into from
Jul 5, 2023

Conversation

jun02160
Copy link
Member

@jun02160 jun02160 commented Jul 4, 2023

📌 관련 이슈

close #7

✨ 어떤 이유로 변경된 내용인지

👩🏻‍💻 프로젝트 구조

  • 전반적인 디렉토리 구조 변경 (global, domain을 상위 폴더로 구성)
  • error -> exception 으로 폴더명 변경 (ErrorType ENUM 클래스와 겹친다는 이유 및 exception이 목적에 더 맞는 것 같다)
  • domain/user 하위에 위치해있던 jwt 관련 코드를 config 하위 폴더로 변경
  • security -> auth로 폴더명 변경 및 jwt와 분리 (Spring Security를 이용한 인증 필터를 구현한 것으로, 기존의 필터들을 jwt에 맞추어 단순 커스텀한 것일 뿐이므로 온전히 jwt의 로직이라고 생각하지 않았음)

👩🏻‍💻 코드 리팩토링 사항

📁 common

  • ControllerException과 ErrorType에 일부 내용 추가 -> **예외처리 해줄 때 반환값에도 넣고 log로도 출력하도록 하는 거 어떤지 (이유는 공부방 적어둔 예외처리 관련 내용 참고..) **
  • ApiResponse에서 null일 가능성이 있는 필드는 data 뿐이므로 클래스 전체가 아닌 필드에만 @JsonInclude(JsonInclude.Include.NON_NULL) 어노테이션을 붙여줘도 된다는 의견)
  • 꼭 필요한 건 아니지만 response 반환 시 필드의 순서를 명시하기 위한 @JsonPropertyOrder를 붙여줌

📁 jwt

  • RefreshToken에서 id -> userId로 변경 (실제 DB에 저장되어 있는 Long 타입의 유저 아이디를 key 값으로 쓰기 때문에 더 의미가 명확하게 전달되고 이해하기 좋다고 생각)
  • JwtValidationType ENUM에서 String 타입의 value 필드를 추가해서 요청에 대한 응답값을 한글로 반환하도록 수정 (클라 쪽에서 요청이 잘못된 원인을 더 직관적으로 파악할 수 있다고 생각 + JWT 토큰 쪽 코드에서 String으로 캐스팅 하는 방식보다 더 깔끔한 것 같음)
  • 생성자 관련 어노테이션들에 AccessLevel 지정
    *추가로 이번에 새로 알게 된 생성자 어노테이션 관련 내용 - https://cobbybb.tistory.com/14
    *또 새롭게 배운 JpaRepository 대신 Repository를 상속할 떄의 이점 - https://jaehoney.tistory.com/250
  • (사소하지만) 토큰 발급/재발급(issue-)과 스트링값 생성(generate)을 구분하여 메서드명 수정
  • 토큰 관련 로직(issueToken())을 JwtProvider로 옮김

📁 user

  • JWT 토큰 재발급 시 user 엔티티의 refreshToken 필드에도 업데이트 되도록 추가

ETC

  • 컨트롤러에서는 최대한 Header와 Body에서 받는 request, response만 이용하도록 하고 여기서 값을 꺼내서 사용하는 로직이 서비스에 들어가도록 통일하면 좋을 것 같다!
  • 우리의 코드 컨벤션에는 없지만 else 사용을 지양한다는 클린코드 스타일을 본 것 같아서 해당 내용 반영하여 수정
    *참고 - https://github.com/orgs/woowacourse-precourse/discussions/358

🙏 검토 혹은 리뷰어에게 남기고 싶은 말

🤔 궁금한 점

  1. RefreshToken 클래스에 붙은 @RedisHash가 있기에 RedisConfig, @EnableRedisRepositories, RedisTemplate 등의 추가 설정들이 필요 없는 것인가
  2. SecurityConfig에서 passwordEncoder 왜 필요한거지??
  3. 진짜 Refresh Token을 UUID로만 생성한다는 의미였구나..?? 그래도 JWT 토큰의 형태를 갖추어서 저장해야 하는 것이 아닌지!!
    ➔ 헤더는 JWT로 동일하게 들어가니까 Access Token과의 구분이 필요하다면 "sub" 추가해도 괜찮을 것 같음
    ➔ 그리고 이렇게 하면 발급 일시로 인해 UUID의 중복 가능성이 훨씬 줄지 않을까..라고 생각함(물론 얘는 안 쓰이지만)
  4. JWT 토큰 발급 시 따로 암호화 알고리즘을 사용하지 않은 것인지? 그렇다면 그 이유는?

😢 미리 사과..

  • 커밋 시에 이슈 번호 붙이는 거 까먹었습니다.. 담부터는 꼬옥 지킬게요 ..
  • PR 단위 쪼갰으면 더 좋았을텐데!! 담부터 또 주의하겠습니다

@jun02160 jun02160 requested a review from ddongseop July 4, 2023 17:03
@jun02160 jun02160 self-assigned this Jul 4, 2023
@jun02160 jun02160 added 🔥 Pull Request PR 날림 예준🍒 🧹Chore 동작에 영향 없는 코드 or 파일, 폴더 관련 수정사항 🔨Refactor 코드 리펙토링 (기능 변경 없이 코드만 수정할 때) labels Jul 4, 2023
Copy link
Member

@ddongseop ddongseop left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리팩토링 폼 미쳤따이~

@jun02160 jun02160 changed the title [Refactor] 소셜 로그인 코드 리팩토링 및 프로젝트 디렉토리 구조 변경 [REFACTOR] 소셜 로그인 코드 리팩토링 및 프로젝트 디렉토리 구조 변경 Jul 5, 2023
@jun02160 jun02160 merged commit 3af7576 into develop Jul 5, 2023
@ddongseop ddongseop deleted the refactor/#7-social_login_and_token branch August 12, 2023 16:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
예준🍒 🧹Chore 동작에 영향 없는 코드 or 파일, 폴더 관련 수정사항 🔥 Pull Request PR 날림 🔨Refactor 코드 리펙토링 (기능 변경 없이 코드만 수정할 때)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[REFACTOR] 소셜 로그인 코드 리팩토링
2 participants