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

요약

  • 6장. 사례연구 - 마이크로서비스 도출과 아키텍처 구성 나머지 부분에 대해 이해함
    • JHipster를 활용한 아키텍처 구성
      • 마이크로서비스 빠르게 만들어 보기 (나머지 부분)
        • 백엔드 서비스에 엔티티 만들기
        • 추가한 엔티티를 게이트웨이에 등록
        • 재실행 후 테스트

메모

백엔드 서비스에 엔티티 만들기

  • 백엔드 서비스가 기능을 제공하려면, 각 서비스 내부에서 기능을 제공할 객체 모델이 필요함.
    • 즉, 내부 아키텍처에 맞게 비즈니스를 표현할 도메인 모델과 서비스 구현체, 리포지토리, 그리고 외부 영역의 REST 컨트롤러 등을 생성해야 함.
  • JHipster는 도메인의 기본 유형인 엔티티를 정의하면 나머지 요소를 자동으로 생성하고, 프런트엔드 서비스까지 연결해 주는 편리한 기능을 제공함.
  • 엔티티 생성 방법은 주로 두 가지임
    1. 명령 프롬프트나 터미널에서 명령어를 입력해 엔티티를 생성하고 관계(relationship)를 설정함.
    2. JHipster가 제공하는 온라인 모델링 도구인 JHipster Online을 통해 엔티티를 생성하고 관계를 설정함.
  • 우리는 도서, 도서 카탈로그, 대출 서비스에 필요한 기본 엔티티를 각각 생성해 본다.

1. 도서 서비스에 book 엔티티를 생성한다.

  • 도서 서비스는 도서 객체가 필요하며, 이 도서 객체는 저자, 제목, 설명이라는 속성을 가짐.
    • 'book' 디렉터리에서 jhipster entity book 명령을 실행하여 'book' 엔티티를 생성함.
    • 이후, 변수와 변수의 자료형, 옵션, 다른 엔티티와의 관계를 설정할 수 있는 질의응답 과정이 이어짐.

2. 도서 카탈로그 서비스에 bookCatalog 엔티티 생성

  • 도서 카탈로그 서비스는 도서 검색 전문 서비스로, 도서 엔티티가 필요함.
    • 이를 위해 'bookCatalog' 디렉터리에서 jhipster entity bookCatalog 명령을 실행하여 'bookCatalog' 엔티티를 생성함.
    • 이 엔티티의 속성으로는 title, author, description을 선언하고, 추가로 도서 서비스와 연계를 위한 bookId(도서 일련번호)와 대출 횟수를 의미하는 rentCnt를 추가함.
    • 그 이후의 과정은 이전과 동일함.

3. 대출 백엔드 서비스에 Rental 엔티티와 rentedItem 엔티티를 생성(4)

  • 대출 서비스는 도서 대출 및 반납 기능을 제공함.
    • 이를 위해 두 개의 엔티티, Rental 및 rentedItem이 필요함.
  • Rental 엔티티는 userId(대출한 사용자 일련번호)와 rentalStatus(대출 가능 여부)라는 속성을 가짐
  • rentalStatus는 RENT_AVAILABLE(대출 가능)과 RENT_UNAVAILABLE(대출 불가능)이라는 두 가지 상태를 가진 열거형으로 처리함.
  • rentedItem 엔티티는 bookId(도서 일련번호), bookstatus(도서 상태), rentedDate(대출일), 그리고 dueDate(반납 예정일)를 속성으로 가짐.
    • Rental과 rentedItem은 일대다(one-to-many) 관계이지만, 여기에서는 rentedItem과 Rental 관계를 다대일(many-to-one)로 설정함.
  • 이러한 엔티티 생성과 관계 설정은 터미널 명령어로도 가능하지만, JHipster Online의 JDL 스튜디오를 이용하여 진행도 가능.

추가한 엔티티를 게이트웨이에 등록

  • 생성한 엔티티인 book, bookCatalog, rental, rentedItem을 게이트웨이에 등록해야 함.
    • 이렇게 하면 게이트웨이가 각 백엔드 서비스의 API를 등록하고, 이미 준비된 프런트엔드 서비스와 연결하게 됨.
  • 이를 위해 jhipster entity rental 명령을 게이트웨이 디렉터리에서 실행하여 Rental 엔티티를 게이트웨이에 추가해야 함.
  • 이 과정에서 몇 가지 옵션을 선택해야 하는데, 엔티티의 path에는 각 마이크로서비스가 존재하는 실제 디렉터리 경로를 입력해야 함.

재실행 후 테스트

  • 생성한 모든 엔티티가 제대로 동작하는지 확인하기 위해, 모든 백엔드 서비스를 재실행해야 함.
    • 먼저, 게이트웨이 디렉터리에서 docker-compose -fsrc/main/docker/jhipster-registry.yml up 명령을 실행하여 레지스트리 컨테이너를 시작함.
  • 새로운 터미널 창에서 게이트웨이를 시작하고, book, bookCatalog, rental 서비스도 각각 다른 터미널에서 실행해야 함.
    • 각 서비스는 별도의 포트로 연결된 인스턴스로 실행되어야 하므로, 각각의 명령은 별도의 터미널 창에서 실행해야 함.
  • 이제 모든 것이 제대로 동작하는지 확인해야 함.
    • 먼저 웹 브라우저에서 http://localhost:8761에 접속하여 JHipster 레지스트리가 정상적으로 작동하는지 확인하고, 오른쪽 상단에 각 서비스 인스턴스가 등록되어 있는지도 확인해야 함.
  • 이 과정을 통해 간단하게 3개의 백엔드 마이크로서비스와 프런트엔드 마이크로서비스가 동작하는 MSA 시스템을 만들었음.
    • JHipster는 이 과정에서 각 엔티티를 처리하는 간단한 프런트엔드 CRUD 게시판을 자동으로 생성하여 사용성을 높일 수 있었음.

댓글

Designed by JB FACTORY