5.01 사용자 도메인 개요
핵심 개념과 역할
사용자 도메인은 도서관 시스템의 근간을 이루는 핵심 도메인입니다. 이 도메인은 도서관을 이용하는 회원과 도서관을 운영하는 사서를 모두 포함하며, 이들의 신원, 권한, 상태를 관리합니다.
주요 개념
-
사용자(User): 시스템의 모든 사용자를 대표하는 추상적인 개념입니다. 사용자는 다음과 같은 공통 속성을 가집니다:
- 고유 식별자(UserId)
- 사용자명(Username)
- 이메일(Email)
- 비밀번호(Password)
- 실명(FullName)
- 상태(UserStatus)
-
회원(Member): 도서관 서비스를 이용하는 최종 사용자입니다. 회원은 다음과 같은 특징을 가집니다:
- 회원 등급(MembershipTier)
- 대출 권한과 한도
- 연체 및 제재 이력
- 활동 이력
-
사서(Librarian): 도서관을 운영하고 관리하는 직원입니다. 사서는 다음과 같은 특징을 가집니다:
- 직원 ID(EmployeeId)
- 관리 권한
- 업무 이력
도메인 규칙
사용자 도메인은 다음과 같은 핵심 비즈니스 규칙을 구현합니다:
-
회원 관리 규칙:
- 동일한 이메일로 중복 가입할 수 없습니다
- 회원 등급은 이용 실적에 따라 변경됩니다
- 회원의 현재 상태(활성/정지/탈퇴 등)를 관리합니다
-
사서 관리 규칙:
- 사서는 시스템 내 특별 권한 레벨을 가집니다
- 사서는 회원의 등급을 관리할 수 있습니다
-
보안 규칙:
- 비밀번호는 안전한 방식으로 해시화하여 저장합니다
- 개인정보는 암호화하여 보관합니다
- 중요 작업은 감사 로그를 남깁니다
도메인 모델의 경계
사용자 도메인은 다음과 같은 경계를 가집니다:
포함되는 책임:
-
사용자 생명주기 관리:
- 회원 가입과 탈퇴
- 사서 등록과 해임
- 계정 활성화/비활성화
-
인증과 인가:
- 로그인 처리
- 권한 검증
- 세션 관리
-
회원 등급 관리:
- 등급 산정과 변경
- 혜택 관리
- 이용 실적 관리
제외되는 책임:
-
도서 관리:
- 도서 등록과 폐기
- 도서 분류와 카탈로그 관리
-
대출 관리:
- 대출과 반납 처리
- 연체 관리
- 예약 관리
다른 도메인과의 관계
사용자 도메인은 다른 도메인과 다음과 같이 상호작용합니다:
1. 도서 도메인과의 관계:
- 사서가 도서를 관리하는 주체로서의 정보를 제공합니다
- 회원이 도서를 검색하고 열람하는 주체로서의 정보를 제공합니다
- 도서 관리를 위한 사서의 권한 정보를 제공합니다
2. 대출 도메인과의 관계:
- 회원의 기본 정보와 상태 정보를 제공합니다
- 대출 도메인의 정책에 따른 회원 자격 검증을 지원합니다
- 대출 도메인으로부터 회원의 대출/연체 상태 변경 이벤트를 수신합니다
3. 알림 도메인과의 관계:
- 회원 가입 완료 알림
- 등급 변경 알림
- 연체 경고 알림
도메인 이벤트
사용자 도메인은 다음과 같은 도메인 이벤트를 발생시킵니다:
-
회원 관련 이벤트:
- MemberRegisteredEvent: 회원 가입 완료
- MembershipTierChangedEvent: 회원 등급 변경
- MemberDeactivatedEvent: 회원 자격 정지
-
사서 관련 이벤트:
- LibrarianRegisteredEvent: 사서 등록
- LibrarianDeactivatedEvent: 사서 해임
기술적 고려사항
1. 보안과 개인정보:
- 비밀번호 해시화(BCrypt 등 사용)
- 개인정보 암호화 저장
- 접근 제어와 권한 관리
- 감사 로그 기록
2. 성능과 확장성:
- 사용자 세션 관리
- 캐시 전략
- 동시성 제어
- 데이터 정합성 보장
3. 테스트와 유지보수:
- 단위 테스트 전략
- 통합 테스트 시나리오
- 테스트 데이터 관리
- 코드 품질 관리
구현 전략
사용자 도메인은 다음과 같은 전략으로 구현됩니다:
1. 계층화된 아키텍처:
- 도메인 모델 (User, Member, Librarian)
- 도메인 서비스 (PasswordHasher, MembershipEvaluator)
- 리포지토리 (UserRepository)
- 애플리케이션 서비스 (UserService, MemberService)
2. 객체지향 원칙 적용:
- 풍부한 도메인 모델
- 캡슐화와 정보 은닉
- 인터페이스와 구현의 분리
- 단일 책임 원칙 준수
3. 패턴 활용:
- Result 타입을 통한 오류 처리
- 값 객체를 통한 유효성 검증
- 명세 패턴을 통한 비즈니스 규칙 구현
- 도메인 이벤트를 통한 느슨한 결합
결론
사용자 도메인은 도서관 시스템의 핵심 도메인으로, 회원과 사서의 관리를 담당합니다. 이 도메인은 명확한 경계와 책임을 가지며, 다른 도메인과 유기적으로 상호작용합니다. 구현에 있어 보안, 확장성, 유지보수성을 고려하며, 도메인 주도 설계의 원칙을 적극적으로 활용합니다.