(๐ฐ๐ท Kor) ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ ์๋์์ค Hexagonal Architecture Synopsis
โฌก ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ ์ ํผ์ง์ค ๋ง๋ จ์ฐ โฌก
๐ฐ๐ท Kor: ์ง๊ธ ๋ณด๋ ์ค!
๐บ Eng: Coming soon!
๐ฏ๐ต Jap: ใพใ ใงใใ
โฌก ์ ์ก๊ฐ์ธ๊ฐ โฌก
๐ฐ ์ผ์์์ ๋ณด๋ ์ ํ์์ ํ์น ์๊ฒ๋ ์ธ๊ณต์์ฑ ์ค์๋ 6๊ฐ์ ์ธก๋ฉด ํจ๋์ ๊ฐ๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด ๊ฒฝ์ฐ๋ฅผ ์ ๋ณด๋ฉด ์ก๊ฐ ๊ตฌ์กฐ๋ฅผ ๋ค ์ ํ๋ค์ด ๋ชธ์ฒด์ ๋ง์ ๋ชจ๋์ ์ฐ๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ตฌ์กฐ๊ฐ ์ผ๋ฐ์ ์ธ ์ฌ๊ฐ ๋จ๋ฉด ๊ตฌ์กฐ์ ๋นํด ๊ณต๊ฐ ํจ์จ์ด ์ข๊ธฐ ๋๋ฌธ์ด์์.
๐ท ์ฌ์ง ์ถ์ฒ: ์์ด๋ 3ํธ(KOMSAT-3A)์ ๋ํ Russian Space Web ๋ท์ปด์ ์ค๋ช ์๋ฃ
์ด๋ฐ ์ก๊ฐ ๊ตฌ์กฐ๋ฌผ์์ "ํ๋์ ๋ณธ์ฒด์ ๋ค์ํ ๋ชจ๋์ ์ฐ๊ฒฐํ ์ ์๋ค."๋ผ๋ ํน์ง์ด ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ(Hexagonal Architecture)์ ๋ช ๋ช ๋ฐฐ๊ฒฝ์ด๋ผ๊ณ ์ถ์ธกํ๊ณ ์์ด์. ์ก๊ฐํ๊ณผ ๋ค๋ฅธ ์ฐ๊ด์ด ์๋ ํธ์ธ๋ฐ, ์ด๋ ๊ฒ ๋ค์ํ ๋ชจ๋์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๋ ์ฝ์ ํธ๊ฐ ๋ฎ์ ์๊ฑฐ๋ ์.
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ ํต์ฌ์, ๋ฐ๋ก ์ด '๋ชจ๋'๋ค์ ๋๋ค. ์๋ฐ ๋ฑ์์ ๋ชจ๋ํ ๊ฐ๋ ๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด์์ธ์ง, ์๋๋ฉด ์ด์ฐจํผ ์ฐ๊ฒฐ๋ถ์ ์ด์ ์ ๋๊ณ ์ค๋ช ํด์ผ ํด์์ธ์ง, ๋ณดํต์ ๋ชจ๋๋ณด๋ค 'ํฌํธ'์ '์ด๋ํฐ'๋ก ์ค๋ช ํ๋ ํธ์ด์์. ๊ทธ๋์ ์ด ์ํคํ ์ฒ๋ฅผ 'ํฌํธ ์ด๋ํฐ ํจํด'์ด๋ผ๊ณ ๋ ๋ถ๋ฆ ๋๋ค.
์ด ์ํคํ ์ฒ๋ ๋ณธ์ฒด์ ๋ชจ๋๋ค์ ๊ฐ๊ฐ ๊ตฌ๋ถํด ๋๋๋ฐ, ๋ง์น ์์ฑ์ ๋ค์ํ ๋ชจ๋๋ค์ฒ๋ผ ๊ฐ ๋ชจ๋์ด ๊ทธ ์๋ฌด๋ฅผ ์ธ์ธํ๊ฒ ์ํํ๊ณ , ๋ณธ์ฒด์๋ ๊ด๋ จ I/O๋ง ์ฃผ๊ณ ๋ฐ๋ ์ฝ์ ํธ์ ๋๋ค. ๊ฐ ์ธ๋ถ ๋์์ ๋ณธ์ฒด ๋ด๋ถ์์ ์์ธํ ๊ด๋ฆฌํ๊ธฐ๋ณด๋ค, ๊ทธ๊ฒ๋ง ๋ด๋นํ๋ ํํธ๋ฅผ ๋ฐ๋ก ์ด์ฉํ๋ ๊ฒ์ด์ฃ . (ํ! ๋์ ํ๋ ๊ฒ๊ณผ ๋น์ทํ๊ฐ์?)
๊ธฐ์กด์ ๋ฐฉ๋ฒ๋ก (์ฃผ๋ก ๋ ์ด์ด๋ ์ํคํ ์ฒ)์์ ํ๋ ๊ฒ๊ณผ ์ฐจ์ด๋ "๋ณธ์ฒด์ ํฌํธ๊ฐ I/O ์คํ์ ๊ฒฐ์ ํ๊ณ , ๊ฐ ๋ชจ๋์์๋ ๊ทธ ์คํ๋๋ก ์ด๋ํฐ๋ฅผ ๊ตฌ์ฑํ๋ค."๋ผ๋ ๊ฒ์ ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ณธ์ฒด ํฌํธ ์คํ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ์ด๋ํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฑฐ๋ ์. ๊ต์ฒด๊ฐ ์์ํ์ฃ . RDB๋ฅผ ๋นผ๊ณ MongoDB๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ํด์, ๋๋ ๊ฐ์๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ค๊ณ ํด์, ์ฐ๋ฆฌ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์์ญ์ ์ ๋ฉด ๊ฐํธํ ํ์๊ฐ ์๊ฒ ๋ ํ ๋, ์ด ๊ธ ๊ผญ ์ฝ์ด ๋ณด์ธ์!
โฌก ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ, ๋ฌด์์ผ๊น? โฌก
์๋ง์กด CEO ์ ํ ๋ฒ ์กฐ์ค์ ์ํฅ์ ๋ฐ์, MSA ์ง์์์ ๊ถ์ฅํ๋ ์ฌ๋ฌ ๊ท์น์๋ ๋ค์ ๋ด์ฉ์ด ํฌํจ๋์ด ์์ต๋๋ค.
(ํ ๊ฐ์) ์ปค๋ฎค๋์ผ์ด์ ์ ์๋น์ค ์ธํฐํ์ด์ค๋ก๋ง ์ํํด์ผ ํฉ๋๋ค.
๋ชจ๋ ์๋น์ค ์ธํฐํ์ด์ค๋ ์์ธ์์ด ์ธ๋ถ์์ ์ด์ฉ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
์ด๋ MSA์ ๊ดํ ์ค๋ช ์ด๊ณ , ์์ํ๋ ์ฌ๋ฌ ๋ง์ดํฌ๋ก ์๋น์ค ๊ฐ์ ์ํต์ ์ ์ฉ๋์์ฃ . ๊ทธ๋ฐ๋ฐ ์ ํน์ง์ ๋จ์๋จ์๋ก ์์ ์ ์ฒ๋ฆฌํ๋ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์์๋ ์ ๋ฌป์ด๋ฉ๋๋ค.
๊ธฐ์กด ์ํคํ ์ฒ์ ๋น๊ต
๊ธฐ์กด์ ๋ง์ด ์ฌ์ฉํ๋ ๋ ์ด์ด๋ ์ํคํ ์ฒ์์๋ ์ปจํธ๋กค๋ฌ โ ์๋น์ค โ ๋ ํฌ์งํฐ๋ฆฌ ๋ฐฉํฅ์ผ๋ก ์์กด์ฑ์ ์ด๋ฃจ์์ต๋๋ค. ๋ ํฌ์งํฐ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋น์ค ๋ก์ง์ด ์ํฅ์ ๋ฐ๊ณ , ์๋น์ค ๋ก์ง์ ๋ณ๊ฒฝํ๋ฉด ์ปจํธ๋กค๋ฌ๊ฐ ์ํฅ์ ๋ฐ์์ฃ .
์ปจํธ๋กค๋ฌ๋ ์๋น์ค๊ฐ ์ ๊ณตํ๋ ๋๋ก ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค.
์๋น์ค๋ ๋ ํฌ์งํฐ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๋๋ก ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค.
์ฌ๊ธฐ์์ ๋ฌธ์ ๋ ํ์ ๊ณ์ธต์ด ์๊ธฐ๊ฐ ์ ๊ณตํ ๊ธฐ๋ฅ์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์, ํ์ ๊ณ์ธต์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๋ด์ด ๋๋ค๋ ๊ฒ์ด์์ต๋๋ค.
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ์ฌ๊ธฐ์ '๊ธฐ๋ฅ์ ์คํ์ ๋ ํฌ์งํฐ๋ฆฌ๊ฐ ๊ฒฐ์ ํ ์ ์๋๋ก' ๋ณ๊ฒฝํฉ๋๋ค. ๋ณ๊ฒฝ์ด ๋ํ๋ฉด ์ข๊ฒ ๋ ๊ฒ์ '๋ณธ์ฒด'๋ก ๋๊ณ , ๋ณธ์ฒด ์ฃผ๋ณ์ผ๋ก ์ปจํธ๋กค๋ฌ๋ ๋ ํฌ์งํฐ๋ฆฌ๊ฐ ์ด๋ํฐ ํ์์ผ๋ก ๋ถ๊ฒ ํ์ต๋๋ค.
๋ณธ์ฒด๊ฐ ๋ชจ๋ ์คํ('ํฌํธ'๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.)์ ์ ๊ณตํ๊ณ , ์ปจํธ๋กค๋ฌ๋ ๋ ํฌ์งํฐ๋ฆฌ๋ ์ด ๋ณธ์ฒด๊ฐ ์ ๊ณตํ๋ ํฌํธ(์ฃผ๋ก ์ธํฐํ์ด์ค)์๋ง ๋ง์ถ๋ ์์ ๋๋ค.
๊ทธ๋์ ๊ด๊ณ๊ฐ ๋ค์์ฒ๋ผ ๋ณ๊ฒฝ๋์ฃ .
๋ณธ์ฒด์์๋ 'ํฌํธ(port)'๋ผ๋ ์ด๋ฆ์ผ๋ก ์ธ๋ถ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ธ๋ถ์ ์๋ ๋ชจ๋์ '์ด๋ํฐ(adapter)'๋ผ๋ ์ด๋ฆ์ผ๋ก, ๋ณธ์ฒด์ ํฌํธ(์ธํฐํ์ด์ค)๋ฅผ ๊ตฌํํ๊ฑฐ๋ ๋๋ ์ฌ์ฉํ๋ ํด๋์ค๋ฅผ ๋ง๋ญ๋๋ค. ์ด ํฌํธ์ ์ด๋ํฐ๊ฐ ๋ชจ๋๊ณผ ๋ณธ์ฒด ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋(I/O) ์ผ์ข ์ ์ํต ์ฐฝ๊ตฌ์ธ ์ ์ด์ฃ . ์ด๊ฒ์ ํ๋์ ํ๋ก์ ํธ ์์์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๊ณ์ธต์ ๊ตฌ์ฑ
์ฐ๋ฆฌ๊ฐ ์์ ์ด์ผ๊ธฐํ ๋ณธ์ฒด๋ฅผ Application ๊ณ์ธต์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๋น์ฆ๋์ค ๋ก์ง์ ์ฃผ์ ๋ถ๋ถ์ ์์ฑํ ๊ณ์ธต์ด๊ธฐ๋ ํ์ฃ . ๊ทธ๋์ ์๋น์ค ํด๋์ค๋ ์ด๊ณณ์ ์๊ณ , ์๋น์ค ํด๋์ค๊ฐ ์ฌ์ฉํ '์ธํฐํ์ด์ค'๋ ์ด๊ณณ์ ์กด์ฌํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค ์ค ์ผ๋ถ๊ฐ ๋ฐ๋ก 'ํฌํธ'์ด๊ธฐ๋ ํ์ฃ .
์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ๋ด๋ถ์๋ Domain ๊ณ์ธต์ด ์๊ณ , ์ด๊ฑด ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๊ทธ ๋๋ฉ์ธ ๋ชจ๋ธ, ๊ทธ๋ฌ๋๊น ์ทจ๊ธํ ๊ด์ฌ์ฌ ๋ฐ์ดํฐ ๋ฐ ๊ทธ ์คํ์ ๋ํ ๊ฒ์ ๋๋ค. ์ด๋ฒ ์ค๋ช ์์ ๋น์ค์ด ๋ํ ํธ์ด์ฃ .
๊ทธ๋ฆฌ๊ณ '์ธ๋ถ'๋ผ๊ณ ํํ๋๊ธฐ๋ ํ๋ ๊ฐ๊ฐ์ Adapter ๋ชจ๋์, ํฌํธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํฌํธ๋ฅผ ๊ตฌํํ ์ด๋ํฐ ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ Repository ํฌํธ(์ธํฐํ์ด์ค)๋ฅผ RDB Adapter๋ผ๋ ๋ชจ๋์์ ๊ตฌํํ ์๋ ์์ฃ . ๋ Web API ์ด๋ํฐ์์ Controller๋ฅผ ๊ตฌํํ๊ณ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์์กด์ฑ์ ๋ฐฉํฅ?!
ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ ์ค์ ํค์๋ ์ค ํ๋๋, ์์กด ๋๋ ๊ตฌํ์ ๋ฐฉํฅ์ด ๋ด๋ถ๋ฅผ ํฅํด์ผ ํ๋ค๋ ๊ฒ์ด์์. '๋ด๋ถ'๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต๊ณผ ๋๋ฉ์ธ ๊ณ์ธต์ ๋งํ๊ณ , ๊ฐ์ฅ ์์ชฝ์ ๋๋ฉ์ธ ๊ณ์ธต์ ๋๋ค. '์ธ๋ถ'๋ ๊ฐ ์ด๋ํฐ ๋ชจ๋๋ค์ ์ด์ผ๊ธฐํ ์ ์๊ตฌ์.
๊ทธ๋ฆฌ๊ณ ๋ด๋ถ์ ์์ค ์ฝ๋๊ฐ ์ธ๋ถ์ ์์ค ์ฝ๋์ ์์กดํ๊ณ ์๋ค๋ฉด, ์ด๊ฒ์ ์ง์ ์ฌํญ์ด ๋ ์ ์์ด์. ์ข์ ์ํคํ ์ฒ๋ ์ธ์ ๋ ๋ผ์ด๋ผ ์ ์๊ฒ ๋จ์๊ฐ ์ ๊ตฌ์ฑ๋์ด์ผ ํ๋๋ฐ, ๋ด๋ถ๊ฐ ์ธ๋ถ์ ์ข ์์ฑ์ ๊ฐ๋๋ค๋ฉด(์ฆ ์ธ๋ถ์ ๊ฒ์ ์ฌ์ฉํด์ผ ์์ ์ ์์ฑํ ์ ์๋ค๋ฉด), ์ธ๋ถ ๋ชจ๋์ ๊ต์ฒดํ ๋๋ง๋ค ๋ด๋ถ์ ์์ค ์ฝ๋๋ฅผ ๊ณ ์ณ์ผ ํด์ ๊ต์ฒด๊ฐ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ฃ .
์์กด์ฑ ๋ฐฉํฅ์ ์ค์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์ ์ธ๋ถ ๊ตฌํ์์ ์๊ฐ๋ณด๋ค ๋ง์ด๋ค ์ค์ํ๋ ๊ณ ๋ ค ๋์์ด์์.
๋๋ผ์ด๋น๊ณผ ๋๋ฆฌ๋ธ
์์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ๋ ๊ฐ ์ด๋ํฐ๊ฐ ๋ณธ์ฒด์ ๊ฐ ํฌํธ๋ฅผ '์ฌ์ฉ'ํ๊ฑฐ๋ '๊ตฌํ'ํ๋ค๊ณ ํ์ด์. ์ด๋ ๋ณธ์ฒด์ ๊ธฐ๋ฅ์ '์ฌ์ฉ'ํ๋๋ '๊ตฌํ'ํ๋๋์ ๋ฐ๋ผ ๋๋ผ์ด๋น ์ด๋ํฐ์ ๋๋ฆฌ๋ธ ์ด๋ํฐ๋ก ๊ตฌ๋ถํด์.
์๋ฅผ ๋ค์ด ์ปจํธ๋กค๋ฌ๋ ๋ณธ์ฒด๊ฐ ์ ๊ณตํ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ ๊ด๊ณ์ฃ . ์ด๋ฅผ ๋๋ผ์ด๋น ์ด๋ํฐ๋ก ๋ถ๋ฅํฉ๋๋ค. JPA ๋ ํฌ์งํฐ๋ฆฌ๋ ๋ณธ์ฒด๊ฐ ์๊ตฌํ๋ ์ธ๋ถ ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ณธ์ฒด์ ์ ๊ณตํ๋ ๊ด๊ณ์ฃ . ์ด๋ฅผ ๋๋ฆฌ๋ธ ์ด๋ํฐ๋ก ๋ถ๋ฆ ๋๋ค.
์ถ์ฒ๋ฅผ ์์ฑ ์ ํ ์๋ฃ๋ DALLยทE, excalidraw, Power Point ๋ฑ์ ํตํด ์ค์ค๋ก ๋ง๋ค์์ต๋๋ค. (๊ทธ๋์ ์์ด๊ฐ ์ด์ํ ์ ์์ต๋๋ค.) ์ด์ํ ์์ด ๋ฌธ์ฅ์ ๋จ๋๋ฌธ ์ด๋ ธ๋ค๊ณ ์๋ ค ์ฃผ๋ฏ ์ด์ง ๋ง์ํด ์ฃผ์๋ฉด ์ผ๋ฅธ ๊ณ ์ณ ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค๋ค ๋ชจ์ชผ๋ก ์ฐฉํ ๊ฐ๋ฐ ํ์ธ์.