readme 보충 설명, db 추가, app 설정 추가

This commit is contained in:
appleg
2022-03-13 18:00:37 +09:00
parent 94e0f571e9
commit 73a66e933d
3 changed files with 46 additions and 8 deletions

View File

@@ -6,16 +6,29 @@
이에 따라 gradle을 이용하여 모듈이 둘로 나뉘어져 있는 디렉토리 구조를 확인할 수 있다. 이에 따라 gradle을 이용하여 모듈이 둘로 나뉘어져 있는 디렉토리 구조를 확인할 수 있다.
서비스를 위해서는 `payment-command` 모듈과 `payment-query` 모듈을 각각 실행해야 한다. 서비스를 위해서는 `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 ### - Infra Used
``` ```
1. MySQL 8.0.21 1. MySQL 8.0.21 for Command
2. Kafka 2. MySQL 8.0.21 for Query
3. Kafka
``` ```
위의 인프라는 로컬 테스트를 위해서 docker-compose를 이용하여 간단하게 실행할 수 있도록 되어 있다. 위의 인프라는 로컬 실행을 위해서 docker-compose를 이용하다.
``` ```
docker-compose up -d docker-compose up -d
``` ```
spring boot autoconfigure 덕분에 kafka는 위의 docker-compose 파일을 이용하여 접근할 경우, CQRS에서 DB를 분리하는 방법은 여러가지가 있지만, 가장 보편적인(?) 방식인 물리 DB를 나누는 방식을 이용하였다.
따로 설정이 필요가 없다. 로컬 테스트용 설정이기 때문에 간단하게 command와 query 모듈은 각각 다른 DB를 보게된다.
kafka의 경우 application.yaml에 특별한 설정 없이도 kafka에 자동으로 붙게 설정이 되어 있다.(autoconfigure 덕분에)
이외의 운영을 위한 상세 설정은 생략했다.
<hr>

View File

@@ -1,7 +1,7 @@
version: '3' version: '3'
services: services:
mysql: mysql-command:
container_name: payment-mysql container_name: command-mysql
image: mysql:8.0.21 image: mysql:8.0.21
restart: always restart: always
environment: # -e 옵션 environment: # -e 옵션
@@ -13,6 +13,19 @@ services:
volumes: volumes:
- ./db:/var/lib/mysql - ./db:/var/lib/mysql
platform: linux/amd64 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: zookeeper:
container_name: payment-zookeeper container_name: payment-zookeeper
image: wurstmeister/zookeeper image: wurstmeister/zookeeper

View File

@@ -1,2 +1,14 @@
server: server:
port: 8082 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