Skip to content

oauth revoke transaction issue #259

@huhdy32

Description

@huhdy32

high

회원 탈퇴 처리 시 데이터베이스에서 회원을 먼저 삭제하고 OAuth 연동을 해제하고 있습니다. 이 순서는 몇 가지 잠재적인 문제를 야기할 수 있습니다.

  1. 긴 트랜잭션: revoke는 외부 네트워크 호출을 포함하므로 시간이 오래 걸릴 수 있습니다. 이 시간 동안 데이터베이스 트랜잭션이 열려있게 되어 커넥션 풀 고갈이나 다른 트랜잭션과의 충돌을 유발할 수 있습니다.
  2. 불일치 상태: memberRepository.delete(member)가 커밋된 후, revoke 호출 전에 애플리케이션이 비정상 종료되면, 우리 시스템에서는 회원이 삭제되었지만 OAuth 연동은 해제되지 않은 불일치 상태가 발생합니다.

OAuth 연동 해제를 먼저 시도하고, 성공했을 때 데이터베이스에서 회원을 삭제하는 순서로 변경하는 것을 권장합니다. 이렇게 하면 외부 호출로 인한 트랜잭션 대기 시간을 줄이고, 실패 시 상태를 더 일관되게 관리할 수 있습니다.

// oauth 삭제 실패했을 경우
		if (!oAuthClientManager.revoke(member)) {
			log.info("[MemberDeleteService.delete] failed to revoke OAuth client for member - memberId: {}", member.getId());
			throw new UnRegisterMemberException("oauth 연동 해제중 에러 발생했습니다. 잠시 후 다시 시도해주세요");
		}

		memberRepository.delete(member);

Originally posted by @gemini-code-assist[bot] in #258 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions