티스토리 뷰

카테고리 없음

회원 데이터 관리 시스템 개선: soft delete 패턴 도입기

YG - 96년생 , 강아지 있음, 개발자 희망 2025. 4. 29. 03:34

회원 데이터 관리 시스템 개선: soft delete 패턴 도입기

안녕하세요! 오늘은 SNS 어시스턴트 서비스의 회원 데이터 관리 시스템을 개선한 경험을 공유하려고 합니다. 특히 회원 탈퇴 처리 방식을 하드 삭제(hard delete)에서 소프트 삭제(soft delete)로 전환한 과정과 그 이유에 대해 설명드리겠습니다.

 

전에는 하드삭제와 소프트삭제가 어떻게 사용될 수 있는지 잘 몰랐는데 이번 기회에 활용하는 방법을 알게 되어 좋았습니다.

 

기존 시스템의 문제점

기존에 저희 서비스는 회원 탈퇴 요청 시 데이터베이스에서 해당 사용자의 모든 데이터를 완전히 삭제하는 방식을 사용했습니다. 이 방식은 간단하고 직관적이었지만, 다음과 같은 문제점들이 발견되었습니다:

  1. 프리미엄 이용권 남용: 탈퇴 후 재가입 시 다시 하루 무료 프리미엄 이용권이 부여되어, 일부 사용자들이 이를 반복적으로 악용하는 사례가 발생했습니다.
  2. 데이터 분석의 한계: 완전 삭제 방식은 탈퇴한 회원에 대한 통계 데이터를 수집하기 어렵게 만들었습니다. 특히 '얼마나 많은 회원이 탈퇴했는지', '탈퇴한 회원들의 특성은 무엇인지' 등의 중요한 인사이트를 얻기 어려웠습니다.
  3. 사용자 경험 저하: 실수로 탈퇴한 사용자가 다시 가입하려 할 때, 이전의 모든 데이터와 설정이 사라져 있어 불편함을 초래했습니다.

soft delete 패턴 도입

이러한 문제들을 해결하기 위해, 저희는 deletedAt 필드를 활용한 soft delete 패턴을 도입했습니다. 회원이 탈퇴할 때 실제로 데이터를 삭제하는 대신, 해당 시점에 deletedAt 타임스탬프를 기록하는 방식입니다.

@Column({ type: 'timestamp', nullable: true })
@Field(() => Date, { nullable: true })
deletedAt: Date; // 유저가 탈퇴한 날짜 기록

이 필드가 null이 아닌 경우 해당 계정은 탈퇴 처리된 것으로 간주합니다.

회원 탈퇴 로직 변경

기존의 deleteAccount 메서드는 사용자 데이터를 데이터베이스에서 완전히 삭제했지만, 새로운 구현에서는 deletedAt 필드만 업데이트합니다:

// 변경 전: 사용자 데이터 완전 삭제
await this.users.delete(userId);

// 변경 후: deletedAt 필드 설정
user.deletedAt = new Date();
await this.users.save(user);

회원 가입 로직 개선

회원 가입 로직에서도 중요한 변화가 있었습니다. 기존에 탈퇴했던 사용자가 재가입할 경우 deletedAt 필드를 확인하여 프리미엄 이용권 남용을 방지합니다:

if (existUser) {
  if (existUser.deletedAt) {
    existUser.password = password;
    existUser.deletedAt = null; // deletedAt 필드 초기화
    await this.users.save(existUser); // 데이터베이스에 변경사항 저장
  }

  const result = await this.login(
    { email, password, rememberMe: true },
    res,
    cookieDomain,
  );

  return result;
}

이렇게 변경함으로써, 탈퇴했던 사용자가 재가입할 때 기존 계정이 복구되고 새로운 프리미엄 이용권은 부여되지 않습니다.

이점과 결과

이러한 변경으로 인해 다음과 같은 이점을 얻었습니다:

  1. 데이터 분석 강화: 탈퇴한 사용자의 데이터를 보존함으로써, 사용자 이탈 원인 분석 및 서비스 개선에 필요한 인사이트를 얻을 수 있게 되었습니다.
  2. 프리미엄 이용권 남용 방지: 탈퇴 후 재가입을 통한 무료 프리미엄 이용권 반복 획득을 효과적으로 차단했습니다.
  3. 사용자 경험 개선: 실수로 탈퇴한 사용자도 기존 데이터를 유지한 채 복구할 수 있게 되었습니다.
  4. 관리 효율성 증대: 사용자 관리가 더 체계적이고 투명해져, 고객 서비스 대응도 향상되었습니다.

결론

soft delete 패턴 도입은 단순한 기술적 변경 이상의 가치를 가져왔습니다. 사용자 데이터 관리 전략을 개선함으로써 비즈니스 요구사항을 더 효과적으로 충족시키고, 사용자 경험도 향상시킬 수 있었습니다.

 

이러한 패턴은 데이터 무결성을 유지하면서도 유연한 사용자 관리가 필요한 많은 웹 서비스에 유용하게 적용될 수 있을 것입니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함