๊ธฐ์กด์ ํ๋ก์ ํธ์์ ์ ๋ DB๋ฅผ ํ๋๋ก ์ฌ์ฉํ MSA ํ๊ฒฝ์ ๊ตฌ์ฑํ์์ต๋๋ค.
ํ์ง๋ง โจํ๋์ DB๋ก ๋ชจ๋ ์๋น์ค๋ฅผ ์ฐ๋โจ ์, ๊ด๋ฆฌ๊ฐ ํธํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง
โจ๋์์ฑ ๋ฌธ์ โจ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๊ฒ๋์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ด๋ป๊ฒ ์ค๋ฌด์์๋ ๋ค์ค DB๋ฅผ ๊ตฌํํ ๊น๋ผ๋ ์๋ฌธ์ ์ด ์๊ฒผ์ต๋๋ค.
์ดํ Kafka์ ๋ํด ์๊ฒ๋์๊ณ , โจKafka๋ฅผ ํตํด MSA DB ๋๊ธฐํ๋ฅผ ์ํํ๋ค๋ ๊ฒโจ์ ์๊ฒ๋์์ต๋๋ค.
Kubernetes ํ๊ฒฝ์์ โจKafka with SASL_TLSโจ๋ ๊ตฌํํด๋ณธ ์ํ์ด๋ฉฐ
์ค์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด๊ธฐ ์ , โจ๊ฐ์ด MSA ํ๊ฒฝ with ๋ ๋ฆฝ์ DBโจ๋ฅผ ๊ตฌ์ฑํด๋ณด๋ ค ํฉ๋๋ค.
โจ ๋ชฉํ
- Github Actions + ArgoCD๋ฅผ ํ์ฉํ์ฌ CI/CD๋ฅผ ๊ตฌ์ฑ
- GCP Kubenetes ํ๊ฒฝ์ Terraform์ ์ด์ฉํ์ฌ ์ํ
- ๊ฐ MSA ํ๋ก์ ํธ๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค ์์ ๋ฐฐํฌ
- Spring Cloud๋ฅผ ์ ์ฉํ์ฌ API Gateway ์ญํ ์ํ ์๋ฒ ์์ฑ
- Kafka๋ฅผ SASL_TLS ์ ์ฉํ์ฌ ์ฟ ๋ฒ๋คํฐ์ค ์์์ ๊ด๋ฆฌ
- kafka-user -> kafk-post ์๋ฒ๋ก DB ๋ฐ์ดํฐ ๋๊ธฐํ - Transactional Outbox Pattern
- gRPC๋ฅผ ์ฌ์ฉํ์ฌ MSA ๊ฐ API ์์ฒญ
- istio๋ฅผ ์ ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ mTLS ํ์ฑํ
- OpenTelemetry + Jaeger๋ฅผ ์ด์ฉํ์ฌ Trace ์ ๋ณด ์์ง ๋ฐ ์๊ฐํ
๐ฒ ํ๋ก์ ํธ ์ํคํ
์ณ ๊ตฌ์กฐ - ํ๋ก์ ํธ ๊ตฌํ ์๋ฃ ํ
๊ฐ ๋ฆฌ์์ค ํ๋ฆ ๋ณต์ต์ ์ํด ๋ค์์คํ์ด์ค๋ฅผ ์ค์ฌ์ผ๋ก ์ํคํ
์ณ๋ฅผ ๊ทธ๋ ธ์ต๋๋ค.
- kafka-user -
๋ฉ์์ง ํ๋ก๋์ฑ
,gRPC ์๋ฒ
- kafka-post -
๋ฉ์์ง ์ปจ์๋ฐ
,gRPC ํด๋ผ์ด์ธํธ
- kafka-manifest -
private
,gitops
- Transactional Outbox Pattern with Microservices and Kafka - CuriousJinan ๋ธ๋ก๊ทธ
- AmazingEffect - Github
- ๊ณผ์ ์ ์ ์ Notion
์ด ํ๋ก์ ํธ๋ฅผ ์ํํ๊ธฐ ์ , ์ ๋ ๋จ์ํ Kafka๋ก MSA๋ฅผ ๊ตฌํํ๋ค๊ณ ๋ง ์๊ณ ์์์ต๋๋ค.
์ดํ ์ด๋ป๊ฒ ๊ตฌํํ์ง? ๋ผ๋ ์๊ฐ์ ๋ฌด์์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐพ์๋ณด์๊ณ , Transactional Outbox Pattern
์ ๋ํด ์๊ฒ๋์์ต๋๋ค.
ํด๋น ๋ธ๋ก๊ทธ ๋ด์ฉ์ ๊ทผ๊ฑฐ๋ก, ์๋๋ฅผ ํ๋ คํ์ง๋ง ๋๋ฌด ์ด๋ ต๋ค ์ถ์๊ณ ํด๋น ๋ธ๋ก๊ทธ๋ ์ฝ๋๋ก๋ ์ ๋ณด๊ฐ ๊ฑฐ์ ์์์ต๋๋ค.
๊ทธ๋์ ์ ๋ ๋ฌด์์ ๊นํ๋ธ์ Transactional Outbox Pattern
์ ๊ฒ์ํ๊ณ , ์์ AmazingEffect ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
๊ทธ๋์ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์์์ต๋๋ค.
์๊ฐ๋ณด๋ค ๋งค์ฐ ์ด๋ ค์ ์ต๋๋ค. ์ฒ์ ๋ณด๋ ์ฝ๋๋ค, ๋๋ฌด๋ ๋ง์ ํด๋์ค๋ค์ด ์์์ง๋ง โจํ๋ํ๋ ๋ถ์โจํ๋ฉด์ โจํ๋ฆ์ ํ์
โจํ์๊ณ ,
์ฝ๋๋ฅผ ์์ฑํ ์ ์์์ต๋๋ค.
์ฝ๋ ์์ฑ์ ํ๋ฉฐ AOP in Logging
, ์๋ก์ด ํจํค์ง ์ํคํ
์ณ
, Kafka in Spring
, Trace
๋ฑ์ ๋ํด ์๊ฒ๋์์ต๋๋ค.
ํนํ๋, AOP๋ โจTrace ๋ฐ Span์ ์ํด ํ์์ โจ์ด๋ฉฐ โจ์ด๋
ธํ
์ด์
๊ธฐ๋ฐ ๋ก๊น
์ ๊ตฌํํ๋ ๊ฒโจ์ ๋งค์ฐ ์ฌ๋ฏธ์์์ต๋๋ค.
๋ค์์ผ๋ก๋ โจDevOps Engineer๋ก์จ ์ญ๋์ ๋์ผ ์ ์์์ต๋๋คโจ.
๋ฉฐ์น ์ ๊น์ง๋ง ํด๋, ์ ๋ Jaeger ๋ฐ OpenTelemetry๊ฐ ๋ฌด์์ธ์ง ์์ง ๋ชปํ์ต๋๋ค.
๊ทธ๋ฌ๋, ๋ด ์ฝ๋์ AmazingEffect ์ฝ๋๋ฅผ ๋น๊ตํ๋ฉด์ ๋ค๋ฅธ ์ ๋ค์ ๋ถ์ํ๋ฉฐ ํด๋น ์คํ์์ค๋ค์ ์กด์ฌ๋ฅผ ์๊ฒ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ธํฐ๋ท์ ์ฐพ์๋ณด๋ฉฐ ๊ณต๋ถํ๊ณ ๊ตฌ์ถํ์ฌ ์ด๋ค ํ๋ฆ์ธ์ง ํ์
ํ๋ฉฐ DevOps ์ง์์ ์ป์ ์ ์์์ต๋๋ค..
ํนํ, โจSpring -> OpenTelemetry -> Jaeger ๋ก๊น
์์คํ
๊ตฌ์ถโจ์ ๋งค์ฐ ์ด๋ ค์ ์ง๋ง, ์ฑ๊ณต ํ์๋ ๋งค์ฐ ๋ฟ๋ฏํ๊ณ ์ ๊ธฐํ์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ํ๋ก์ ํธ ์งํ ์ํฉ ๋ฐ ๊ตฌ์ถ ๊ณผ์ ๋ค์ ๋น ์ง์ง ์๊ณ ํด๋์์ต๋๋ค.
์ ๋ ์ด๋ฌํ ํ๋ก์ ํธ ๊ฒฝํ์ ๋ฐํ์ผ๋ก, ์ดํ ๊ฐ๋ฐ ํํ๋ก์ ํธ์์ โจ๋ ์์ ๊ฐ์๊ฒ DevOps๋ฅผ ๋ด๋นโจํ๋ ค๊ณ ํฉ๋๋ค.
์ด๋ ๊ฒ ์ฑ์ฅํ ์ ์๋ ๊ธฐํ๋ฅผ ์ค GCP์ AmazingEffect ๋ ํฌ์งํ ๋ฆฌ ์ฃผ์ธ๋ถ์๊ฒ ์ ๋ง ์ ๋ง ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด๋ฆ | ์ฌ์ง |
---|---|
ArgoCD | ![]() |
Jaeger | ![]() |
Outbox DB | ![]() |