책너두 (도메인 주도 설계로 시작하는 마이크로서비스 개발) 33일차 (~283p)

요약

  • 7장. 사례연구 - 백엔드 마이크로서비스 구현에 대한 내용
    • 사용자 마이크로서비스 개발
      • 사용자 마이크로서비스의 기능 소개
      • API 설계
      • 도메인 모델링
      • 유스케이스 흐름
      • 내부 영역 - 도메인 모델 개발
      • 내부 영역 - 서비스 개발
      • 내부 영역 - 리포지토리 개발

메모

7.2 사용자 마이크로서비스 개발

  • JHipster를 사용하여 게이트웨이 서비스를 생성하면, 사용자 기능이 자동으로 구현됨.
    • JHipster의 게이트웨이는 프런트엔드도 담당하기 때문에 회원가입, 로그인, 회원관리 등 기본적으로 갖추어야 할 사용자 기능을 모두 포함하고 있음.
  • 추가로, 스프링 시큐리티(Spring Security)를 활용한 보안, 권한 관리도 제공하며, 이메일 인증도 제공함.
  • 그러나, 회원 가입 시 사용되는 이메일 인증의 경우 외부 이메일 서비스를 연결해야 사용할 수 있기 때문에 이메일 인증 메서드는 모두 주석으로 처리했음.

7.2.1 사용자 마이크로서비스의 기능 소개

  • 사용자 마이크로서비스에서는 JHipster가 제공하는 기본적인 기능 중 하나인 사용자 역할 관리와, 도서 대출 서비스의 연체료 처리를 위해 추가로 구현된 포인트 관리 기능에 대해 알아봄.
    • 포인트 관리 기능은 포인트 부여와 적립, 결제 등을 구현함.
  • 먼저 사용자 역할 관리 기능이 어떻게 구현되어 있는지 자세히 살펴볼 예정이며, 그 다음으로 사용자 생성 기능과 연계된 도서 대출 발급, 포인트 관리 기능에 대해 알아봄.

7.2.2 API 설계

  • 용자 마이크로서비스의 두 가지 주요 API
    1. 사용자 정보 수정 API
      • 사용자 정보가 수정될 때 호출됨.
      • 요청 URI는 "/users"이며, 사용하는 HTTP 메서드는 PUT이다.
      • ex) 사용자의 일련번호, 로그인 아이디, 이름, 성, 이메일 주소, 이미지명, 활성화 여부, 언어 구분, 권한, 포인트 등을 포함한 UserDTO를 requestBody로 보냄.
      • 중요한 점은, 이 API에 대한 접근은 ADMIN 권한을 가진 사용자만 가능하다는 점.
    2. 포인트 결제 API
      • 도서 대출 서비스의 연체 해제 요청 시 호출됨.
      • 요청 URI는 "/users/latefee"이며, 사용하는 HTTP 메서드 역시 PUT이다.
      • 사용자 일련번호와 연체료를 포함한 LatefeeDTO를 요청 파라미터로 받음.
      • 이 API는 사용자의 연체료만큼 포인트를 결제하는 기능을 수행함.

7.2.3 도메인 모델링

  • 사용자 마이크로서비스의 도메인 모델은 사용자 클래스(User)권한 클래스(Authority)로 구성됨.
    • 사용자 클래스는 애그리거트 루트와 엔티티를 나타내며, 권한 클래스 역시 엔티티임.
    • 사용자와 권한은 다대다 관계를 가지고 있음.
  • 사용자의 권한은 'ROLE_ADMIN'과 'ROLE_USER'로 구분함.
    • 'ROLE_ADMIN'은 관리자 권한을, 'ROLE_USER'는 일반 사용자 권한을 나타냄.
      • 사용자가 처음 생성될 때는 기본적으로 'ROLE_USER' 권한이 부여됨.
      • 그리고 'ROLE_ADMIN', 즉 관리자 권한은 오직 관리자에 의해 부여받을 수 있음.

7.2.4 유스케이스 흐름

  • 유스케이스 흐름인 사용자 생성, 포인트 적립, 그리고 결제에 대한 내용임
  • 사용자 생성 유스케이스는 사용자가 생성될 때 Rental이 생성되고 포인트가 부여되는 과정을 나타냄.
    • 사용자는 사용자 서비스에서 생성되지만, Rental은 대출 서비스에서 생성됨.
  • 포인트 적립 및 결제 유스케이스는 대출 마이크로서비스에서 발생함.
    • 대출 또는 반납이 이루어질 때마다 포인트가 적립되며, 대출 불가 상태를 해제하기 위해 포인트 결제 요청이 대출 서비스로부터 발생함.
    • 이 두 유스케이스는 모두 대출 서비스의 요청에 의해 발생함.
    • 포인트 적립은 비동기 호출로 이루어지고, 포인트 결제는 동기 호출로 이루어짐.

7.2.5 내부 영역 - 도메인 모델 개발

  • 도메인 모델은 두 개의 엔티티로 구성되어 있음
    • 사용자(User) 엔티티
    • 권한(Authority) 엔티티
  • 이 두 엔티티는 각각 사용자와 권한을 표현하는 클래스로서, 데이터베이스 테이블과 매핑되어 사용자 및 권한 정보를 관리함.

7.2.6 내부 영역 - 서비스 개발

  • 사용자 서비스의 구현에 초점을 맞춤.
    • 특히 사용자 정보 수정이 어떻게 수행되는지에 대해 설명함.
  • 사용자 정보를 수정하는 updateUser 메서드.
    • 이 메서드는 주어진 UserDTO를 이용하여 사용자의 정보를 수정함.
    • 수정되는 정보는 사용자 아이디, 로그인명, 이름, 이메일, 이미지 URL, 활성화 상태, 언어 설정, 그리고 권한에 관한 정보 등을 포함함.

7.2.7 내부 영역 - 리포지토리 개발

  • UserRepository 인터페이스는 다양한 메서드를 제공하여 주로 사용자 관리와 관련된 작업을 수행함.

댓글

Designed by JB FACTORY