#360 [refactor] 구글 로그인 구현 및 전략 패턴 적용 #371
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
✒️ 관련 이슈번호
Key Changes 🔑
전략 패턴
구현 방식
원래 Abstract Class 였던 Social Service를 아래와 같이 Interface(알고리즘의 틀을 만들기 위해)로 변경해줍니다.
Mile-Server/module-auth/src/main/java/com/mile/service/LoginStrategy.java
Lines 7 to 16 in 251b0cc
각 전략 클래스(Kakao, Google)를 빈으로 등록해주기 위해 Component 어노테이션을 추가합니다.
이렇게 등록된 빈 클래스를 런타임에 따라 매칭해주는 매니저가 필요합니다. 저 같은 경우는 로그인 방법을 enum SocialType으로 구분했기 때문에 각 전략 클래스에(클래스가 담당하는 로그인 방법을 담기 위해 아래와 같이 Getter와 함께 정의해줍니다.
Mile-Server/module-auth/src/main/java/com/mile/external/client/google/GoogleSocialStrategy.java
Lines 26 to 27 in 251b0cc
Map으로 빈클래스들을 불러올 수 있게 도와주는 매니저 클래스를 정의합니다.
Mile-Server/module-auth/src/main/java/com/mile/service/LoginStrategyManager.java
Lines 12 to 25 in 251b0cc
위 코드에서 확인할 수 있듯이 생성자를 통해 의존성을 주입받고, 각 전략 클래스마다 정의되어 있는 Social Type을 키로 가지고 있습니다.
실제 런타임에서는 switch, case 문으로 아래와 같이 LoginStrategy를 대응합니다.
Mile-Server/module-domain/src/main/java/com/mile/user/service/UserService.java
Lines 44 to 54 in 251b0cc
확장하면서 기존에 social Id를 Long -> String을 해야한다는 것을 깨달았습니다(구글의 경우 많은 유저로 Long을 초과함), 이를 제 로컬에서는 변경했는데 머지하게 될 경우 dev, deploy 서버를 모두 수정해야 합니다.
To Reviewers 📢