사이드 프로젝트로 판매 상품을 수집하며 해당 상품의 이미지도 수집해주는 미니멀한 스트리밍 시스템 MSA로 구현해보기
코틀린과코루틴,웹플럭스,reactive mongodb를 통해 코틀린에서의 비동기, 논블로킹 프로그래밍을 내 것으로 만든다.카프카 커넥트를 이용하여CDC를 구현해보고스트림즈로 데이터베이스의 변화 이벤트를 받아 가공하여 다른 토픽에 넣어본다.NoSQL의 장점을 체감해본다.
spring boot 3.x,kotlinwebflux,coroutinekafka connect,kafka streamskubernetesmongodb
- 상품을
수집할 수 있다.-
mallId내 상품 식별값은 중복되어서는 안된다.
-
"POST /api/v1/products"
{
"mallId": "String", // 입점가게 고유 식별값
"productId": "String", // 해당 상품 고유 식별값
"title": "String", // 상품 명
"content": "String", // 상품 소개
"price": "String", // 상품 가격
"imageUrl": "String" // 메인 이미지 URL
}- 상품 수집 시
image url을 받으면 해당 이미지를 수집한다. -
productId가 동일하면 상품을업데이트한다. 상품이 업데이트되면 이미지를 재수집한다. - 상품을
전체 조회할 수 있다. 조회 시 실제 수집한 이미지의 경로도 반환한다.- 수집되지 않은 상품은 조회되지 않는다.
"GET /api/v1/complete-products"- 상품을
상세조회할 수 있다.
"GET /api/v1/complete-products/{productId}"- 상품을
삭제할 수 있다.- 상품이 삭제되면 S3에서 해당 상품의 이미지도 삭제한다.
"DELETE /api/v1/complete-products/{productId}"-
코틀린으로 구현한다.- 코틀린으로 처리 가능한 부분은
reactive streams대신kotlin coroutine으로 변환하여 작업한다.
- 코틀린으로 처리 가능한 부분은
-
MSA를 고려하며multi module로 구성하기! -
마이크로서비스 아키텍처로 설계, 개발한다. -
웹플럭스를 이용해 비동기, 논블로킹하게 전반적인 시스템을 스트림 형태로 구현한다. -
Mongo,Kafka는on-promise에 구축한다. -
producer,consumer는k3s에 구축한다. -
nGrinder나 다른 도구를 이용해 성능측정 해보기, 그 과정에서 Auto Scaling 확인한다.
java 17을 설치한다.docker desktop을 설치하고enable kubernetes를 체크하여 쿠버네티스를 활성화한다.
infra 환경 구성을 한다.
cd ./infrastructure
cat README.mdproduct-collector 는 쿠버네티스에서 서비스 타입 NodePort로 외부에 노출하고 있습니다.
즉 쿠버네티스 노드의 아이피와 포트를 확인합니다.
kubectl get svcPOST http://localhost:{port}/api/..
