Out Port ์์น์ ๋ํ ์๋ฌธ
ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ ํจํด์ ํฌ๊ฒ domain, application, infrastructure layer๋ก ๋๋๋ค๊ณ ํ์ ๋, In/Out Port๋ฅผ domain layer์ ํ์์ ๋๊ณค ํ๋ค.
๋จผ์ In Port์ ๊ฒฝ์ฐ, ์ธ๋ถ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ โ์ด๊ฒ ์ข ํด์คโ๋ผ๊ณ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ์ ๊ตฌ๋ผ๊ณ ํ ์ ์๋ ์ธํฐํ์ด์ค๋ค. ๊ธฐ๋ณธ์ ์ธ Layered Architecture ๊ตฌ์กฐ์์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ Service Layer๋ฅผ, ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ์์๋ In Port์ ๊ตฌํ์ฒด๋ก ์ฌ์ฉํ๊ฒ ๋๋ค.
์ด ๋ถ๋ถ์ ๋ํ์ฌ๋ ๋ฑํ ์๊ตฌ์ฌ์ด ๋ค์ง ์๋๋ค. ๋ฉ์ธ ์๋น์ค ๋ก์ง ์์ฒด๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์, Application Layer ๋ด๋ถ์ ๊ตฌํ์ฒด๊ฐ ์กด์ฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋งค์ฐ ์์ฐ์ค๋ฌ์ด ์ผ์ด๋ค.
์ด๋ฒ์๋ Out Port๋ฅผ ์ดํด๋ณด์. Out Port๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋ก์ง์ ์ํํ๋ค๊ฐ ์ธ๋ถ(DB ๋ฑ)์ โ์ด๊ฒ ์ข ์ ์ฅํด์คโ ๋ฑ์ ์์ฒญํ๋ ์ถ๊ตฌ๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ๋ฌ๋ Out Port์ ๋ํ ๊ตฌํ์ฒด์ธ Adapter๋ ๋ณดํต Infrastructure Layer ํ์์ ๋๊ฒ ๋๋๋ฐ, ์ ์ด ์น๊ตฌ๋ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋์ง ์๊ตฌ์ฌ์ด ๋ ๋ค.
๋จ์ํ๊ฒ ์๊ฐํ์ ๋, Adapater์์ ์ฌ์ฉํ๋ ๋ก์ง์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ๋ ๊ฝค ๊ฑฐ๋ฆฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ Infrastructure์ ๋๋ ๊ฒ์ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค. ๊ทธ๋ผ ์ด์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ Application Layer๊ฐ ์๋ Infrastructure Layer์ ๋๋ ๊ฒ์ด ์ข์ง ์์๊น? ๊ฐ์ Layer ์์ ์กด์ฌํ๋๊น ์ข ๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด๋ ์ ์ง๋ณด์์ ์ด์ ์ด ์์ง ์์๊น?
Hexagonal Architecture ์ฌ์ฉ ์ด์
์ฐ์ Hexagonal Architecture์ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์ฌ๋ผ์ง๋ค. Hexagonal Architecture์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฉ์ธ ๋น์ฆ๋์ค ๋ก์ง์ ์ธ๋ถ๋ก๋ถํฐ ๋ถ๋ฆฌํ์ฌ ์ ์ง๋ณด์์ฑ, ์ ์ฐ์ฑ, ํ ์คํธ ์ฉ์ด์ฑ ๋ฑ์ ๊ทน๋ํํ๊ธฐ ์ํจ์ด๋ค. ์ฆ ๊ฐ ๊ณ์ธต ๊ฐ์ โ๋ถ๋ฆฌโ๋ฅผ ๊ฐ์ฅ ํฐ ๋ชฉ์ ์ผ๋ก ๋๋ค.
๋ง์ฝ Out Port๊ฐ Infrastructure Layer ๋ด๋ถ์ ์๊ฒ ๋๋ฉด, ๋น์ฆ๋์ค ๋ก์ง์ด ์ํ๋๋ ๊ณผ์ ์์ DB ์ ์ฅ์ด ํ์ํ ๊ฒฝ์ฐ Out Port๋ฅผ ํธ์ถํ ์ ๋ฐ์ ์๋ค. ์ฆ, Application Layer์ Service๋ DB ์ ์ฅ๊ณผ ๊ด๋ จ๋ ๋ก์ง์ ์ํํ๊ธฐ ์ํ์ฌ ๊ด๋ จ๋ ์ธํฐํ์ด์ค, ๊ตฌํ์ฒด๋ฅผ ์ ๋ถ Infrastructure Layer์์ ๋์ด์์ผ ํ๋ค.
๋ ์ฝ๊ฒ ๋งํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. Application์ ์ง์ด๋ผ๊ณ ์๊ฐํ๊ณ , Infrastructure๋ฅผ ๊ฐ์ ์ ํ์ด๋ผ๊ณ ๊ฐ์ ํ์. ์ง์์ ์ด๋ค๋ณด๋ฉด ์ฌ๋ฌ ๊ฐ์ง ๊ฐ์ ์ ํ์ด ํ์ํ๋ค. ๋ฏน์๊ธฐ, ์ ์๋ ์ธ์ง, ๋์ฅ๊ณ ๋ฑ ์์์ด ๋ง์ ๊ฐ์ ์ ํ์ด ํ์ํ ๊ฒ์ด๋ค. ๋ ์ด๋ค ๋ ์๋ ์์ ์ฒ์๋ณด๋ ๋ฐ๋๋จธ์ ๊ธฐ๊ณ๋ฅผ ์ง์ ๋ค์ผ ์๋ ์๊ณ , ๋ ์ด๋ค ๋ ์๋ ์ ์ฌ์ฉํ๋ ๋ฏน์๊ธฐ๊ฐ ๊ณ ์ฅ๋์ ์๋ก์ด ์ ํ์ผ๋ก ๋ฐ๊ฟ ์๋ ์๋ค.
๊ทธ๋ฌ๋ ๋ง์ฝ ๊ฐ์ ์ ํ๋ค์ด ์ ๋ง๋ค ๋ค๋ฅธ ํ๋ฌ๊ทธ ๋ชจ์์ ๊ฐ๊ณ ์์ผ๋ฉด ์ด๋จ๊น? ์ง์ ๊ฐ ๊ฐ์ ์ ํ ์คํ์ ํด๋นํ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฝ์ผํธ ๊ตฌ๋ฉ๋ค์ด ์ฆ๋นํ ๊ฒ์ด๋ค.
๋ง๋ ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์ ํ๋ค์ด ์ง์ ๋ด๋ถ ๊ท์น์ ๋ง์ถฐ์ผ ํ๋ ๊ฒ์ด๋ค.
์ด๊ฑธ ๊ทธ๋๋ก ๊ฐ๋ฐ๊ณผ ์ด์ด๋ณด์.
์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ๋ฉด์ ์ด๋ค ์์ ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ํ์ํ ์๋ ์๊ณ , ๋ ์ด๋ค ์์ ์๋ ๊ฐ๋ฐ๋ ๊ธฐ๋ฅ์ ์์ ํด์ผ ํ ์๋ ์๋ค. ๋ง์ฝ Infrastructure ํ์์ Out Port๋ฅผ ์ ์ํ๊ฒ ๋๋ค๋ฉด, ๊ฐ๋ฐ์๋ ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์์ ํ ๋, Application Layer์ ์กด์ฌํ๋ Service ๋ก์ง์ ์ ๋ถ ๊ฐ์์น์์ผํ ์๋ ์์ ๊ฒ์ด๋ค.
๋ง๋ ์ ๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ ๊ธฐ์ (Infrastructure Layer)์ด ๋ด๋ถ ๊ท์น(Application Layer)์ ๋ง์ถฐ์ผ ํ๋ ๊ฒ์ด๋ค.
์ง์ 220v์ ์ฝ์ผํธ ๊ตฌ๋ฉ(Interface)์ ๋ฏธ๋ฆฌ ๋ซ์ด๋๊ณ , ์ ์์ ํ์ 220v์ ํ๋ฌ๊ทธ(Adapter)๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
Adapter?
ํ ๋ฐ ๋ ๋์๊ฐ์, ์ Out Port์ ์ด๋ฆ์ Adapter ์ผ๊น? Plug๊ฐ ๋ ์ ์ ํ์ง ์์๊น?
์ฐ๋ฆฌ๊ฐ ์ ์์ ํ์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ ํ์์ ํ๋ฌ๊ทธ๋ก ์ด์ด์ง๋ ์ ์ ๋ค๋ฐ ์ค๊ฐ์ ์ง์ก๋ฉด์ฒด์ ์ด๋ค ๊ฑฐ๋ํ๊ณ ๋ฌด๊ฑฐ์ด ๊ฒ์ด ์กด์ฌํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๊ฒ์ Adapter๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ, ์ด๋ ๋ฒฝ๋ฉด ์ฝ์ผํธ์ ๊ต๋ฅ ์ ๊ธฐ๋ฅผ ์ ์์ ํ์ด ์ฌ์ฉํ๋ ์์ ์ ์ธ ์ง๋ฅ ์ ์ ์ ์ ๊ธฐ๋ก ๋ณํํ๋ ์ญํ ์ ํ๋ค.
๋ฐ๋ผ์ Plug๋ ๋จ์ํ ์ ๋ ฅ ๊ท๊ฒฉ์ ๋ง์ถ๊ธฐ ์ํ ๋ชจ์์ผ ๋ฟ์ด์ง, ์ค์ ๋ก ์ ๋ฅ๋ฅผ ๋ณํํ๋ โ๋ก์งโ์ ์ํํ๋ ๊ฒ์ Adapter์ด๊ธฐ ๋๋ฌธ์ Hexagonal Architecture์์๋ Adapter๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ ์๋๊น ์ถ๋ค.