โฌก ์ ์ก๊ฐ์ธ๊ฐ โฌก
๐ฐ ์ผ์์์ ๋ณด๋ ์ ํ์์ ํ์น ์๊ฒ๋ ์ธ๊ณต์์ฑ ์ค์๋ 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 ๋ฑ์ ํตํด ์ค์ค๋ก ๋ง๋ค์์ต๋๋ค. (๊ทธ๋์ ์์ด๊ฐ ์ด์ํ ์ ์์ต๋๋ค.) ์ด์ํ ์์ด ๋ฌธ์ฅ์ ๋จ๋๋ฌธ ์ด๋ ธ๋ค๊ณ ์๋ ค ์ฃผ๋ฏ ์ด์ง ๋ง์ํด ์ฃผ์๋ฉด ์ผ๋ฅธ ๊ณ ์ณ ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค๋ค ๋ชจ์ชผ๋ก ์ฐฉํ ๊ฐ๋ฐ ํ์ธ์.