์๋ฒ๋ฆฌ์ค ํจ์ ๊ตฌ์ฑ ๋ฐ ์ค์ผ์คํธ๋ ์ด์ ์ด ์ด๋ป๊ฒ ํ๋ก ํธ์๋ ์ํคํ ์ฒ๋ฅผ ํ์ ํ๊ณ , ํด๋ผ์ด์ธํธ ์ธก ๋ก์ง์ ๋จ์ํํ๋ฉฐ, ๋ณต์๋ ฅ ์๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋์ง ์์๋ณด์ธ์.
ํ๋ก ํธ์๋ ์๋ฒ๋ฆฌ์ค ์ํคํ ์ฒ: ํจ์ ๊ตฌ์ฑ ๋ฐ ์ค์ผ์คํธ๋ ์ด์ ์ฌ์ธต ๋ถ์
๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ํ๋ก ํธ์๋์ ์ญํ ์ ๋จ์ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ ๋๋ง์ ๋์ด ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ํ ๊ด๋ฆฌ, ์ ๊ตํ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ, ์๋ง์ ๋น๋๊ธฐ ์์ ์ค์ผ์คํธ๋ ์ด์ ๊น์ง ํ์ฅ๋์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๊ตํด์ง์๋ก ๊ทธ ์ด๋ฉด์ ๋ณต์ก์ฑ๋ ์ฆ๊ฐํฉ๋๋ค. ์ ํต์ ์ธ ๋ชจ๋๋ฆฌ์ ๋ฐฑ์๋๋ ์ด๊ธฐ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ ๋๋๋ก ๋ณ๋ชฉ ํ์์ ์ ๋ฐํ์ฌ ํ๋ก ํธ์๋์ ๋ฏผ์ฒฉ์ฑ์ ๋ฐฑ์๋์ ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ์ ์ข ์์ํฌ ์ ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์, ํนํ ํ๋ก ํธ์๋๋ฅผ ์ํ ์๋ฒ๋ฆฌ์ค ์ํคํ ์ฒ๊ฐ ํจ๋ฌ๋ค์์ ์ ํ์ ์ ์ํฉ๋๋ค.
ํ์ง๋ง ์๋ฒ๋ฆฌ์ค๋ฅผ ๋์ ํ๋ ๊ฒ์ ๋จ์ํ ๊ฐ๋ณ ํจ์๋ฅผ ์์ฑํ๋ ๊ฒ๋งํผ ๊ฐ๋จํ์ง ์์ต๋๋ค. ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋จ์ผํ๊ณ ๊ณ ๋ฆฝ๋ ์์ ํ๋๋ก ํ์คํฌ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ๋ ๋๋ญ ๋๋ค. ์คํ๋ ค ์ผ๋ จ์ ๋จ๊ณ, ๋ณ๋ ฌ ํ๋ก์ธ์ค, ์กฐ๊ฑด๋ถ ๋ก์ง์ ํฌํจํ๋ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ง์ต๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด ๋ชจ๋๋ฆฌ์ ์ฌ๊ณ ๋ฐฉ์์ผ๋ก ํ๊ทํ๊ฑฐ๋ ์๋ก ์ฝํ ๋ณต์กํ ํจ์๋ค์ ํผ๋์ ๋ง๋ค์ง ์์ผ๋ฉด์ ์ด๋ฌํ ๋ณต์กํ ์ํฌํ๋ก์ฐ๋ฅผ ๊ด๋ฆฌํ ์ ์์๊น์? ํด๋ต์ ๋ ๊ฐ์ง ๊ฐ๋ ฅํ ๊ฐ๋ , ์ฆ ํจ์ ๊ตฌ์ฑ(function composition)๊ณผ ํจ์ ์ค์ผ์คํธ๋ ์ด์ (function orchestration)์ ์์ต๋๋ค.
์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์ด๋ฌํ ํจํด๋ค์ด ์ด๋ป๊ฒ BFF(Backend-for-Frontend) ๋ ์ด์ด๋ฅผ ๋ณํ์ํค๊ณ , ๊ฐ๋ฐ์๋ค์ด ๊ฒฌ๊ณ ํ๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๊ฒ ํ๋์ง ํ๊ตฌํ ๊ฒ์ ๋๋ค. ํต์ฌ ๊ฐ๋ ์ ๋ถ์ํ๊ณ , ์ผ๋ฐ์ ์ธ ํจํด์ ๊ฒํ ํ๋ฉฐ, ์ฃผ์ ํด๋ผ์ฐ๋ ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค๋ฅผ ํ๊ฐํ๊ณ , ์ค์ ์์ ๋ฅผ ํตํด ์ฌ๋ฌ๋ถ์ ์ดํด๋ฅผ ๊ตณ๊ฑดํ ๋ค์ง ๊ฒ์ ๋๋ค.
ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ์งํ์ ์๋ฒ๋ฆฌ์ค BFF์ ๋ถ์
์๋ฒ๋ฆฌ์ค ์ค์ผ์คํธ๋ ์ด์ ์ ์ค์์ฑ์ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด, ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ์ฌ์ ์ ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ์๋ฒ ๋ ๋๋ง ํ์ด์ง์์ REST๋ GraphQL API๋ฅผ ํตํด ๋ฐฑ์๋์ ํต์ ํ๋ ํ๋ถํ SPA(Single-Page Applications)๋ก ์ด๋ํ์ต๋๋ค. ์ด๋ฌํ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ ์ค์ํ ์ง์ ์ด์์ง๋ง, ์๋ก์ด ๊ณผ์ ๋ค์ ์ผ๊ธฐํ์ต๋๋ค.
๋ชจ๋๋ฆฌ์์์ ๋ง์ดํฌ๋ก์๋น์ค์ BFF๋ก
์ด๊ธฐ์ SPA๋ ์ข ์ข ๋จ์ผํ ๋ชจ๋๋ฆฌ์ ๋ฐฑ์๋ API์ ํต์ ํ์ต๋๋ค. ์ด๋ ๊ฐ๋จํ์ง๋ง ์ทจ์ฝํ์ต๋๋ค. ๋ชจ๋ฐ์ผ ์ฑ์ ์ํ ์์ ๋ณ๊ฒฝ์ด ์น ์ฑ์ ๋ง๊ฐ๋จ๋ฆด ์ ์์์ต๋๋ค. ๋ง์ดํฌ๋ก์๋น์ค ์ด๋์ ๋ชจ๋๋ฆฌ์์ ๋ ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ์๋น์ค๋ก ๋ถํดํจ์ผ๋ก์จ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ํ์ง๋ง ์ด๋ ์ข ์ข ํ๋ก ํธ์๋๊ฐ ๋จ์ผ ๋ทฐ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ์ฌ๋ฌ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ํธ์ถํด์ผ ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์๊ณ , ์ด๋ ๋ฒ๊ฑฐ๋กญ๊ณ ๋ณต์กํ ํด๋ผ์ด์ธํธ ์ธก ๋ก์ง์ผ๋ก ์ด์ด์ก์ต๋๋ค.
BFF(Backend-for-Frontend) ํจํด์ด ํด๊ฒฐ์ฑ ์ผ๋ก ๋ฑ์ฅํ์ต๋๋ค. BFF๋ ํน์ ํ๋ก ํธ์๋ ๊ฒฝํ(์: ์น ์ฑ์ฉ, iOS ์ฑ์ฉ)์ ์ํ ์ ์ฉ ๋ฐฑ์๋ ๋ ์ด์ด์ ๋๋ค. ์ด๋ ํ์ฌ๋(facade) ์ญํ ์ ํ์ฌ ๋ค์ํ ๋ค์ด์คํธ๋ฆผ ๋ง์ดํฌ๋ก์๋น์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํ๊ณ ํด๋ผ์ด์ธํธ์ ์๊ตฌ์ ๋ง๊ฒ API ์๋ต์ ๋ง์ถคํํฉ๋๋ค. ์ด๋ ํ๋ก ํธ์๋ ์ฝ๋๋ฅผ ๋จ์ํํ๊ณ , ๋คํธ์ํฌ ์์ฒญ ์๋ฅผ ์ค์ด๋ฉฐ, ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
BFF๋ฅผ ์ํ ์๋ฒฝํ ์กฐํฉ, ์๋ฒ๋ฆฌ์ค
์๋ฒ๋ฆฌ์ค ํจ์, ์ฆ FaaS(Function-as-a-Service)๋ BFF๋ฅผ ๊ตฌํํ๋ ๋ฐ ์์ฐ์ค๋ฝ๊ฒ ๋ถํฉํฉ๋๋ค. BFF๋ฅผ ์ํด ๊ณ์ ์คํ๋๋ ์๋ฒ๋ฅผ ์ ์งํ๋ ๋์ , ์๊ณ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ธ ํจ์๋ค์ ์ปฌ๋ ์ ์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ๊ฐ ํจ์๋ ํน์ API ์๋ํฌ์ธํธ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ๊ฒฐ์ ์ฒ๋ฆฌ, ๋ด์ค ํผ๋ ์ง๊ณ์ ๊ฐ์ ํน์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋๋ผ์ด ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ํ์ฅ์ฑ: ํจ์๋ ์์์ ๋ฐ๋ผ ์๋์ผ๋ก ํ์ฅ๋๋ฉฐ, 0์์ ์์ฒ ๊ฐ์ ํธ์ถ๊น์ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋น์ฉ ํจ์จ์ฑ: ์ฌ์ฉํ ์ปดํจํ ์๊ฐ์ ๋ํด์๋ง ๋น์ฉ์ ์ง๋ถํ๋ฏ๋ก, ์ข ์ข ํญ๋ฐ์ ์ธ ํธ๋ํฝ ํจํด์ ๋ณด์ด๋ BFF์ ์ด์์ ์ ๋๋ค.
- ๊ฐ๋ฐ์ ์์ฐ์ฑ: ์๊ณ ๋ ๋ฆฝ์ ์ธ ํจ์๋ ๊ฐ๋ฐ, ํ ์คํธ, ๋ฐฐํฌ๊ฐ ๋ ์ฝ์ต๋๋ค.
ํ์ง๋ง ์ด๋ ์๋ก์ด ๊ณผ์ ๋ก ์ด์ด์ง๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ, BFF๋ ๋จ์ผ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํน์ ์์๋ก ์ฌ๋ฌ ํจ์๋ฅผ ํธ์ถํด์ผ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ๊ฐ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ฝ๋ ์์ฑ, ๊ฒฐ์ ์๋น์ค ํธ์ถ, ํ์ ์ด๋ฉ์ผ ๋ฐ์ก์ ํฌํจํ ์ ์์ต๋๋ค. ํ๋ก ํธ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด ์์๋ฅผ ๊ด๋ฆฌํ๊ฒ ํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๊ณ ์์ ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ํจ์ ๊ตฌ์ฑ๊ณผ ์ค์ผ์คํธ๋ ์ด์ ์ด ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ฌธ์ ์ ๋๋ค.
ํต์ฌ ๊ฐ๋ ์ดํด: ๊ตฌ์ฑ๊ณผ ์ค์ผ์คํธ๋ ์ด์
ํจํด๊ณผ ๋๊ตฌ์ ๋ํด ์์๋ณด๊ธฐ ์ ์, ํต์ฌ ์ฉ์ด์ ๋ช ํํ ์ ์๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค.
์๋ฒ๋ฆฌ์ค ํจ์(FaaS)๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก, ์๋ฒ๋ฆฌ์ค ํจ์(์: AWS Lambda, Azure Functions, ๋๋ Google Cloud Functions)๋ ์ด๋ฒคํธ์ ์๋ตํ์ฌ ์คํ๋๋ ์ํ ๋น์ ์ฅ(stateless)์ ๋จ๊ธฐ ์คํ ์ปดํจํ ์ธ์คํด์ค์ ๋๋ค. ์ด๋ฒคํธ๋ API ๊ฒ์ดํธ์จ์ด๋ก๋ถํฐ์ HTTP ์์ฒญ, ์คํ ๋ฆฌ์ง ๋ฒํท์ผ๋ก์ ์ ํ์ผ ์ ๋ก๋, ๋๋ ํ์ ๋ฉ์์ง์ผ ์ ์์ต๋๋ค. ํต์ฌ ์์น์ ๊ฐ๋ฐ์์ธ ์ฌ๋ฌ๋ถ์ด ๊ธฐ๋ณธ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
ํจ์ ๊ตฌ์ฑ(Function Composition)์ด๋ ๋ฌด์์ธ๊ฐ?
ํจ์ ๊ตฌ์ฑ์ ์ฌ๋ฌ ๊ฐ์ ๋จ์ํ๊ณ ๋จ์ผ ๋ชฉ์ ์ ๊ฐ์ง ํจ์๋ฅผ ๊ฒฐํฉํ์ฌ ๋ณต์กํ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ๋ ๋์์ธ ํจํด์ ๋๋ค. ๋ ๊ณ ๋ธ๋ก์ผ๋ก ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๊ฐ ๋ธ๋ก(ํจ์)์ ํน์ ๋ชจ์๊ณผ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฅผ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐํจ์ผ๋ก์จ ์ ๊ตํ ๊ตฌ์กฐ๋ฌผ(์ํฌํ๋ก์ฐ)์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ตฌ์ฑ์ ์ด์ ์ ํจ์ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์์ต๋๋ค.
ํจ์ ์ค์ผ์คํธ๋ ์ด์ (Function Orchestration)์ด๋ ๋ฌด์์ธ๊ฐ?
ํจ์ ์ค์ผ์คํธ๋ ์ด์ ์ ๊ทธ๋ฌํ ๊ตฌ์ฑ์ ๊ตฌํํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ฏธ๋ฆฌ ์ ์๋ ์ํฌํ๋ก์ฐ์ ๋ฐ๋ผ ํจ์์ ์คํ์ ์ง์ํ๋ ์ค์ ์ปจํธ๋กค๋ฌ, ์ฆ ์ค์ผ์คํธ๋ ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. ์ค์ผ์คํธ๋ ์ดํฐ๋ ๋ค์์ ์ฑ ์์ง๋๋ค:
- ํ๋ฆ ์ ์ด: ์์ฐจ์ , ๋ณ๋ ฌ์ ๋๋ ์กฐ๊ฑด๋ถ ๋ก์ง(๋ถ๊ธฐ)์ ๋ฐ๋ผ ํจ์๋ฅผ ์คํํฉ๋๋ค.
- ์ํ ๊ด๋ฆฌ: ์ํฌํ๋ก์ฐ๊ฐ ์งํ๋จ์ ๋ฐ๋ผ ์ํ๋ฅผ ์ถ์ ํ๊ณ ๋จ๊ณ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ์ค๋ฅ ์ฒ๋ฆฌ: ํจ์์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ์ฌ์๋ ๋ก์ง์ด๋ ๋ณด์ ์กฐ์น(์: ํธ๋์ญ์ ๋กค๋ฐฑ)๋ฅผ ๊ตฌํํฉ๋๋ค.
- ์กฐ์ : ์ ์ฒด ๋ค๋จ๊ณ ํ๋ก์ธ์ค๊ฐ ๋จ์ผ ํธ๋์ญ์ ๋จ์๋ก ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๊ตฌ์ฑ vs. ์ค์ผ์คํธ๋ ์ด์ : ๋ช ํํ ๊ตฌ๋ถ
์ฐจ์ด์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ๊ตฌ์ฑ์ ์ค๊ณ ๋๋ '๋ฌด์์'์ ํด๋นํฉ๋๋ค. ์ ์ ์๊ฑฐ๋ ๊ฒฐ์ ์ ๊ฒฝ์ฐ, ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค: 1. ์ฅ๋ฐ๊ตฌ๋ ๊ฒ์ฆ -> 2. ๊ฒฐ์ ์ฒ๋ฆฌ -> 3. ์ฃผ๋ฌธ ์์ฑ -> 4. ํ์ธ ๋ฉ์ผ ๋ฐ์ก.
- ์ค์ผ์คํธ๋ ์ด์ ์ ์คํ ์์ง ๋๋ '์ด๋ป๊ฒ'์ ํด๋นํฉ๋๋ค. ์ค์ผ์คํธ๋ ์ดํฐ๋ ์ค์ ๋ก `validateCart` ํจ์๋ฅผ ํธ์ถํ๊ณ ์๋ต์ ๊ธฐ๋ค๋ฆฐ ๋ค์, ๊ทธ ๊ฒฐ๊ณผ๋ก `processPayment` ํจ์๋ฅผ ํธ์ถํ๊ณ , ๊ฒฐ์ ์คํจ ์ ์ฌ์๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฑ์ ์์ ์ ์ํํ๋ ์๋น์ค์ ๋๋ค.
๋จ์ํ ๊ตฌ์ฑ์ ํ ํจ์๊ฐ ๋ค๋ฅธ ํจ์๋ฅผ ์ง์ ํธ์ถํจ์ผ๋ก์จ ๋ฌ์ฑํ ์ ์์ง๋ง, ์ด๋ ๊ฐํ ๊ฒฐํฉ(tight coupling)๊ณผ ์ทจ์ฝ์ฑ์ ๋ง๋ญ๋๋ค. ์ง์ ํ ์ค์ผ์คํธ๋ ์ด์ ์ ์ํฌํ๋ก์ฐ ๋ก์ง์์ ํจ์๋ฅผ ๋ถ๋ฆฌํ์ฌ ํจ์ฌ ๋ ๋ณต์๋ ฅ ์๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์์คํ ์ ๋ง๋ญ๋๋ค.
์๋ฒ๋ฆฌ์ค ํจ์ ๊ตฌ์ฑ ํจํด
์๋ฒ๋ฆฌ์ค ํจ์๋ฅผ ๊ตฌ์ฑํ ๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ํจํด์ด ๋ํ๋ฉ๋๋ค. ํจ๊ณผ์ ์ธ ์ํฌํ๋ก์ฐ๋ฅผ ์ค๊ณํ๋ ค๋ฉด ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
1. ์ฒด์ด๋ (์์ฐจ์ ์คํ)
์ด๊ฒ์ ๊ฐ์ฅ ๊ฐ๋จํ ํจํด์ผ๋ก, ํจ์๊ฐ ์์๋๋ก ํ๋์ฉ ์คํ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ํจ์์ ์ถ๋ ฅ์ด ๋ ๋ฒ์งธ ํจ์์ ์ ๋ ฅ์ด ๋๋ ์์ ๋๋ค. ์ด๋ ์๋ฒ๋ฆฌ์ค ๋ฒ์ ์ ํ์ดํ๋ผ์ธ๊ณผ ๊ฐ์ต๋๋ค.
์ฌ์ฉ ์ฌ๋ก: ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์ํฌํ๋ก์ฐ. ํ๋ก ํธ์๋๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๋ฉด ์ํฌํ๋ก์ฐ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค:
- ํจ์ A (ValidateImage): ํ์ผ ์ ํ๊ณผ ํฌ๊ธฐ๋ฅผ ํ์ธํฉ๋๋ค.
- ํจ์ B (ResizeImage): ์ฌ๋ฌ ์ธ๋ค์ผ ๋ฒ์ ์ ์์ฑํฉ๋๋ค.
- ํจ์ C (AddWatermark): ๋ฆฌ์ฌ์ด์ฆ๋ ์ด๋ฏธ์ง์ ์ํฐ๋งํฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ํจ์ D (SaveToBucket): ์ต์ข ์ด๋ฏธ์ง๋ฅผ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ๋ฒํท์ ์ ์ฅํฉ๋๋ค.
2. ํฌ์์/ํฌ์ธ (๋ณ๋ ฌ ์คํ)
์ด ํจํด์ ์ฑ๋ฅ ํฅ์์ ์ํด ์ฌ๋ฌ ๋ ๋ฆฝ์ ์ธ ์์ ์ ๋์์ ์ํํ ์ ์์ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๋จ์ผ ํจ์(ํฌ์์)๊ฐ ์ฌ๋ฌ ๋ค๋ฅธ ํจ์๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๋๋ก ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ์ต์ข ํจ์(ํฌ์ธ)๋ ๋ชจ๋ ๋ณ๋ ฌ ์์ ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ง๊ณํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก: ๋น๋์ค ํ์ผ ์ฒ๋ฆฌ. ๋น๋์ค๊ฐ ์ ๋ก๋๋๋ฉด ์ํฌํ๋ก์ฐ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค:
- ํจ์ A (StartProcessing): ๋น๋์ค ํ์ผ์ ์์ ํ๊ณ ๋ณ๋ ฌ ์์ ์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
- ๋ณ๋ ฌ ์์
:
- ํจ์ B (TranscodeTo1080p): 1080p ๋ฒ์ ์ ์์ฑํฉ๋๋ค.
- ํจ์ C (TranscodeTo720p): 720p ๋ฒ์ ์ ์์ฑํฉ๋๋ค.
- ํจ์ D (ExtractAudio): ์ค๋์ค ํธ๋์ ์ถ์ถํฉ๋๋ค.
- ํจ์ E (GenerateThumbnails): ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ธ๋ค์ผ์ ์์ฑํฉ๋๋ค.
- ํจ์ F (AggregateResults): B, C, D, E๊ฐ ์๋ฃ๋๋ฉด ์ด ํจ์๋ ์์ฑ๋ ๋ชจ๋ ์์ฐ์ ๋งํฌ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
3. ๋น๋๊ธฐ ๋ฉ์์ง (์ด๋ฒคํธ ๊ธฐ๋ฐ ์ฝ๋ ์ค๊ทธ๋ํผ)
์๋ฐํ ๋งํด ์ค์ผ์คํธ๋ ์ด์ ์ ์๋์ง๋ง(์ข ์ข ์ฝ๋ ์ค๊ทธ๋ํผ๋ผ๊ณ ๋ถ๋ฆผ), ์ด ํจํด์ ์๋ฒ๋ฆฌ์ค ์ํคํ ์ฒ์์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ค์ ์ปจํธ๋กค๋ฌ ๋์ , ํจ์๋ค์ ๋ฉ์์ง ๋ฒ์ค๋ ํ(์: AWS SNS/SQS, Google Pub/Sub, Azure Service Bus)์ ์ด๋ฒคํธ๋ฅผ ๊ฒ์ํ์ฌ ํต์ ํฉ๋๋ค. ๋ค๋ฅธ ํจ์๋ค์ ์ด๋ฌํ ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ ํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๋ฐ์ํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก: ์ฃผ๋ฌธ ์ฒ๋ฆฌ ์์คํ .
- ํ๋ก ํธ์๋๊ฐ `placeOrder` ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
- `placeOrder` ํจ์๋ ์ฃผ๋ฌธ์ ๊ฒ์ฆํ๊ณ `OrderPlaced` ์ด๋ฒคํธ๋ฅผ ๋ฉ์์ง ๋ฒ์ค์ ๊ฒ์ํฉ๋๋ค.
- ์ฌ๋ฌ ๋
๋ฆฝ์ ์ธ ๊ตฌ๋
์ ํจ์๋ค์ด ์ด ์ด๋ฒคํธ์ ๋ฐ์ํฉ๋๋ค:
- `billing` ํจ์๊ฐ ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- `shipping` ํจ์๊ฐ ์ฐฝ๊ณ ์ ์๋ฆฝ๋๋ค.
- `notifications` ํจ์๊ฐ ๊ณ ๊ฐ์๊ฒ ํ์ธ ์ด๋ฉ์ผ์ ๋ณด๋ ๋๋ค.
๊ด๋ฆฌํ ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค์ ํ
์ด๋ฌํ ํจํด์ ์๋์ผ๋ก ๊ตฌํํ ์๋ ์์ง๋ง, ์ํ ๊ด๋ฆฌ, ์ค๋ฅ ์ฒ๋ฆฌ, ์คํ ์ถ์ ์ด ๊ธ๋ฐฉ ๋ณต์กํด์ง๋๋ค. ์ด๋ ์ฃผ์ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด์ ๊ด๋ฆฌํ ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค๊ฐ ๋งค์ฐ ์ ์ฉํด์ง๋๋ค. ์ด ์๋น์ค๋ค์ ๋ณต์กํ ์ํฌํ๋ก์ฐ๋ฅผ ์ ์, ์๊ฐํ, ์คํํ ์ ์๋ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
AWS Step Functions
AWS Step Functions๋ ์ํฌํ๋ก์ฐ๋ฅผ ์ํ ๋จธ์ ์ผ๋ก ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ฒ๋ฆฌ์ค ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค์ ๋๋ค. Amazon States Language(ASL)๋ผ๋ JSON ๊ธฐ๋ฐ ํ์์ ์ฌ์ฉํ์ฌ ์ ์ธ์ ์ผ๋ก ์ํฌํ๋ก์ฐ๋ฅผ ์ ์ํฉ๋๋ค.
- ํต์ฌ ๊ฐ๋ : ์๊ฐ์ ์ผ๋ก ์ค๊ณ ๊ฐ๋ฅํ ์ํ ๋จธ์ .
- ์ ์: ์ ์ธ์ JSON (ASL).
- ์ฃผ์ ํน์ง: ์๊ฐ์ ์ํฌํ๋ก์ฐ ํธ์ง๊ธฐ, ๋ด์ฅ๋ ์ฌ์๋ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง, ์ธ๊ฐ ๊ฐ์ ์ํฌํ๋ก์ฐ(์ฝ๋ฐฑ) ์ง์, 200๊ฐ ์ด์์ AWS ์๋น์ค์ ์ง์ ํตํฉ.
- ์ต์ ๋์: ์๊ฐ์ , ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์๊ณผ AWS ์ํ๊ณ์์ ๊น์ ํตํฉ์ ์ ํธํ๋ ํ.
๊ฐ๋จํ ์ํ์ค๋ฅผ ์ํ ์์ ASL ์ค๋ํซ:
{
"Comment": "๋จ์ํ ์์ฐจ์ ์ํฌํ๋ก์ฐ",
"StartAt": "FirstState",
"States": {
"FirstState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:MyFirstFunction",
"Next": "SecondState"
},
"SecondState": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:MySecondFunction",
"End": true
}
}
}
Azure Durable Functions
Durable Functions๋ ์ฝ๋ ์ฐ์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ํ ์ ์ฅ ์ํฌํ๋ก์ฐ๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ Azure Functions์ ํ์ฅ ๊ธฐ๋ฅ์ ๋๋ค. ์ ์ธ์ ์ธ์ด ๋์ C#, Python, JavaScript์ ๊ฐ์ ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ผ์คํธ๋ ์ด์ ๋ก์ง์ ์ ์ํฉ๋๋ค.
- ํต์ฌ ๊ฐ๋ : ์ค์ผ์คํธ๋ ์ด์ ๋ก์ง์ ์ฝ๋๋ก ์์ฑ.
- ์ ์: ๋ช ๋ นํ ์ฝ๋ (C#, Python, JavaScript ๋ฑ).
- ์ฃผ์ ํน์ง: ์ด๋ฒคํธ ์์ฑ ํจํด์ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ์์ ์ ์ผ๋ก ์ ์ง. ์ค์ผ์คํธ๋ ์ดํฐ, ์กํฐ๋นํฐ, ์ํฐํฐ ํจ์์ ๊ฐ์ ๊ฐ๋ ์ ๊ณต. ์ํ๋ ํ๋ ์์ํฌ์ ์ํด ์๋ฌต์ ์ผ๋ก ๊ด๋ฆฌ๋จ.
- ์ต์ ๋์: JSON์ด๋ YAML ๋์ ์ต์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ด์์ ๋ณต์กํ ๋ก์ง, ๋ฃจํ, ๋ถ๊ธฐ๋ฅผ ์ ์ํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฐ๋ฐ์.
๊ฐ๋จํ ์ํ์ค๋ฅผ ์ํ ์์ Python ์ค๋ํซ:
import azure.durable_functions as df
def orchestrator_function(context: df.DurableOrchestrationContext):
result1 = yield context.call_activity('MyFirstFunction', 'input1')
result2 = yield context.call_activity('MySecondFunction', result1)
return result2
Google Cloud Workflows
Google Cloud Workflows๋ YAML ๋๋ JSON์ ์ฌ์ฉํ์ฌ ์ํฌํ๋ก์ฐ๋ฅผ ์ ์ํ ์ ์๋ ์์ ๊ด๋ฆฌํ ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค์ ๋๋ค. Google Cloud ์๋น์ค์ HTTP ๊ธฐ๋ฐ API๋ฅผ ์ฐ๊ฒฐํ๊ณ ์๋ํํ๋ ๋ฐ ํ์ํฉ๋๋ค.
- ํต์ฌ ๊ฐ๋ : YAML/JSON ๊ธฐ๋ฐ ์ํฌํ๋ก์ฐ ์ ์.
- ์ ์: ์ ์ธ์ YAML ๋๋ JSON.
- ์ฃผ์ ํน์ง: ์ธ๋ถ ์๋น์ค ํธ์ถ์ ์ํ ๊ฐ๋ ฅํ HTTP ์์ฒญ ๊ธฐ๋ฅ, Google Cloud ์๋น์ค์ฉ ๋ด์ฅ ์ปค๋ฅํฐ, ๋ชจ๋์ ์ค๊ณ๋ฅผ ์ํ ํ์ ์ํฌํ๋ก์ฐ, ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ.
- ์ต์ ๋์: Google Cloud ์ํ๊ณ ๋ด๋ถ ๋ฐ ์ธ๋ถ์ HTTP ๊ธฐ๋ฐ API ์ฒด์ด๋์ ๋ง์ด ํฌํจํ๋ ์ํฌํ๋ก์ฐ.
๊ฐ๋จํ ์ํ์ค๋ฅผ ์ํ ์์ YAML ์ค๋ํซ:
main:
params: [args]
steps:
- first_step:
call: http.post
args:
url: https://example.com/myFirstFunction
body:
input: ${args.input}
result: firstResult
- second_step:
call: http.post
args:
url: https://example.com/mySecondFunction
body:
data: ${firstResult.body}
result: finalResult
- return_value:
return: ${finalResult.body}
์ค์ฉ์ ์ธ ํ๋ก ํธ์๋ ์๋๋ฆฌ์ค: ์ฌ์ฉ์ ์จ๋ณด๋ฉ ์ํฌํ๋ก์ฐ
์ด ๋ชจ๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ ์ค์ ์์ , ์ฆ ์ ๊ท ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ ํ๋ ๊ฒฝ์ฐ์ ์ฐ๊ฒฐํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ํ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์ ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- ๋ณ๋ ฌ์ ์ผ๋ก:
- ํ์ ์ด๋ฉ์ผ์ ๋ณด๋ ๋๋ค.
- ์ฌ์ฉ์์ IP์ ์ด๋ฉ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๊ธฐ ํ์ง ๊ฒ์ฌ๋ฅผ ์คํํฉ๋๋ค.
- ์ฌ๊ธฐ ํ์ง ๊ฒ์ฌ๋ฅผ ํต๊ณผํ๋ฉด ๊ฒฐ์ ์์คํ ์ ํ๊ฐํ ๊ตฌ๋ ์ ์์ฑํฉ๋๋ค.
- ์ฌ๊ธฐ ํ์ง ๊ฒ์ฌ์ ์คํจํ๋ฉด ๊ณ์ ์ ํ๋๊ทธ๋ฅผ ์ง์ ํ๊ณ ์ง์ํ์ ์๋ฆฝ๋๋ค.
- ์ฌ์ฉ์์๊ฒ ์ฑ๊ณต ๋๋ ์คํจ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
์๋ฃจ์ 1: '๋จ์ํ' ํ๋ก ํธ์๋ ์ฃผ๋ ์ ๊ทผ ๋ฐฉ์
์ค์ผ์คํธ๋ ์ด์ ๋ BFF๊ฐ ์๋ค๋ฉด ํ๋ก ํธ์๋ ํด๋ผ์ด์ธํธ๊ฐ ์ด ๋ก์ง์ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ์ผ๋ จ์ API ํธ์ถ์ ์ํํ ๊ฒ์ ๋๋ค:
- `POST /api/users` -> ์๋ต ๋๊ธฐ.
- `POST /api/emails/welcome` -> ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ.
- `POST /api/fraud-check` -> ์๋ต ๋๊ธฐ.
- ์ฌ๊ธฐ ํ์ง ๊ฒ์ฌ ์๋ต์ ๋ฐ๋ฅธ ํด๋ผ์ด์ธํธ ์ธก `if/else`:
- ํต๊ณผ ์: `POST /api/subscriptions/trial`.
- ์คํจ ์: `POST /api/users/flag`.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ์ฌ๊ฐํ ๊ฒฐํจ์ด ์์ต๋๋ค:
- ์ทจ์ฝํ๊ณ ๋ฒ๊ฑฐ๋ก์: ํด๋ผ์ด์ธํธ๊ฐ ๋ฐฑ์๋ ํ๋ก์ธ์ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋ฉ๋๋ค. ์ํฌํ๋ก์ฐ ๋ณ๊ฒฝ ์ ํ๋ก ํธ์๋ ๋ฐฐํฌ๊ฐ ํ์ํฉ๋๋ค. ๋ํ ์ฌ๋ฌ ๋คํธ์ํฌ ์์ฒญ์ ๋ฐ์์ํต๋๋ค.
- ํธ๋์ญ์ ๋ฌด๊ฒฐ์ฑ ์์: ์ฌ์ฉ์ ๋ ์ฝ๋๊ฐ ์์ฑ๋ ํ ๊ตฌ๋ ์์ฑ์ด ์คํจํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์์คํ ์ ์ด์ ์ผ๊ด์ฑ ์๋ ์ํ์ ๋น ์ง๊ณ , ํด๋ผ์ด์ธํธ๋ ๋ณต์กํ ๋กค๋ฐฑ ๋ก์ง์ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
- ๋์ ์ฌ์ฉ์ ๊ฒฝํ: ์ฌ์ฉ์๋ ์ฌ๋ฌ ์์ฐจ์ ์ธ ๋คํธ์ํฌ ํธ์ถ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
- ๋ณด์ ์ํ: `flag-user`๋ `create-trial`๊ณผ ๊ฐ์ ์ธ๋ถํ๋ API๋ฅผ ํด๋ผ์ด์ธํธ์ ์ง์ ๋ ธ์ถํ๋ ๊ฒ์ ๋ณด์ ์ทจ์ฝ์ ์ด ๋ ์ ์์ต๋๋ค.
์๋ฃจ์ 2: ์ค์ผ์คํธ๋ ์ด์ ๋ ์๋ฒ๋ฆฌ์ค BFF ์ ๊ทผ ๋ฐฉ์
์ค์ผ์คํธ๋ ์ด์ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ํคํ ์ฒ๊ฐ ํฌ๊ฒ ๊ฐ์ ๋ฉ๋๋ค. ํ๋ก ํธ์๋๋ ๋จ ํ๋์ ์์ ํ API ํธ์ถ๋ง ์ํํฉ๋๋ค:
POST /api/onboarding
์ด API ๊ฒ์ดํธ์จ์ด ์๋ํฌ์ธํธ๋ ์ํ ๋จธ์ (์: AWS Step Functions)์ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค. ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ ์ ์ด๊ถ์ ๋๊ฒจ๋ฐ์ ์ํฌํ๋ก์ฐ๋ฅผ ์คํํฉ๋๋ค:
- ์์ ์ํ: API ํธ์ถ๋ก๋ถํฐ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ์ ๋ ์ฝ๋ ์์ฑ (Task): DynamoDB๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ๋๋ค ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
- ๋ณ๋ ฌ ์ํ: ๋ ๊ฐ์ ๋ธ๋์น๋ฅผ ๋์์ ์คํํฉ๋๋ค.
- ๋ธ๋์น 1 (์ด๋ฉ์ผ): ํ์ ์ด๋ฉ์ผ์ ๋ณด๋ด๋ ๋๋ค ํจ์๋ SNS ํ ํฝ์ ํธ์ถํฉ๋๋ค.
- ๋ธ๋์น 2 (์ฌ๊ธฐ ํ์ง ๊ฒ์ฌ): ์ 3์ ์ฌ๊ธฐ ํ์ง ์๋น์ค๋ฅผ ํธ์ถํ๋ ๋๋ค ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
- ์ ํ ์ํ (๋ถ๊ธฐ ๋ก์ง): ์ฌ๊ธฐ ํ์ง ๊ฒ์ฌ ๋จ๊ณ์ ์ถ๋ ฅ์ ๊ฒ์ฌํฉ๋๋ค.
- `fraud_score < threshold` (ํต๊ณผ)์ธ ๊ฒฝ์ฐ: '๊ตฌ๋ ์์ฑ' ์ํ๋ก ์ ํํฉ๋๋ค.
- `fraud_score >= threshold` (์คํจ)์ธ ๊ฒฝ์ฐ: '๊ณ์ ํ๋๊ทธ ์ง์ ' ์ํ๋ก ์ ํํฉ๋๋ค.
- ๊ตฌ๋ ์์ฑ (Task): Stripe๋ Braintree API์ ์ํธ ์์ฉํ๋ ๋๋ค ํจ์๋ฅผ ํธ์ถํฉ๋๋ค. ์ฑ๊ณต ์ '์ฑ๊ณต' ์ข ๋ฃ ์ํ๋ก ์ ํํฉ๋๋ค.
- ๊ณ์ ํ๋๊ทธ ์ง์ (Task): ์ฌ์ฉ์ ๋ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋๋ค๋ฅผ ํธ์ถํ ๋ค์, ์ง์ํ์ ์๋ฆฌ๋ ๋ค๋ฅธ ๋๋ค๋ SNS ํ ํฝ์ ํธ์ถํฉ๋๋ค. '์คํจ' ์ข ๋ฃ ์ํ๋ก ์ ํํฉ๋๋ค.
- ์ข ๋ฃ ์ํ (์ฑ๊ณต/์คํจ): ์ํฌํ๋ก์ฐ๊ฐ ์ข ๋ฃ๋๊ณ , API ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ํ๋ก ํธ์๋์ ๊น๋ํ ์ฑ๊ณต ๋๋ ์คํจ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ์ค์ผ์คํธ๋ ์ด์ ๋ ์ ๊ทผ ๋ฐฉ์์ ์ด์ ์ ์์ฒญ๋ฉ๋๋ค:
- ๋จ์ํ๋ ํ๋ก ํธ์๋: ํด๋ผ์ด์ธํธ์ ์ ์ผํ ์๋ฌด๋ ํ ๋ฒ์ ํธ์ถ์ ํ๊ณ ํ๋์ ์๋ต์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ๋ณต์กํ ๋ก์ง์ ๋ฐฑ์๋์ ์บก์ํ๋ฉ๋๋ค.
- ๋ณต์๋ ฅ ๋ฐ ์ ๋ขฐ์ฑ: ์ค์ผ์คํธ๋ ์ดํฐ๋ ์คํจํ ๋จ๊ณ(์: ๊ฒฐ์ API๊ฐ ์ผ์์ ์ผ๋ก ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ)๋ฅผ ์๋์ผ๋ก ์ฌ์๋ํ ์ ์์ต๋๋ค. ์ ์ฒด ํ๋ก์ธ์ค๋ ํธ๋์ญ์ ๋ฐฉ์์ ๋๋ค.
- ๊ฐ์์ฑ ๋ฐ ๋๋ฒ๊น : ๊ด๋ฆฌํ ์ค์ผ์คํธ๋ ์ดํฐ๋ ๋ชจ๋ ์คํ์ ๋ํ ์์ธํ ์๊ฐ์ ๋ก๊ทธ๋ฅผ ์ ๊ณตํ์ฌ ์ํฌํ๋ก์ฐ๊ฐ ์ด๋์ ์ ์คํจํ๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ: ์ํฌํ๋ก์ฐ ๋ก์ง์ด ํจ์ ๋ด๋ถ์ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌ๋ฉ๋๋ค. ๊ฐ๋ณ ๋๋ค ํจ์๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์ํฌํ๋ก์ฐ๋ฅผ ๋ณ๊ฒฝ(์: ์ ๋จ๊ณ ์ถ๊ฐ)ํ ์ ์์ต๋๋ค.
- ํฅ์๋ ๋ณด์: ํ๋ก ํธ์๋๋ ๋จ์ผ์ ๊ฐํ๋ API ์๋ํฌ์ธํธ์๋ง ์ํธ ์์ฉํฉ๋๋ค. ์ธ๋ถํ๋ ํจ์์ ๊ทธ ๊ถํ์ ๋ฐฑ์๋ VPC๋ ๋คํธ์ํฌ ๋ด์ ์จ๊ฒจ์ง๋๋ค.
ํ๋ก ํธ์๋ ์๋ฒ๋ฆฌ์ค ์ค์ผ์คํธ๋ ์ด์ ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์ด๋ฌํ ํจํด์ ์ฑํํ ๋, ์ํคํ ์ฒ๋ฅผ ๊น๋ํ๊ณ ํจ์จ์ ์ผ๋ก ์ ์งํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ ๋ฐ์ ์ธ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ช ์ฌํ์ญ์์ค.
- ํจ์๋ฅผ ์ธ๋ถํ๋๊ณ ์ํ ๋น์ ์ฅ์ผ๋ก ์ ์ง: ๊ฐ ํจ์๋ ํ ๊ฐ์ง ์ผ์ ์ํด์ผ ํฉ๋๋ค(๋จ์ผ ์ฑ ์ ์์น). ํจ์๊ฐ ์์ฒด ์ํ๋ฅผ ์ ์งํ๋๋ก ํ์ง ๋ง์ญ์์ค. ์ด๋ ์ค์ผ์คํธ๋ ์ดํฐ์ ์ญํ ์ ๋๋ค.
- ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๋๋ก ํ์ฉ: ํฌ๊ณ ๋ณต์กํ JSON ํ์ด๋ก๋๋ฅผ ํ ํจ์์์ ๋ค์ ํจ์๋ก ์ ๋ฌํ์ง ๋ง์ญ์์ค. ๋์ `userID`๋ `orderID`์ ๊ฐ์ ์ต์ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ , ๊ฐ ํจ์๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ํ์ญ์์ค. ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ ์ํฌํ๋ก์ฐ ์ํ์ ์ง์ค ๊ณต๊ธ์์ ๋๋ค.
- ๋ฉฑ๋ฑ์ฑ(Idempotency)์ ๊ณ ๋ คํ ์ค๊ณ: ํจ์๊ฐ ์๋์น ์์ ๋ถ์์ฉ ์์ด ์์ ํ๊ฒ ์ฌ์๋๋ ์ ์๋๋ก ๋ณด์ฅํ์ญ์์ค. ์๋ฅผ ๋ค์ด, `createUser` ํจ์๋ ์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํด๋น ์ด๋ฉ์ผ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ์กด์ฌํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ด๋ ์ค์ผ์คํธ๋ ์ดํฐ๊ฐ ๋จ๊ณ๋ฅผ ์ฌ์๋ํ ๊ฒฝ์ฐ ์ค๋ณต ๋ ์ฝ๋๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ํฌ๊ด์ ์ธ ๋ก๊น ๋ฐ ์ถ์ ๊ตฌํ: AWS X-Ray, Azure Application Insights, Google Cloud Trace์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ์ด API ๊ฒ์ดํธ์จ์ด, ์ค์ผ์คํธ๋ ์ดํฐ, ์ฌ๋ฌ ํจ์๋ฅผ ํต๊ณผํ๋ ๊ณผ์ ์ ํตํฉ์ ์ผ๋ก ํ์ ํ์ญ์์ค. ๋ชจ๋ ํจ์ ํธ์ถ์ ์ค์ผ์คํธ๋ ์ดํฐ์ ์คํ ID๋ฅผ ๊ธฐ๋กํ์ญ์์ค.
- ์ํฌํ๋ก์ฐ ๋ณด์: ์ต์ ๊ถํ ์์น์ ์ฌ์ฉํ์ญ์์ค. ์ค์ผ์คํธ๋ ์ดํฐ์ IAM ์ญํ ์ ์ํฌํ๋ก์ฐ์ ์๋ ํน์ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ ๊ถํ๋ง ๊ฐ์ ธ์ผ ํฉ๋๋ค. ๊ฐ ํจ์๋ ์์ ์ ์์ ์ ์ํํ๋ ๋ฐ ํ์ํ ๊ถํ(์: ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ํ ์ฝ๊ธฐ/์ฐ๊ธฐ)๋ง ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ์ธ์ ์ค์ผ์คํธ๋ ์ด์ ํ ์ง ํ์ : ๊ณผ๋ํ๊ฒ ์ค๊ณํ์ง ๋ง์ญ์์ค. ๊ฐ๋จํ A -> B ์ฒด์ธ์ ๊ฒฝ์ฐ ์ง์ ํธ์ถ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ถ๊ธฐ, ๋ณ๋ ฌ ์์ ๋๋ ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ์ฌ์๋๊ฐ ํ์ํด์ง๋ฉด, ์ ์ฉ ์ค์ผ์คํธ๋ ์ด์ ์๋น์ค๊ฐ ์๋นํ ์๊ฐ์ ์ ์ฝํ๊ณ ๋ฏธ๋์ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์๋ฐฉํด ์ค ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ์ฐจ์ธ๋ ํ๋ก ํธ์๋ ๊ฒฝํ ๊ตฌ์ถํ๊ธฐ
ํจ์ ๊ตฌ์ฑ๊ณผ ์ค์ผ์คํธ๋ ์ด์ ์ ๋จ์ํ ๋ฐฑ์๋ ์ธํ๋ผ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์ด๋ ์ ๊ตํ๊ณ ์ ๋ขฐํ ์ ์์ผ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ํ๋ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ทผ๋ณธ์ ์ธ ๋๋ ฅ์ ๋๋ค. ๋ณต์กํ ์ํฌํ๋ก์ฐ ๋ก์ง์ ํด๋ผ์ด์ธํธ์์ ์ค์ผ์คํธ๋ ์ด์ ๋ ์๋ฒ๋ฆฌ์ค BFF๋ก ์ฎ๊น์ผ๋ก์จ, ํ๋ก ํธ์๋ ํ์ด ๊ฐ์ฅ ์ํ๋ ์ผ, ์ฆ ํ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋๋ ๋ฐ ์ง์คํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
์ด ์ํคํ ์ฒ ํจํด์ ํด๋ผ์ด์ธํธ๋ฅผ ๋จ์ํํ๊ณ , ๋น์ฆ๋์ค ํ๋ก์ธ์ค ๋ก์ง์ ์ค์ ์ง์คํํ๋ฉฐ, ์์คํ ๋ณต์๋ ฅ์ ํฅ์์ํค๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ค์ํ ์ํฌํ๋ก์ฐ์ ๋ํ ์ ๋ก ์๋ ๊ฐ์์ฑ์ ์ ๊ณตํฉ๋๋ค. AWS Step Functions์ Google Cloud Workflows์ ์ ์ธ์ ์ธ ํ์ ์ ํํ๋ , Azure Durable Functions์ ์ฝ๋ ์ฐ์ ์ ์ฐ์ฑ์ ์ ํํ๋ , ์ค์ผ์คํธ๋ ์ด์ ์ ์์ฉํ๋ ๊ฒ์ ํ๋ก ํธ์๋ ์ํคํ ์ฒ์ ์ฅ๊ธฐ์ ์ธ ๊ฑด์ ์ฑ๊ณผ ๋ฏผ์ฒฉ์ฑ์ ๋ํ ์ ๋ต์ ํฌ์์ ๋๋ค.
์๋ฒ๋ฆฌ์ค ์๋๊ฐ ๋๋ํ์ผ๋ฉฐ, ์ด๋ ๋จ์ํ ํจ์์ ๊ดํ ๊ฒ ์ด์์ ๋๋ค. ๊ฐ๋ ฅํ๊ณ ์ด๋ฒคํธ ๊ธฐ๋ฐ ์์คํ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. ๊ตฌ์ฑ๊ณผ ์ค์ผ์คํธ๋ ์ด์ ์ ๋ง์คํฐํจ์ผ๋ก์จ, ์ด ํจ๋ฌ๋ค์์ ๋ชจ๋ ์ ์ฌ๋ ฅ์ ๋ฐํํ๊ณ ์ฐจ์ธ๋ ๋ณต์๋ ฅ ์๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ธธ์ ์ด ์ ์์ต๋๋ค.