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/#121]: AuthServiceImpl 리팩토링: 메서드 명명 일관성 및 트랜잭션 관리 개선 #130

Merged
merged 2 commits into from
Sep 11, 2024
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -59,28 +59,28 @@ public SignUpResponseDto signUp(String authId, SignUpRequestDto request) {

User user = createUser(requestDto);

Token token = getToken(user);
Token token = getFullToken(user);

return createSignUpResponseDto(token, user);
}

@Override
@Transactional
public void signOut(long userId) {
val user = findUser(userId);
val user = findUserById(userId);
user.resetRefreshToken();
}

@Override
@Transactional
public void withdraw(long userId) {
val user = findUser(userId);
val user = findUserById(userId);
deleteUser(user);
}

@Override
public AccessTokenGetResponseDto reissueToken(String refreshToken) {
val user = findUser(refreshToken);
val user = findUserByRefreshToken(refreshToken);
Token accessToken = getAccessToken(user);
return AccessTokenGetResponseDto.of(accessToken);
}
Expand All @@ -101,12 +101,13 @@ public void connectFilterToUser(long userId, long filterId) {
userRepository.save(user);
}

private Optional<User> findUserByAuthIdAndType(String authId, AuthType authType) {
protected Optional<User> findUserByAuthIdAndType(String authId, AuthType authType) {
return userRepository.findByAuthIdAndAuthType(authId, authType);
}

private SignInResponseDto createSignInResponseForExistingUser(User user, String authId, AuthType authType) {
Token token = getToken(user);
@Transactional
protected SignInResponseDto createSignInResponseForExistingUser(User user, String authId, AuthType authType) {
Token token = getFullToken(user);
user.updateRefreshToken(token.getRefreshToken());
return SignInResponseDto.of(
token,
Expand All @@ -127,7 +128,8 @@ private String getAuthId(AuthType authType, String authAccessToken) {
};
}

private Token getToken(User user) {
@Transactional
protected Token getFullToken(User user) {
String accessToken = createAccessToken(new UserAuthentication(user.getId(), null, null));
String refreshToken = createRefreshToken(new UserAuthentication(user.getId(), null, null));

Copy link
Member

@JungYoonShin JungYoonShin Sep 9, 2024

Choose a reason for hiding this comment

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

해당 메서드는 protected로 선언이 되어있어서 트랜잭션이 정상적으로 적용되지 않을 것 같아요..!!

  • 트랜잭션은 프록시 기반으로 작동하여, private이나 protected로 선언할 경우 프록시 객체를 생성 후 메서드에 접근할 수가 없어서 트랜잭션이 적용되지 않는다고 합니다!
  • 또한 해당 getFullToken()을 호출하는 상위메서드인 signUp()에 트랜잭션이 걸려있기 때문에 트랙잭션 전파를 통해 하위 메서드에서도 상위 트랜잭션을 사용하게 되어 해당 메서드에서는 따로 트랜잭션을 걸지 않아도 될 것 같습니다!

👉 제가 참고한 블로그 첨부드립니다:)

  1. 외부 메서드, 내부 메서드에 대한 @Transactional 트랜잭션 적용 결과 테스트
  2. @Transactional 바르게 알고 사용하기

Expand Down Expand Up @@ -178,20 +180,22 @@ private String createRefreshToken(Authentication authentication) {
return jwtTokenProvider.generateToken(authentication, valueConfig.getRefreshTokenExpired());
}

private User findUser(long id) {
private User findUserById(long id) {
return userRepository.findById(id).orElseThrow(() -> new CustomException(INVALID_USER));
}

private User findUser(String refreshToken) {
private User findUserByRefreshToken(String refreshToken) {
return userRepository.findByRefreshToken(getTokenFromBearerString(refreshToken))
.orElseThrow(() -> new CustomException(INVALID_USER));
}


private String getTokenFromBearerString(String token) {
return token.replaceFirst(ValueConfig.BEARER_HEADER, ValueConfig.BLANK);
}

private void deleteUser(User user) {
@Transactional
protected void deleteUser(User user) {
userService.deleteUser(user);
}

Expand Down
Loading