5.01 사용자 도메인 개요

5.01 사용자 도메인 개요

핵심 개념과 역할

사용자 도메인은 도서관 시스템의 근간을 이루는 핵심 도메인입니다. 이 도메인은 도서관을 이용하는 회원과 도서관을 운영하는 사서를 모두 포함하며, 이들의 신원, 권한, 상태를 관리합니다.

주요 개념

  1. 사용자(User): 시스템의 모든 사용자를 대표하는 추상적인 개념입니다. 사용자는 다음과 같은 공통 속성을 가집니다:

    • 고유 식별자(UserId)
    • 사용자명(Username)
    • 이메일(Email)
    • 비밀번호(Password)
    • 실명(FullName)
    • 상태(UserStatus)
  2. 회원(Member): 도서관 서비스를 이용하는 최종 사용자입니다. 회원은 다음과 같은 특징을 가집니다:

    • 회원 등급(MembershipTier)
    • 대출 권한과 한도
    • 연체 및 제재 이력
    • 활동 이력
  3. 사서(Librarian): 도서관을 운영하고 관리하는 직원입니다. 사서는 다음과 같은 특징을 가집니다:

    • 직원 ID(EmployeeId)
    • 관리 권한
    • 업무 이력

도메인 규칙

사용자 도메인은 다음과 같은 핵심 비즈니스 규칙을 구현합니다:

  1. 회원 관리 규칙:

    • 동일한 이메일로 중복 가입할 수 없습니다
    • 회원 등급은 이용 실적에 따라 변경됩니다
    • 회원의 현재 상태(활성/정지/탈퇴 등)를 관리합니다
  2. 사서 관리 규칙:

    • 사서는 시스템 내 특별 권한 레벨을 가집니다
    • 사서는 회원의 등급을 관리할 수 있습니다
  3. 보안 규칙:

    • 비밀번호는 안전한 방식으로 해시화하여 저장합니다
    • 개인정보는 암호화하여 보관합니다
    • 중요 작업은 감사 로그를 남깁니다

도메인 모델의 경계

사용자 도메인은 다음과 같은 경계를 가집니다:

포함되는 책임:

  1. 사용자 생명주기 관리:

    • 회원 가입과 탈퇴
    • 사서 등록과 해임
    • 계정 활성화/비활성화
  2. 인증과 인가:

    • 로그인 처리
    • 권한 검증
    • 세션 관리
  3. 회원 등급 관리:

    • 등급 산정과 변경
    • 혜택 관리
    • 이용 실적 관리

제외되는 책임:

  1. 도서 관리:

    • 도서 등록과 폐기
    • 도서 분류와 카탈로그 관리
  2. 대출 관리:

    • 대출과 반납 처리
    • 연체 관리
    • 예약 관리

다른 도메인과의 관계

사용자 도메인은 다른 도메인과 다음과 같이 상호작용합니다:

1. 도서 도메인과의 관계:

  • 사서가 도서를 관리하는 주체로서의 정보를 제공합니다
  • 회원이 도서를 검색하고 열람하는 주체로서의 정보를 제공합니다
  • 도서 관리를 위한 사서의 권한 정보를 제공합니다

2. 대출 도메인과의 관계:

  • 회원의 기본 정보와 상태 정보를 제공합니다
  • 대출 도메인의 정책에 따른 회원 자격 검증을 지원합니다
  • 대출 도메인으로부터 회원의 대출/연체 상태 변경 이벤트를 수신합니다

3. 알림 도메인과의 관계:

  • 회원 가입 완료 알림
  • 등급 변경 알림
  • 연체 경고 알림

도메인 이벤트

사용자 도메인은 다음과 같은 도메인 이벤트를 발생시킵니다:

  1. 회원 관련 이벤트:

    • MemberRegisteredEvent: 회원 가입 완료
    • MembershipTierChangedEvent: 회원 등급 변경
    • MemberDeactivatedEvent: 회원 자격 정지
  2. 사서 관련 이벤트:

    • LibrarianRegisteredEvent: 사서 등록
    • LibrarianDeactivatedEvent: 사서 해임

기술적 고려사항

1. 보안과 개인정보:

  • 비밀번호 해시화(BCrypt 등 사용)
  • 개인정보 암호화 저장
  • 접근 제어와 권한 관리
  • 감사 로그 기록

2. 성능과 확장성:

  • 사용자 세션 관리
  • 캐시 전략
  • 동시성 제어
  • 데이터 정합성 보장

3. 테스트와 유지보수:

  • 단위 테스트 전략
  • 통합 테스트 시나리오
  • 테스트 데이터 관리
  • 코드 품질 관리

구현 전략

사용자 도메인은 다음과 같은 전략으로 구현됩니다:

1. 계층화된 아키텍처:

  • 도메인 모델 (User, Member, Librarian)
  • 도메인 서비스 (PasswordHasher, MembershipEvaluator)
  • 리포지토리 (UserRepository)
  • 애플리케이션 서비스 (UserService, MemberService)

2. 객체지향 원칙 적용:

  • 풍부한 도메인 모델
  • 캡슐화와 정보 은닉
  • 인터페이스와 구현의 분리
  • 단일 책임 원칙 준수

3. 패턴 활용:

  • Result 타입을 통한 오류 처리
  • 값 객체를 통한 유효성 검증
  • 명세 패턴을 통한 비즈니스 규칙 구현
  • 도메인 이벤트를 통한 느슨한 결합

결론

사용자 도메인은 도서관 시스템의 핵심 도메인으로, 회원과 사서의 관리를 담당합니다. 이 도메인은 명확한 경계와 책임을 가지며, 다른 도메인과 유기적으로 상호작용합니다. 구현에 있어 보안, 확장성, 유지보수성을 고려하며, 도메인 주도 설계의 원칙을 적극적으로 활용합니다.