From 73a66e933dd2f330bfae39274de599cf25f0ac44 Mon Sep 17 00:00:00 2001 From: appleg Date: Sun, 13 Mar 2022 18:00:37 +0900 Subject: [PATCH] =?UTF-8?q?readme=20=EB=B3=B4=EC=B6=A9=20=EC=84=A4?= =?UTF-8?q?=EB=AA=85,=20db=20=EC=B6=94=EA=B0=80,=20app=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 25 ++++++++++++++----- docker-compose.yaml | 17 +++++++++++-- .../main/resources/resources/application.yaml | 12 +++++++++ 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3272211..dd46dcf 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,29 @@ 이에 따라 gradle을 이용하여 모듈이 둘로 나뉘어져 있는 디렉토리 구조를 확인할 수 있다. 서비스를 위해서는 `payment-command` 모듈과 `payment-query` 모듈을 각각 실행해야 한다. +#### payment-command 모듈 +CRUD 중에서 CUD 만을 담당하는 모듈이다. +본인의 테이블에 DB를 저장하며, 해당 이벤트를 Kafka에 발행하여 Query 모듈에 알려준다. +DDD의 핵심 도메인들은 이곳에 구현이 된다. + +#### payment-query 모듈 +CRUD 중에서 R 만을 담당하는 모듈이다. +payment-command에서 발행한 이벤트를 Kafka로부터 consume하여 본인의 DB를 업데이트 한다. +이 모듈은 DDD의 핵심 도메인 중심이 아닌, 클라이언트에게 필요한 정보를 제공한다. 위의 command 모듈과는 다르게 조회의 효율성, 클라이언트의 호출과 관련하여 조회에 유연하게 구성해야 한다. + ### - Infra Used ``` -1. MySQL 8.0.21 -2. Kafka +1. MySQL 8.0.21 for Command +2. MySQL 8.0.21 for Query +3. Kafka ``` -위의 인프라는 로컬 테스트를 위해서 docker-compose를 이용하여 간단하게 실행할 수 있도록 되어 있다. +위의 인프라는 로컬 실행을 위해서 docker-compose를 이용하였다. ``` docker-compose up -d ``` -spring boot autoconfigure 덕분에 kafka는 위의 docker-compose 파일을 이용하여 접근할 경우, -따로 설정이 필요가 없다. 로컬 테스트용 설정이기 때문에 간단하게 +CQRS에서 DB를 분리하는 방법은 여러가지가 있지만, 가장 보편적인(?) 방식인 물리 DB를 나누는 방식을 이용하였다. +command와 query 모듈은 각각 다른 DB를 보게된다. + +kafka의 경우 application.yaml에 특별한 설정 없이도 kafka에 자동으로 붙게 설정이 되어 있다.(autoconfigure 덕분에) +이외의 운영을 위한 상세 설정은 생략했다. -
\ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index d5c3f23..42e05d2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,7 +1,7 @@ version: '3' services: - mysql: - container_name: payment-mysql + mysql-command: + container_name: command-mysql image: mysql:8.0.21 restart: always environment: # -e 옵션 @@ -13,6 +13,19 @@ services: volumes: - ./db:/var/lib/mysql platform: linux/amd64 + mysql-query: + container_name: query-mysql + image: mysql:8.0.21 + restart: always + environment: # -e 옵션 + - MYSQL_DATABASE=payment + - MYSQL_ROOT_PASSWORD=payment + - TZ=UTC + ports: + - "3307:3307" + volumes: + - ./db:/var/lib/mysql + platform: linux/amd64 zookeeper: container_name: payment-zookeeper image: wurstmeister/zookeeper diff --git a/payment-query/src/main/resources/resources/application.yaml b/payment-query/src/main/resources/resources/application.yaml index 4a2daf5..83654d7 100644 --- a/payment-query/src/main/resources/resources/application.yaml +++ b/payment-query/src/main/resources/resources/application.yaml @@ -1,2 +1,14 @@ server: port: 8082 + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3307/payment?serverTimezone=Asia/Seoul&useSSL=false&allowPublicKeyRetrieval=true + username: root + password: payment + jpa: + hibernate: + ddl-auto: update + show-sql: true + database-platform: org.hibernate.dialect.MySQL8Dialect \ No newline at end of file