Skip to content

feat: 회원탈퇴 API 개발#49

Merged
gnsdp99 merged 13 commits intodevfrom
feat/#46
Aug 12, 2025
Merged

feat: 회원탈퇴 API 개발#49
gnsdp99 merged 13 commits intodevfrom
feat/#46

Conversation

@gnsdp99
Copy link
Collaborator

@gnsdp99 gnsdp99 commented Aug 12, 2025

Resolved Issue

PR Description

  • 회원탈퇴 API를 개발했습니다.

User 엔티티 필드 추가

  • 탈퇴 여부를 기록하는 isDeleted 필드를 추가했습니다. enum으로 관리할 필요성을 못느껴 저장 공간과 쿼리 성능을 위해 boolean을 사용했습니다.
  • 탈퇴 시각을 기록하기 위해 deletedDate 필드를 추가했습니다.

Time 인터페이스 생성

  • 기존에는 하위 계층의 테스트 용이성을 위해 상위 계층인 Controller에서 LocalDateTime.now()를 매개변수로 넘겨주도록 구현했었습니다. 그런데 이 방식은 Controller 계층이 아직 테스트하기 어렵다는 문제가 있고, 매개변수를 계속 넘겨줘야 하는 번거로움이 있습니다.
  • 이를 해결하기 위해 각 계층에서 인터페이스를 참조해 사용하는 방식으로 변경했습니다.
// before
@Transactional
public void withdraw(final Long userId, final LocalDateTime deletedDate) {
    final User user = this.getUserById(userId);
    user.withdraw(deletedDate);
}

// after
private final Time time;

@Transactional
public void withdraw(final Long userId) {
    final User user = this.getUserById(userId);
    user.withdraw(this.time.now());
}

테스트 픽스처 메서드 생성

  • 기존에는 테스트 코드에서 엔티티 객체를 생성할 때 엔티티 내부의 정적 팩터리 메서드를 그대로 사용했습니다. 그러다 보니 UserRole이 고정되는 등 유연성이 떨어졌습니다.
  • 이를 해결하기 위해 테스트 픽스처 메서드를 생성했습니다. 이때 @Builder를 열어줘야 하는데, access = AccessLevel.PACKAGE로 접근 제한을 최소화했습니다.

Others

  • 회원탈퇴와 연관된 다른 로직(문서, 일정 삭제 등)은 추후 추가할 예정입니다.

@gnsdp99 gnsdp99 merged commit 9dcc8bd into dev Aug 12, 2025
3 checks passed
@gnsdp99 gnsdp99 deleted the feat/#46 branch August 12, 2025 03:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: 회원탈퇴 API 개발

2 participants