๐Ÿ‘ท๐Ÿป Architecture

๋‹จ๊ณ„๋ณ„๋กœ ์„ฑ์žฅํ•˜์ž!
CQRSCQRS๋Š” Command Query Responsibility Segregation ์˜ ์•ฝ์ž์ด๋ฉฐ,Command(๋ช…๋ น)๊ณผ Query(์ฟผ๋ฆฌ)์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. Query๋Š” SQL Query๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ, Command์™€ Query๋Š” ๊ฐ๊ฐ ๋ฌด์—‡์„ ์˜๋ฏธํ• ๊นŒ?Command (๋ช…๋ น)์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ ( ์˜ˆ์•ฝ, ์˜ˆ์•ฝ์ทจ์†Œ)Query (์ฟผ๋ฆฌ)์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ (์˜ˆ์•ฝ๋‚ด์—ญ ์กฐํšŒ) ๋”ฐ๋ผ์„œ, CQRS๋ฅผ ๋‹ค์‹œ ์„ค๋ช…ํ•˜์ž๋ฉด์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹ค๋ฃจ๋Š” ์ฝ”๋“œ ์˜์—ญ์˜ ์ฐจ์ดCommand์™€ Query๋Š” ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ์˜ ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค...
์ด์ „์— ์ง„ํ–‰ํ–ˆ์—ˆ๋˜ ๋ฐ๋ธŒํ†ก์ด๋ผ๋Š” ์ƒ๋‹ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ Micro Service ๋‚ด๋ถ€ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ ์• ๊ธฐํ•ด๋ณด๊ฒ ๋‹ค. 1. ์ƒ๋‹ด Aggregate ์˜ˆ์‹œ๋กœ ๊ฐ€์ ธ์˜จ ์ƒ๋‹ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค. ์•กํ„ฐ๋Š” ์ƒ๋‹ด์‚ฌ, ๋‚ด๋‹ด์ž๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ํ˜„์žฌ ๊ฐ€์ ธ์˜จ ์˜ˆ์‹œ๋Š” ์ƒ๋‹ด ๋งค์นญ Micro Service๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค. Consultation์ด๋ผ๋Š” ๋„๋ฉ”์ธ Entity๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์ƒ๋‹ด์ด๋ผ๋Š” Aggregate๋Š” ์ƒ๋‹ด ๋“ฑ๋ก, ์ˆ˜์ •, ์ทจ์†Œ, ๋ฆฌ๋ทฐ ์ž‘์„ฑ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ Entity์™€ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ๋”ฐ๋ฅด์ž๋ฉด JPA Entity์™€ POJO Entity๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š”๊ฒŒ ๋งž์ง€๋งŒ, JPA๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋ฐฉํ•ดํ•œ๋‹ค๊ณ  ์ƒ..
Micro Service ์™ธ๋ถ€, ๋‚ด๋ถ€ Architecture๋ฅผ ํŽธํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ Jhipster์— ๋Œ€ํ•ด์„œ ์–˜๊ธฐํ•˜๊ณ ์ž ํ•œ๋‹ค. JHipster(Java Hipster)๋ž€? JHipster๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ modern ํ•œ ๋ชจ๋†€๋ฆฌ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์ ์šฉ, ๊ฐœ๋ฐœ, ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ์ด๋‹ค. https://www.jhipster.tech/ JHipster - Full Stack Platform for the Modern Developer! JHipster is a development platform to quickly generate, develop, and deploy modern web applications and microserv..
Bounded Context ๊ธฐ๋ฐ˜ ๋„์ถœ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋ž€ DDD๋ฅผ ์ ์šฉํ•œ ์„ค๊ณ„์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ์‘์ง‘์„ฑ์ด ์žˆ๋Š” ๋„๋ฉ”์ธ์„ ์ •์˜ํ•˜๊ณ  ๋„๋ฉ”์ธ ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ ์ข‹์€ ๋‹จ์œ„๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์šฐ์„ , ํ•˜๋‚˜์˜ ํฐ ๋„๋ฉ”์ธ์„ ์ „๋žต์ ์œผ๋กœ ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋‚˜๋ˆ„์–ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ํ•˜๋‚˜์˜ ํฐ ๋„๋ฉ”์ธ์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ์„œ๋ธŒ ๋„๋ฉ”์ธ์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ด๋•Œ, ๋˜‘๊ฐ™์€ ํšŒ์›์ด๋”๋ผ๋„ ์˜ˆ์•ฝ ๋„๋ฉ”์ธ์—์„œ์˜ ํšŒ์›๊ณผ ๊ฒฐ์ œ ๋„๋ฉ”์ธ์—์„œ์˜ ํšŒ์›์€ ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์˜ˆ์•ฝ ๋„๋ฉ”์ธ์—์„œ๋Š” ์˜ˆ์•ฝ์ž์˜ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜ˆ์•ฝ์ž์˜ ์—ญํ• , ๊ฒฐ์ œ ๋„๋ฉ”์ธ์—์„œ๋Š” ๊ฒฐ์ œ์ž์˜ ์—ญํ• ๋กœ ์นด๋“œ ์ •๋ณด ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํšŒ์›์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ๊ฐ ๋ฐ”์šด๋””๋“œ ์ปจํ…์ŠคํŠธ๋งˆ๋‹ค ๊ฐ™์€ ํšŒ์›์ด๋”๋ผ๋„ ๊ฐ ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด๋กœ ..
Layerd, Clean, Hexagonal๊ณผ ๊ฐ™์ด Micro Service ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์–˜๊ธฐํ•ด๋ณด๊ณ , ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์—์„œ๋Š” Hexagonal Architecture์— ๋Œ€ํ•œ ์ƒ๊ฐ๊ณผ ์ปค์Šคํ…€ํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ๋˜ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ๋„ ์–˜๊ธฐํ•ด๋ณด๊ฒ ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ์™œ ๋ถ„๋ฆฌํ•ด์•ผ ํ• ๊นŒ? ์šฐ์„ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ Process Rule, Flow, Concept ์„ธ ๊ฐ€์ง€๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์šฉ์–ด์ด๋‹ค. ์ด๋Ÿฌํ•œ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋กœ ํ’€์–ด๋‚ด์•ผ ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด๋‚ด์•ผ ํ•œ๋‹ค. (์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ ค) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ถ”ํ›„์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋ถ„๋ฆฌ๋˜์–ด์•ผ ๋ณต์žก์„ฑ์ด ๋‚ฎ๊ณ  ์˜ค๋žซ๋™์•ˆ ์•ˆ์ •์„ฑ ์žˆ๊ฒŒ ์œ ์ง€๋ณด์ˆ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ๋‚ด๊ฐ€ ์ง€๊ธˆ ์ฐธ์—ฌํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋งŒ ํ•˜๋”๋ผ๋„ P..
CI/CD ํŒจํ„ดCI(Continuos Integration) / CD(Continuous Delivery/Deloyment)MSA ํ™˜๊ฒฝ์—์„œ ๋น„์ง€๋‹ˆ์Šค ๋ฏผ์ฒฉ์„ฑ์„ ํ‚ค์šฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐฐํฌ ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ, ์ž๋™ํ™”๋œ ๋นŒ๋“œ๋‚˜ ๋ฐฐํฌ ์ž‘์—…์„ ๋ณดํ†ต CI/CD๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ”Œ๋กœ์šฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํ•จ๊ป˜ Github์™€ ๊ฐ™์€ ํ˜•์ƒ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์— Push ํ•œ๋‹ค.๋นŒ๋“œ ๋„๊ตฌ์—์„œ ํŠน์ • ์‹œ๊ฐ„์— ํ˜•์ƒ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ Pullํ•ด์„œ ํ†ตํ•ฉํ•œ ํ›„์—, ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋”ฐ๋กœ ๋กœ๊ทธ ํŒŒ์ผ์— ๋ฆฌํฌํŒ…ํ•˜๊ณ , ๋นŒ๋“œ๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•œ๋‹ค.QA ํ…Œ์Šคํ„ฐ๊ฐ€ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ..
DevPoong
'๐Ÿ‘ท๐Ÿป Architecture' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก