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

[BE] issue372: Github Token 받아오는 과정을 트랜잭션에서 제외 #373

Merged
merged 6 commits into from
Sep 30, 2022

Conversation

tco0427
Copy link
Collaborator

@tco0427 tco0427 commented Sep 21, 2022

요약

Github Token 받아오는 과정을 트랜잭션에서 제외

세부사항

  • 프로그램의 코드가 DB 커넥션을 가지고 있는 범위를 최소화
  • 트랜잭션이 활성화 되어 있는 프로그램의 범위를 최소화

RealMySQL8.0 책의 5.1.2 절을 보면 트랜잭션을 꼭 필요한 최소의 코드에만 적용하는 것이 좋다라는 문장으로 해당 이슈와 관련된 내용을 이야기한다.
현재 우리의 로그인 과정, 즉, AuthServicecreateToken 을 보면 전체 로직이 트랜잭션으로 묶이게 된다.
스프링에서 AOP 를 통해서 제공하는 @Transactional 어노테이션의 경우 메소드 시작과 동시에 트랜잭션을 시작하고, 해당 메소드가 끝날 때 트랜잭션이 끝나면서 commit 을 하게 된다. 하지만 우리에게 정말 트랜잭션이 필요한 부분은 다음 코드 부분이다.
따라서 외부 네트워크와 통신하는 작업을 하는 oAuthClient 를 우리 트랜잭션에서 제거하여 불필요한 커넥션을 가지고 있는 범위와 트랜잭션 활성화 범위를 제거한다.

        final MemberResponse memberResponse = memberService.saveOrUpdate(githubProfileResponse.toMember());
        final Long memberId = memberResponse.getId();

        final Optional<Token> token = tokenRepository.findByMemberId(memberId);
        final TokensResponse tokenResponse = tokenProvider.createToken(memberId);

        if (token.isPresent()) {
            token.get().updateRefreshToken(tokenResponse.getRefreshToken());
            return tokenResponse;
        }

        tokenRepository.save(new Token(memberId, tokenResponse.getRefreshToken()));

        return tokenResponse;

변경 이후

스크린샷 2022-11-10 09 58 27

스크린샷 2022-11-10 09 58 33

참고 사이트 : 서비스로직과 트랜잭션 분리

close #372

@tco0427 tco0427 added 🚀 feature New feature or request 🖥 backend New backend feature ⛑ performance improvement of performance labels Sep 21, 2022
@tco0427 tco0427 self-assigned this Sep 21, 2022
@tco0427 tco0427 linked an issue Sep 21, 2022 that may be closed by this pull request
@2022-moamoa

This comment has been minimized.

@2022-moamoa

This comment has been minimized.


@PostMapping("/api/auth/login")
public ResponseEntity<AccessTokenResponse> login(@RequestParam final String code) {
final TokensResponse tokenResponse = authService.createToken(code);
final GithubProfileResponse profile = oAuthClient.getProfile(code);
final TokensResponse tokenResponse = authService.createToken(profile);
Copy link
Collaborator

Choose a reason for hiding this comment

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

github 프로필 정보를 받아 오는 부분을 분리하셨군요 👍

…oamoa into feat/372-improvement-login

# Conflicts:
#	backend/src/main/java/com/woowacourse/moamoa/auth/controller/AuthController.java
#	backend/src/main/java/com/woowacourse/moamoa/auth/service/AuthService.java
#	backend/src/test/java/com/woowacourse/moamoa/auth/controller/AuthControllerTest.java
@tco0427 tco0427 merged commit 28c0d44 into develop Sep 30, 2022
@tco0427 tco0427 deleted the feat/372-improvement-login branch September 30, 2022 02:24
@2022-moamoa
Copy link

2022-moamoa bot commented Sep 30, 2022

Passed

Analysis Details

0 Issues

  • Bug 0 Bugs
  • Vulnerability 0 Vulnerabilities
  • Code Smell 0 Code Smells

Coverage and Duplications

  • Coverage No coverage information (71.40% Estimated after merge)
  • Duplications No duplication information (0.40% Estimated after merge)

Project ID: woowacourse-teams_2022-moamoa_AYKvd_z4VbW_bWBvgn13

View in SonarQube

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🖥 backend New backend feature 🚀 feature New feature or request ⛑ performance improvement of performance
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] Github Token 받아오는 과정을 트랜잭션에서 제외
4 participants