# 회원탈퇴

가입한 고객이 X2BEE 쇼핑몰에서 탈퇴하기 위한 프로세스를 제공합니다. 이를 통해 고객은 개인정보 변경 페이지에 진입하여 탈퇴 요청을 진행하며, 진행 중인 주문, 클레임, 1:1 문의 건이 없을 시에 탈퇴가 완료됩니다.

***

## 주요 기능

* **탈퇴 가능여부 체크**
  * 현재 진행 중인 주문, 클레임, 1:1 문의 건이 있는지 확인하여 탈퇴 가능 여부를 체크합니다.
* **탈퇴 사유 선택**
  * 회원은 탈퇴 사유를 선택하여 탈퇴를 요청합니다.
* **탈퇴 처리**
  * 탈퇴 가능한 경우, 회원을 탈퇴 처리하고 개인정보를 마스킹 처리합니다.
  * 회원의 주문내역, 클레임내역, 1:1 문의, 상품 문의에 존재하는 회원 개인정보도 마스킹 처리됩니다.
* **이벤트 데이터베이스 처리**
  * 탈퇴 처리 후, 이벤트 데이터베이스에 회원 정보 삭제 처리를 요청합니다.

## 프로세스 정의

<figure><img src="/files/Fcx9FXoRmJHofFTS0DnF" alt=""><figcaption></figcaption></figure>

{% stepper %}
{% step %}

### 탈퇴 가능여부 조회

회원은 개인정보 수정 페이지를 통해 탈퇴 페이지에 접근할 수 있습니다. 탈퇴 처리 진행 전 탈퇴 가능여부를 체크합니다.

탈퇴가능여부 체크 항목:

* 진행 중인 주문 건이 존재하는지
* 진행 중인 반품/교환 건이 존재하는지
* 진행 중인 1:1 상담 건이 존재하는지
* 잔여 마일리지가 존재하는지

탈퇴 가능여부 조건을 충족하지 못하면 탈퇴 처리가 불가능합니다.
{% endstep %}

{% step %}

### 탈퇴 사유 선택

탈퇴 시 탈퇴 사유를 선택합니다. 탈퇴 사유는 다음 3가지 항목으로 분류됩니다.

* 개인정보 관련
* 사이트 이용관련
* 서비스 이용관련

탈퇴 사유를 1개라도 입력하지 않으면 탈퇴 처리가 불가능합니다.
{% endstep %}

{% step %}

### 탈퇴 처리

탈퇴 처리 시 앞서 체크한 탈퇴 가능여부를 다시 확인합니다.

처리 내용:

* 회원 정보 데이터베이스의 개인정보(신상 정보, 배송지 정보, 환불 계좌 정보)를 마스킹 처리합니다.
* 상품 API, 주문 API를 통해 상품문의 내역, 주문/클레임 내역, 1:1 문의 내역의 회원 개인정보를 마스킹 처리합니다.
* 이벤트 DB의 회원 정보를 삭제 요청합니다.
* 탈퇴 처리가 완료된 후 탈퇴 처리 완료를 알리는 알림톡과 메일을 발송합니다.
  {% endstep %}

{% step %}

### 토큰 삭제

탈퇴 처리가 완료된 후에는 기존 로그인 된 토큰을 삭제합니다.
{% endstep %}
{% endstepper %}

## API 기능 목록

<table><thead><tr><th width="94.555419921875">API</th><th width="393.3333740234375">설명</th><th width="98">Server</th><th width="89.111083984375">메소드</th><th>비고</th></tr></thead><tbody><tr><td>회원탈퇴 가능여부</td><td><p>로그인 한 회원에 대해 탈퇴가 가능한 상태인지 체크합니다.</p><ul><li>주문/배송 클레임 건수 조회: /api/order/v1/member/getOrdClaimCnt</li><li>진행중인 상담 건수 조회: /api/order/v1/customerservice/getNotCompletedInquiryCount</li></ul></td><td>Member</td><td>POST</td><td><a href="http://api.x2bee.com/content?msa=member&#x26;depth=%ED%9A%8C%EC%9B%90%ED%83%88%ED%87%B4&#x26;path=chkWithdrawalMember">🔗API 확인하기></a></td></tr><tr><td>회원탈퇴</td><td><p>회원이 탈퇴 요청 시 탈퇴 처리 기능을 제공합니다.</p><ul><li>상품Q&#x26;A 분리보관 처리: /api/goods/v1/qnaWithdraw/updateStopQna</li><li>이벤트 회원 분리보관 복원: /api/event/v1/common/doSeparate</li><li>탈퇴/휴면 회원 개인정보 이관 및 마스킹 처리: /api/order/v1/customerservice/withdrawalAndDormantMember</li><li>탈퇴 처리: /api/order/v1/member/withdrawalMemberOrderInfo</li></ul></td><td>Member</td><td>POST</td><td><a href="http://api.x2bee.com/content?msa=member&#x26;depth=%ED%9A%8C%EC%9B%90%ED%83%88%ED%87%B4&#x26;path=withdrawal">🔗API 확인하기></a></td></tr></tbody></table>

## 용어 정의

<table><thead><tr><th width="91.22216796875">명칭</th><th width="450.2222900390625">설명</th><th>비고</th></tr></thead><tbody><tr><td>분리보관</td><td>개인정보 보호법상 원칙적으로 삭제를 해야 하나 다른 <br>법률상의 규정에 따라 불가피하게 보관하는 경우</td><td>9/15 휴면회원 분리보관 법이 폐기된 상태임</td></tr></tbody></table>

## 기타 참고사항

* 회원 데이터베이스의 회원 개인정보를 마스킹 한 후 분리보관 데이터베이스(별개의 데이터베이스)에 탈퇴한 회원의 개인정보를 보관합니다.

  * 탈퇴한 회원은 일정 기간동안 재가입을 할 수 없도록 되어있기 때문에 분리보관 데이터베이스에 보관 (CI 값으로 확인)
  * ST009(회원 탈퇴 후 재가입 제한 일수) 코드 10번의 코드명으로 기간을 체크한 후, 회원 가입 시 고객의 CI가 분리보관 데이터베이스의 탈퇴 정보 테이블 내 존재하는 지 체크

* 탈퇴 처리 진행 중 실패할 시 회원 데이터베이스의 정보와 분리보관 데이터베이스의 정보가 전체 롤백 되어야 하기 때문에 트랜잭션 설정이 다르게 되어있습니다.
  * @Transactional(value = "chainedTransactionManager", rollbackFor = {Exception.class})
  * chainedTransactionManager : 분리보관 RW DB, order RW DB 함께 롤백

* 회원 데이터베이스 마스킹 처리 중 실패 시 전체 데이터를 롤백하지만 타 모듈(주문/상품/이벤트) 마스킹 처리 API 호출 중 에러 발생 시 롤백하지 않고 재처리할 수 있도록 재처리 관련 테이블에 데이터를 insert 합니다.

* 재처리 배치로 탈퇴 처리 시 실패한 타 모듈 API를 재실행해 타 모듈 데이터의 개인정보를 마스킹 처리합니다.

* 회원 데이터베이스 마스킹 항목:
  * 회원 기본정보 (회원명, 비밀번호, 전화번호, 휴대폰번호, 주소)
  * 회원 상세정보 (CI)
  * 회원 배송지정보 (수신자명, 주소 및 상세주소, 우편번호, 전화번호, 휴대폰번호, 배송메세지정보, 공동현관정보, 이메일주소)
  * 회원 환불계좌정보 (은행코드, 환불계좌번호, 예금주명)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tech.x2bee.com/api-guide/store-front/member/undefined-3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
