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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions