-
Notifications
You must be signed in to change notification settings - Fork 1
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
Feat(#15): 카카오 로그인 #18
The head ref may contain hidden characters: "feature/#15-\uCE74\uCE74\uC624-\uB85C\uADF8\uC778"
Conversation
static boolean filterFixture(final BeanDefinition beanDefinition) { | ||
try { | ||
Class<?> clazz = Class.forName(beanDefinition.getBeanClassName()); | ||
return !clazz.getPackage().getName().contains("fixture"); | ||
} catch (ClassNotFoundException e) { | ||
return false; | ||
} | ||
} | ||
|
||
static boolean isTestEnvironment() { | ||
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); | ||
for (StackTraceElement element : stackTrace) { | ||
if (element.getClassName().contains("org.springframework.boot.test.context")) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
보내주신 블로그 글에 없던 내용입니다.
HttpInterfaceFinder
가 base package를 중심으로 접근제어자, 테스트 파일과 관계없이 모든 http interface를 스캔하기 때문에 넣어줬습니다.- 테스트 코드를 작성하지 않는다면 없어도 되는 부분입니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 고생하셨습니다! 금방 하셨네요!
HttpInterface
와RestClient
구성과 카카오 로그인을 나눠서 작업할 걸 그랬나보네요.. 다음부터는 티켓을 좀 더 쪼개볼까요?
질문에 대한 답변
1. 프로젝트 구조
common/http
에 모여 있는 게 좋을 것 같습니다!BaseEntity
는common/model
에 들어가도 괜찮을 것 같아요.domain/auth/http
는 어떨까요?common
과 일관성있게 하면 코드를 이해하는 데 좋을 것 같아서요.
2. 테스트 코드
- 테스트 코드 클래스 외부에 테스트 데이터를 정의하지 않는 것이 좋다는 것에는 동의합니다.
- 이 부분은 조금 더 확인해보고 리뷰 달겠습니다.
3. api 테스트 depth
- 저는 이정도 depth는 괜찮다고 생각합니다.
- 보기 불편하시면 변수로 나누는 것도 괜찮다고 생각해요.
4. api versioning
/api/v1
로 할까요? @NaMinhyeok 의견 부탁드립니다.
5. ddl 정의
jaknaeso-core
에src/java/resources/sql
디렉토리에 정리해둘까요?- 파일명은
{issueNumber}/{순서}_{작업유형}_{대상}.sql
제안드립니다. - ex) 15/001_create_table_member.sql
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/member/model/Member.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/member/model/Member.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/member/model/Member.java
Outdated
Show resolved
Hide resolved
.../src/test/java/org/nexters/jaknaesoserver/domain/member/repository/MemberRepositoryTest.java
Outdated
Show resolved
Hide resolved
.../src/test/java/org/nexters/jaknaesoserver/common/httpinterface/HttpInterfaceFactoryTest.java
Outdated
Show resolved
Hide resolved
jaknaeso-server/src/main/java/org/nexters/jaknaesoserver/controller/AuthController.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/auth/dto/KakaoLoginResponse.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/auth/dto/KakaoLoginCommand.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/common/support/model/BaseEntity.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다 ! 엄청 빠르게 하셨네요
일단 리베이스 하지 마시고.. 필요한 부분 수정하시고,제 작업이 너무 늦다면.. 애플로그인 공부 하시면 될 것 같아요 ! 제 작업은 내일아침이 오기전까지 마무리해두겠습니다.. 죄송해여 😭
제가 HttpInterface
에 대해서는 잘 몰라서 리뷰를 제대로 못달겠네요 공부를 해보도록 하겠습니다 ㅎㅎ
저는 api 테스트에 대한 뎁스는 근데 깊어져도 크게 가독성을 해친다거나 하진않는다고 생각해요 실제로 mockMvc테스트 시에는 어느부분에서 문제 발생하는지 쉽게 찾을 수 있고 코드가 문서가 된다기보단, 테스트 성공으로 문서가 되기 때문에 가독성 부분은 괜찮은 것 같습니다 !
저는 API 버저닝 api/v1
하면 좋을 것 같습니다 !
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/member/model/Member.java
Outdated
Show resolved
Hide resolved
void kakaoLoginFail() throws Exception { | ||
KakaoLoginRequest request = new KakaoLoginRequest("invalid access token"); | ||
|
||
given(authService.kakaoLogin(request.toServiceDto())).willThrow(RestClientException.class); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게도 예외를 던질 수가 있군요... willThrow
로 하는 방법이 있는지 몰랐네요
저는 테스트 할 때 사실 Request 부분에서 예외를 발생시켜서 실제로 프론트한테 내려가는 응답에 대해서 전부 테스트(예외 메시지, 에러코드, http status 코드 등)했었는데 해당 방법도 좋은 것 같네요!
.../src/test/java/org/nexters/jaknaesoserver/domain/member/repository/MemberRepositoryTest.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/auth/service/AuthService.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/auth/dto/KakaoLoginResponse.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/member/model/Member.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/common/support/model/BaseEntity.java
Outdated
Show resolved
Hide resolved
- 디렉토리 위치 변경 - 불필요한 Column 어노테이션 삭제 - createdId, updatedId 추가
BaseEntity - BaseTimeEntity - BaseAuditableEntity - BaseEntity : id - BaseTimeEntity : 타임스탬프 추적 - BaseAuditableEntity : 사용자 정보 추적
- org.nexters.jaknaesocore 테스트 실행 시 SpringBootConfiguration 찾지 못함 - 이를 해결하기 위해 루트 레벨에 SpringBootConfig 설정 파일 작성
8c325e7
to
371cf00
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨어요! 제가 언급한 것들 한 번 읽어보시고, 수정할 것 수정하시고! 머지하면 될 것 같습니다!!
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/SpringBootConfig.java
Outdated
Show resolved
Hide resolved
...so-core/src/main/java/org/nexters/jaknaesocore/domain/socialaccount/model/SocialAccount.java
Outdated
Show resolved
Hide resolved
...aeso-server/src/test/java/org/nexters/jaknaesocore/domain/auth/service/OauthServiceTest.java
Outdated
Show resolved
Hide resolved
jaknaeso-server/src/test/java/org/nexters/jaknaesoserver/controller/AuthControllerTest.java
Outdated
Show resolved
Hide resolved
jaknaeso-core/src/main/java/org/nexters/jaknaesocore/domain/auth/service/OauthService.java
Show resolved
Hide resolved
@CreatedBy | ||
@Column(updatable = false) | ||
private Long createdBy; | ||
|
||
@LastModifiedBy private Long updatedBy; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이런 형태로 @CreatedBy
를 사용하려면 AuditorAware
의 구현체를 만들어야된다고 하는데 없이도 사용이 가능한가요 ??
아니면 아직 관련 설정을 안해두신걸까요 ??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 @CreatedBy
를 처음 사용해봐서 필요한 부분인지 몰랐습니다 😂
구글링 해보니 시큐리티에서 authentication 객체를 가져오고 principal의 username을 사용하는 것 같은데 이렇게 구현하셨었나요??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 @CreatedBy
를 사용해본 적이 없어서 잘 모르겠지만, 조금 찾아보니 유정님이 제안하신대로 시큐리티에서 authentication 객체를 가져오고 principal의 username을 사용
하면 될 것 같아요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
사실 저도 사용해본적이 없어서 검색해보다가 알게되었는데 없는것 같아서 리뷰남겼습니다 🤣
principal
에 username
에 userid
가 들어있으니 이용하면 될 것 같아요 !!
social account의 member가 null일 수 있으므로 left join fetch 사용
작업 개요
카카오 로그인을 위한 http 클라이언트, service, controller를 작성했습니다.
작업 사항
고민한 점들(필수 X)
프로젝트 구조를 어떻게 가져하야 할지 모르겠습니다..! 더 좋은 방법이 있다면 말씀해주세요.
테스트 코드 클래스 외부에 테스트 데이터를 정의하고 싶지 않은데 어떻게 하면 좋을까요? (테스트 코드 내부에 테스트 데이터를 정의해야 테스트 코드를 한눈에 파악하고, 파일 삭제로 인한 테스트 실패가 발생하지 않을 거라고 생각했습니다)
HttpInterfaceFinder
:@HttpExchange
가 붙어있는 인터페이스 조회HttpInterfaceFactory
: 찾은 http interface를 위한 프록시 객체 생성 (+ 유효성 검사)HttpInterfaceFactory
: http interface 빈 객체 생성api 문서 작성 시 depth가 많이 깊어지는데 다음과 같이 작성하는 게 좋을까요?
/api
만 앞에 붙여줬습니다!@NaMinhyeok @pythonstrup
jwt provider 호출 로직을 제외하고 작성했습니다. 리베이스 해서 작업하면 될까요? (아니면 작업하시는 동안 리뷰 반영하거나 애플 로그인 공부하고 있겠습니다!!)