readme 보충 설명, db 추가, app 설정 추가
This commit is contained in:
25
README.md
25
README.md
@@ -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>
|
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user