요약
- 7장. 사례연구 - 백엔드 마이크로서비스 구현에 대한 내용
- 사용자 마이크로서비스 개발
- 사용자 마이크로서비스의 기능 소개
- API 설계
- 도메인 모델링
- 유스케이스 흐름
- 내부 영역 - 도메인 모델 개발
- 내부 영역 - 서비스 개발
- 내부 영역 - 리포지토리 개발
메모
7.2 사용자 마이크로서비스 개발
- JHipster를 사용하여 게이트웨이 서비스를 생성하면, 사용자 기능이 자동으로 구현됨.
- JHipster의 게이트웨이는 프런트엔드도 담당하기 때문에 회원가입, 로그인, 회원관리 등 기본적으로 갖추어야 할 사용자 기능을 모두 포함하고 있음.
- 추가로, 스프링 시큐리티(Spring Security)를 활용한 보안, 권한 관리도 제공하며, 이메일 인증도 제공함.
- 그러나, 회원 가입 시 사용되는 이메일 인증의 경우 외부 이메일 서비스를 연결해야 사용할 수 있기 때문에 이메일 인증 메서드는 모두 주석으로 처리했음.
7.2.1 사용자 마이크로서비스의 기능 소개
- 사용자 마이크로서비스에서는 JHipster가 제공하는 기본적인 기능 중 하나인 사용자 역할 관리와, 도서 대출 서비스의 연체료 처리를 위해 추가로 구현된 포인트 관리 기능에 대해 알아봄.
- 포인트 관리 기능은 포인트 부여와 적립, 결제 등을 구현함.
- 먼저 사용자 역할 관리 기능이 어떻게 구현되어 있는지 자세히 살펴볼 예정이며, 그 다음으로 사용자 생성 기능과 연계된 도서 대출 발급, 포인트 관리 기능에 대해 알아봄.
7.2.2 API 설계
- 사용자 마이크로서비스의 두 가지 주요 API
- 사용자 정보 수정 API
- 사용자 정보가 수정될 때 호출됨.
- 요청 URI는 "/users"이며, 사용하는 HTTP 메서드는 PUT이다.
- ex) 사용자의 일련번호, 로그인 아이디, 이름, 성, 이메일 주소, 이미지명, 활성화 여부, 언어 구분, 권한, 포인트 등을 포함한 UserDTO를 requestBody로 보냄.
- 중요한 점은, 이 API에 대한 접근은 ADMIN 권한을 가진 사용자만 가능하다는 점.
- 포인트 결제 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 인터페이스는 다양한 메서드를 제공하여 주로 사용자 관리와 관련된 작업을 수행함.
댓글