피드로 돌아가기
How to Model Teams Inside a Multi-Tenant Product
Dev.toDev.to
Backend

User-Membership 분리를 통한 다중 테넌트 권한 및 라이프사이클 설계

How to Model Teams Inside a Multi-Tenant Product

Oladele David2026년 6월 2일13intermediate

Context

User 테이블에 Role과 OrganizationId를 직접 포함하는 단순 모델의 한계로 인해 1인 다중 조직 가입 불가 및 권한 범위 설정의 제약 발생. 멤버십 상태 변화에 따른 세밀한 제어 없이 단순 삭제로 처리함에 따른 감사(Audit) 데이터 유실 문제 분석.

Technical Solution

  • User(Identity)와 TeamMember(Relationship) 엔티티를 완전히 분리하여 다중 조직 소속 구조 설계
  • MembershipStatus를 PENDING, ACTIVE, SUSPENDED, REMOVED 4단계로 정의하여 라이프사이클 기반 접근 제어 구현
  • Role-Permission 매핑 테이블을 통한 도메인 기반 권한 번들링 및 Platform/Organization Scope 분리
  • Permission Resolution 단계에서 status === 'active' 체크를 강제하여 Suspended 상태의 권한 실행을 원천 차단
  • 멤버십 삭제 대신 REMOVED 상태 전환을 통한 불변의 감사 기록 유지 체계 구축

- User 테이블에서 Role이나 OrganizationId 컬럼을 제거하고 별도의 Membership 테이블로 분리했는가? - 권한 확인 로직 최상단에 멤버십 상태(Status) 체크 가드가 포함되어 있는가? - 단순 삭제(Hard Delete) 대신 라이프사이클 상태 변경(Soft State Transition)을 통해 감사 추적성을 확보했는가? - Role이 특정 조직에 종속된 Scope를 가지며 플랫폼 전체 권한과 명확히 구분되는가?

원문 읽기