2020.07.16 OAuth 로그인 이해 및 구현2 - woowacourse-teams/2020-devbie GitHub Wiki
작성자 : 소니
Github OAuth 로그인 Devbie에 적용
- 5인 페어 프로그래밍 진행 (드라이버: 앨런)
- 이어서 구현할 부분
- 사용자 정보 DB에 저장
- 자체 Token 생성 후 쿠키에 담아 브라우저에 전달
Entity를 변경하는 것 보다 DTO를 변경하는 편이 낫다.
참고 링크: 안정된 의존 관계 원칙 (Stable Dependencies Principle, SDP)
- DTO는 변경 가능성이 높기 때문이다.
- 변경 가능성이 높은 쪽에서 변경 가능성이 낮은 쪽을 가져와 사용하는게 낫다.
Entity.of(DTO)
를 하기 보다DTO.toEntity()
를 하는게 더 낫다.
userRepository.findByOAuthId(userInfoResponse.getId())
.map(user -> user.update(userInfoREsponse))
.orElse(userInfoResponse.toEntity());
네이밍 컨벤션
- user 변수명이 중복되는 문제 (리턴값 변수명, 람다식 변수명)
- 되도록이면 r,u 같이 축약해서 변수명을 쓰지 않는다.
- 단, 람다식네 변수명에 특별한 의미가 없거나 의미가 분명한 경우는 아래와 같이 축약도 가능하다
User user = userRepository.findByOAuthId(userInfoResponse.getId())
.map(u -> u.update(userInfoREsponse))
.orElse(userInfoResponse.toEntity());
Entity 필드, Repository 메서드 네이밍으로 인한 오류
- Entity에 필드 이름을
oAuthId
로 하면 - repository에서
findByOAuthId
로 해야한다.- 이때 O다음에 바로 A라는 대문자가 나와서 카멜 케이스 오류가 난다.
- 해결
- Entity에 필드 이름을
oauthId
로 해주고 - repository에서
findByOauthId
로 하니 해결되었다.
- Entity에 필드 이름을
oAuthService vs UserService
- oAuth와 User 중 누가 주체가 되어 참조할 것인가에 대한 논의
- 현재는 AuthController에서 userService를 참조해서 사용하고 있다.
- UserController에서 AuthService를 사용하는게 어떠냐는 의견
- jason 코치에게 물어보기
@Transactional
달아 준다.
DB로직이 있는 service 만들때 - 코드 포맷팅은 naver-convention → 오후에 다같이 적용
- use tabs 옵션 체크해체
JWTcreateToken 할 때 auto_increment_id로 하는 것과 email로 하는 것의 차이는?
- 단순히 고유한 값이면 아무거나 해도 상관 없나?
토큰을 쿠키가 아닌 HTTP Header 로 전달
- 쿠키로만 토큰을 전달하면 web에 의존적이게 된다.
- 모바일 앱까지 고려하면 HTTP Header를 통해 전달하는 게 더 낫다고 판다.
정적 팩토리 메서드
- 인자값이 한 개라면 from
- 두 개 이상이면 of
디미터 법칙
- getter를 연속으로 쓰는 것 지양
- 라이브러리는 그대로 쓰고 우리가 만든 도메인에서는 디미터 법칙을 최대한 지킨다.
.
을 한줄에 여러개로 쓰지 않고.
마다 엔터로 구분한다.- 예외사항) if 문에서는 엔터로 구분x
Custom Exception
- 추후 컨벤션 짜서 설계하기