๐๏ธ Architecture
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ ๊ตฌ์ถ CH.5 ๋ง์ดํฌ๋ก์๋น์ค์ ํต์ ๊ตฌํ
GroovyArea
2023. 12. 16. 16:42
5.1 ์ด์์ ์ธ ๊ธฐ์ ์ ์ฐพ์์
- ์ฌ๋ฌ ์๋น์ค๊ฐ ์ฝํ ๋งํผ ํ์ ํธํ์ฑ์ ์ฝ๊ฒ ํด์ผ ํจ.
- ๋ช
์์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ
- ๋ช ์์ ์คํค๋ง๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ ธ์ถํ๋ ์ธํฐํ์ด์ค๊ฐ ๋ช ์์ ์์ ๋ณด์ฅํ๋ค.
- ๊ฐ๋ฅ์ฑ์ ์ด์ด ๋๋, API๋ฅผ ๊ธฐ์ ์ค๋ฆฝ์ ์ผ๋ก ์ ์งํ์
- “๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋ ๊ธฐ์ ์คํ์ ๊ฐ์ํ๋ ํตํฉ๊ธฐ์ ์ ํผํด์ผ ํ๋ค” ⇒ ์ดํด๊ฐ ์๋จ.
- ๋ด๋ถ ๊ตฌํ ๋ฐ ์ธ๋ถ ์ฌํญ์ ์๋ํ๋ผ
- ๋ด๋ถ ๊ตฌํ ์ฌํญ์ ์๊ฒ ๋๋ฉด ๊ฒฐํฉ๋๊ฐ ์ฆ๊ฐํจ
- ๋ด๋ถ ๊ตฌํ ์ฌํญ ๋ณ๊ฒฝ ์, ์๋น์๋ ๋ณ๊ฒฝ์ ํด์ผํ๊ฒ ๋จ. → ๊ธฐ์ ๋ถ์ฑ ์ฆ๊ฐ
5.2 ๊ธฐ์ ์ ํ
- RPC (Remote Procedure Call)
- ์๊ฒฉ ์๋น์ค๋ฅผ ๋ก์ปฌ์์ ํธ์ถํ๋ค.
- ๊ฐ์ ๋คํธ์ํฌ ์์์๋ง ๊ฐ๋ฅ
- ํด๋ผ์ด์ด๋ ์ธก ์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅํ๋ฏ๋ก, ๋ฉ์๋ ํธ์ถํ๋ฏ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ์ด ๊ฐ์ฅ ํฐ ์ด์ ์ด๋ค.
- ๊ธฐ์ ๊ฒฐํฉ์ ๋ฐ์
- gRPC ๋ ๋์ฒด ์ธ์ด์ ๋ํ ์ง์์ ํ์ง๋ง, ์ํธ ์ด์ฉ์ฑ์ ์ ์ฝ์ด ๋ฐ๋ฅธ๋ค.
- ์ด๋ฌํ ๊ธฐ์ ๊ฒฐํฉ์ ๋ด๋ถ ๊ธฐ์ ์ ๊ตฌํ ์์ธ ์ ๋ณด๋ฅผ ๋ ธ์ถํ๋ ํํ๊ฐ ๋๋ค.
- ๊ฒฐ๊ตญ ์๊ฒฉ ํธ์ถ์ด๋ค.
- ๋คํธ์ํฌ๋ฅผ ํตํ ์ ์ก ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆด ์ ์๋ค.
- ๋คํธ์ํฌ๋ฅผ ์ ๋ขฐํ ์ ์๋ค.
- ์๋ฒ๊ฐ ์ ์์ด๋ผ๋ ๋คํธ์ํฌ๋ ์คํจํ ์ ์๋ค.
- ํจํท ๋ณ์กฐ์ ์ํ์ฑ๋ ์ถฉ๋ถํ ๊ณ ๋ คํด๋ผ
- RPC ์ ์ ์ฉ ๋์
- ๋คํธ์ํฌ๊ฐ ์์ ํ ์จ๊ฒจ์ ธ ์์ ์ ๋๋ก ์๊ฒฉ ํธ์ถ์ ์ถ์ํํ์ง ๋ง์
- ํด๋ผ์ด์ธํธ์ ์๊ด ์์ด ์ธํฐํ์ด์ค ๊ฐ์ ์ฌ๋ถ๋ฅผ ๊ณ ๋ คํด๋ผ
- ๋๊ธฐ์ ์์ฒญ ๋ฐ ์๋ต ๋ชจ๋ธ์ ์ ํฉ
- ๋ฐ์ํ ํ์ฅ (reactive extension) ์๋ ์ ํฉ
- REST (Representational State Transfer)
- ๋ฆฌ์์ค (Resource) → ๊ฐ์ฅ ์ค์
- ๋ฆฌ์ฐจ๋์จ ์ฑ์๋ ๋ชจ๋ธ
- https://brunch.co.kr/@pubjinson/12
- HATEOAS
- ๋ค์ํ ํฌ๋งท์ผ๋ก ๋ ์ฌ๋ฌ ๋ค์ํ ์ปจํ ์ธ ์ ๋ํ ๋งํฌ๊ฐ ์ปจํ ์ธ ์ ํฌํจ๋ ๊ฐ๋
- ์ผ๋ฐ ์นํ์ด์ง์์ ์ฝ๊ฒ ๋ณผ ์ ์๋ ๊ฐ๋
์ด๋ค.
- ์๋ง์กด ์ผํ ์ฌ์ดํธ ์๊ฐ.
- ์ฑ๋ฅ ๋ฌธ์
- HTTP ์์ฒญ๋ง๋ค ๋ฐ์ํ๋ ์ค๋ฒํค๋
- ๋๋ถ๋ถ TCP ์ง๋ง, RPC ์์๋ UDP ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ์ ์ฉ ๋์
- ๋ค์ํ ํด๋ผ์ด์ธํธ์ ์ก์ธ์ค๋ฅผ ํ์ฉ → ๋๊ธฐ์ ์์ฒญ ๋ฐ ์๋ต ์ธํฐํ์ด์ค๋ฅผ ์ํ ํ์คํ ์ ํ
- ๊ฐ์ฅ ๋๊ฒ ์ฌ์ฉ๋๋ ์ธํฐํ์ด์ค ๋ฐฉ์
- ๋ค์ํ ๊ธฐ์ ๊ฐ์ ์ํธ ์ด์ฉ์ฑ
- ๋ฆฌ์์ค (Resource) → ๊ฐ์ฅ ์ค์
- ๊ทธ๋ํQL (GraphQL)
- ๋ชจ๋ฐ์ผ ์ฅ์น์์ ํ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ๋ฌ ํธ์ถ์ด ํ์ํ์ง๋ง, ํ๋ฒ์ ๊ฐ์ ธ์ค๋ ๋จ์ผ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์๋ค.
- ^ ์๋ํฌ์ธํธ๋ฅผ ํด๋ผ์ด์ธํธ ์ฅ์น์ ๋ ธ์ถํ๋ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ํ์ํ๋ค.
- ๋ฌธ์ ์
- ํด๋ผ์ด์ธํธ ์ฅ์น๋ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์คํ ๊ฐ๋ฅ
- ์๋ฒ ์ธก์ ์๋นํ ๋ถํ๋ฅผ ์ค ์ฌ๋ก
- SQL ๊ณผ ๋ฌ๋ฆฌ ์ฟผ๋ฆฌ ํ๋๋๊ฐ ์์ด์ ๋ฌธ์ ์ถ์ ์ ์ด๋ ค์์ด ์๋ค.
- ์บ์ฑ์ด ์ด๋ ต๋ค.
- ๋ฐํํ ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํด ID ์ฐ๊ด๊ด๊ณ๋ฅผ ์์ฑ ํ ID ์ ๋ํ ์์ฒญ์ ํด๋ผ์ด์ธํธ ์ฅ์น๊ฐ ์บ์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์
- ์ฐ๊ธฐ์ ์ ํฉํ์ง ์์๋ณด์ธ๋ค.
- ํด๋ผ์ด์ธํธ ์ฅ์น๋ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์คํ ๊ฐ๋ฅ
- ์ ์ฉ ๋์
- ์ธ๋ถ ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ฅ์ ๋
ธ์ถํ๋ ์์คํ
์ ๊ฒฝ๊ณ์์ ์ฌ์ฉ
- ๋ชจ๋ฐ์ผ ์ฅ์น
- ํธ์ถ ์ง๊ณ ๋ฐ ํํฐ๋ง ๋งค์ปค๋์ฆ
- ํ์ ๋ง์ดํฌ๋ก์๋น์ค์ ๋ํ ํธ์ถ์ ์ง๊ณํ๋ ๋ฐ ์ฌ์ฉ
- BFF (Backend For Frontend) ํจํด์ด ๋์
- ์ธ๋ถ ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ฅ์ ๋
ธ์ถํ๋ ์์คํ
์ ๊ฒฝ๊ณ์์ ์ฌ์ฉ
- ๋ชจ๋ฐ์ผ ์ฅ์น์์ ํ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ๋ฌ ํธ์ถ์ด ํ์ํ์ง๋ง, ํ๋ฒ์ ๊ฐ์ ธ์ค๋ ๋จ์ผ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์๋ค.
- ๋ฉ์์ง ๋ธ๋ก์ปค (Message Broker)
- ๋ฏธ๋ค์จ์ด
- ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ๊ด๋ฆฌ
- ๋ฉ์์ง
- ์์ฒญ ๋ฐ ์๋ต ๋๋ ์ด๋ฒคํธ๊ฐ ํฌํจ
- ํ ํฝ๊ณผ ํ
- ํ
- ๋ ์ง์ ๊ฐ (point to point)
- ๋ถํ ๋ถ์ฐ ๋งค์ปค๋์ฆ์ผ๋ก ์๋ํจ (๊ฒฝ์ ์๋น์ ํจํด)
- ํ๋์ ์๋น์๋ง ๋ฉ์์ง๋ฅผ ๋ฐ์
- ์์ฒญ ๋ฐ ์๋ต์ ์ ํฉ
- ํ ํฝ
- ์ฌ๋ฌ ์๋น์๊ฐ ํ ํฝ์ ๊ตฌ๋ ํ์ฌ ํด๋น ๋ฉ์์ง์ ๋ณต์ฌ๋ณธ์ ๋ฐ์
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ์
๋ฐฉ์์ ์ ํฉ
- ์ด๋ฒคํธ ๋ธ๋ก๋์บ์คํธ์ ์ ์ฉ
- ํ
- ์ ๋ฌ ๋ณด์ฅ๊ณผ ์ ๋ขฐ
- ์ ํํ ํ ๋ฒ (exactly once)
- ๊ตฌํํ๊ธฐ ์ด๋ ต๊ฒ ์ง๋ง, ์ ๋ง ์ ๋ขฐ๊ฐ ๊น์ ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ธ ๊ฒ ๊ฐ๋ค.
- ๋ณดํต ๋ฉ์์ง์ ID ๊ฐ์ ํฌํจํ์ฌ ๊ตฌํ
- ์ ํํ ํ ๋ฒ (exactly once)
- ๋ฏธ๋ค์จ์ด
5.4 ์คํค๋ง
- ๊ตฌ์กฐ์ ๊ณ์ฝ ์๋ฐ
- ์๋น์๊ฐ ๋ ์ด์ ํธํ๋์ง ์๋ ๋ฐฉ์์ผ๋ก ์๋ํฌ์ธํธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ
- ํ๋, ๋ฉ์๋ ์ ๊ฑฐ, ์๋ก์ด ํ๋ ์ถ๊ฐ๋๋ ๊ฒ ๋ฑ๋ฑ
- ๊ทธ๋๋ง ๋ฐ๊ฒฌํ๊ธฐ ์ฌ์
- ์๋น์๊ฐ ๋ ์ด์ ํธํ๋์ง ์๋ ๋ฐฉ์์ผ๋ก ์๋ํฌ์ธํธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ
- ์๋ฏธ์ ๊ณ์ฝ ์๋ฐ
- ๋ด๋ถ ๋์์ด ๋ณ๊ฒฝ๋จ
- ๋ฉ์๋์ ์๋ฏธ๊ฐ ์๋น์์ ๊ธฐ๋์ ๋ค๋ฅด๊ฒ ์ฒด๊ณ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
- ์ํต๊ณผ ๋ฌธ์ํ
- ์ง์์ ์ธ ๋ฐฉ์์ผ๋ก ์ด์ ๋ฐ ํด๊ฒฐํด์ผ.
5.6 ์ค๋จ ๋ณ๊ฒฝ ํผํ๊ธฐ
- ๊ด๋ํ ๋ ์
- ๋น์ ์ด ํ๋ ์ผ์๋ ์๊ฒฉํ๊ณ , ๋จ์๊ฒ์ ๋ฐ์๋ค์ผ ๋๋ ๋๊ทธ๋ฝ๊ฒ ํ๋ผ
- ๋ช
์์ ์ธํฐํ์ด์ค
- ์จ๊ฒจ์ง ์ ๋ณด์ ๊ฒฝ๊ณ๋ฅผ ๋ช ํํ๊ฒ ํ๋ค.
- ๊ฒฐ๊ตญ ํ ์คํธ๋ฅผ ํด๋ณด์
๋ฐ์ํ