https://gitpod.io/#https://github.com/msa-school/ddd-petstore-level9-bounded-multi-model
- 접속 후 "Terminal > Terminal열기"
- httpie (curl / POSTMAN 대용)
pip install httpie
- Kafka 의 실행 (Docker Compose)
cd kafka
docker-compose up -d # docker-compose 가 모든 kafka 관련 리소스를 받고 실행할 때까지 기다림
- Kafka 정상 실행 확인
$ docker-compose logs kafka | grep -i started
kafka-kafka-1 | [2022-04-21 22:07:03,262] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)
- Kafka consumer 접속
docker-compose exec -it kafka /bin/bash # kafka docker container 내부 shell 로 진입
[appuser@e23fbf89f899 bin]$ cd /bin
[appuser@e23fbf89f899 bin]$ ./kafka-console-consumer --bootstrap-server localhost:9092 --topic petstore
- Kafka Download
wget https://dlcdn.apache.org/kafka/3.1.0/kafka_2.13-3.1.0.tgz
tar -xf kafka_2.13-3.1.0.tgz
- Run Kafka
cd kafka_2.13-3.1.0/
bin/zookeeper-server-start.sh config/zookeeper.properties &
bin/kafka-server-start.sh config/server.properties &
- Kafka Event 컨슈밍하기 (별도 터미널)
cd kafka_2.13-3.1.0/
bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic petstore
- 새로운 터미널을 열어 Pet 서비스를 기동한다. (8081)
cd pet-domain
mvn install
mvn spring-boot:run
- 새로운 터미널을 열어 pet을 한 마리 등록해 줍니다.
http :8081/cats name="몽이" energy=1
- Pet 에 먹이를 한번 줘봅니다.
http PUT "http://localhost:8081/cats/1/feed"
- Pet 의 에너지가 상승함을 확인합니다.
http "http://localhost:8081/cats/1"
- Pet 의 털도 한번 가꿔봅니다:
http PUT "http://localhost:8081/cats/1/groom"
- Pet 의 외모지수가 상승함을 확인합니다.
http "http://localhost:8081/cats/1"
- 또 다른 터미널을 열어서 Store 서비스를 기동합니다. (8083)
cd store-domain
mvn spring-boot:run
- 유저를 한 명 등록해 줍니다.
http localhost:8083/customers id="park@naver.com" address[zipcode]="123" address[detail]="용인"
- items 에 Pet 도메인에서 등록된 애완동물들이 동기화 되어 있는 것을 확인한다:
http :8083/items
- 자동으로 등록이 안되었다면 수동으로 등록을 해줘야 한다 (두마리를 등록해본다):
http "http://localhost:8083/items" apperance=1 health=2 price[currency]="KR_WON" price[amount]="100000"
http "http://localhost:8083/items" apperance=2 health=1 price[currency]="EURO" price[amount]=200
- 가격을 매겨준다
http PATCH "http://localhost:8083/items/1" price[amount]=1000 price[currrency]=WON
- 아까 등록한 두마리를 입양해본다. 이때는 하나의 Aggregate 이므로 한번에 등록이 되어야 한다.
http :8083/cartItems customer="http://localhost:8083/customers/park@naver.com" items[]="http://localhost:8083/items/1" items[]="http://localhost:8083/items/2"
- pom.xml
- Application.java 의 @EnableBinding(KafkaProcessor.java)
- kafka/KafkaProcessor.java
- resources/application.yaml
- AbstractEvent.java
- PolicyHandler.java
- domain event 들: PetReserved.java / PetUpdated.java
cd gateway
mvn spring-boot:run
서비스가 기동된 후, gateway 로 단일화된 주소로 접근이 가능함을 확인합니다:
http localhost:8088/pets # service url of pet domain
http localhost:8088/cartItems # service url of store domain
- 코드 다운로드
git clone https://github.com/msa-school/ddd-petstore-frontend-pet-domain
- Port 설정변경 (package.json)
"serve": "vue-cli-service serve --port 8084",
- 실행
cd ddd-petstore-frontend-pet-domain/
npm i
npm run serve
# 성공시
DONE Compiled successfully in 12131ms 11:19:42 PM
App running at:
- Local: http://localhost:8084/
- Network: http://10.0.5.2:8084/
Note that the development build is not optimized.
To create a production build, run npm run build.
- 브라우저에서 접속 확인시 "Invalid Host Header" 인 경우 (Gitpod 인 경우)
vue.config.js 설정 변경:
module.exports = {
transpileDependencies: [
'vuetify'
],
devServer: {
allowedHosts: [
'8080-msaschool-dddpetstorele-unxdrc0wqhx.ws-us41.gitpod.io', // 접속 URL (gitpod 팝업 url, http:// 부분, 끝의 / 부분 제외)
],
},
}
- Gateway 설정 (gateway/../application.yml)
- id: pet-front
uri: http://localhost:8084
predicates:
- Path=/**
git clone https://github.com/msa-school/ddd-petstore-frontend-store-domain
npm i
npm run serve
- Gateway 설정 (gateway/../application.yml)
- id: store-front
uri: http://localhost:8085
predicates:
- Path=/shop/**, /shop/js/
- id: pet-front
uri: http://localhost:8084
predicates:
- Path=/**
각 프로젝트 내에는 Dockerfile 이 포함되어있습니다. 이것을 빌드하기 위해서는 우선 maven 빌드로 jar 를 만들어준 후, jar 를 Dockerfile 로 다시 빌드해줍니다:
cd pet-store
mvn package -B
docker build -t <도커허브계정이름>/pet:v1 .
docker run <도커허브계정이름>/pet:v1
docker login
docker push <도커허브계정이름>/pet:v1
Helm(패키지 인스톨러) 설치
- Helm 3.x 설치(권장)
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 > get_helm.sh
chmod 700 get_helm.sh
./get_helm.sh
helm repo update
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-kafka bitnami/kafka