- SW ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๋ช ์ธ
- ์๋ฒ ์ธก์์๋ ํน์ ๋ฐ์ดํฐ ์ ๋ ฅ์ ๋ํด ์ด๋ค ๋ฐ์ดํฐ ์ถ๋ ฅ์ ์ ๊ณตํ ๊ฒ์ธ์ง ๋ช ์
- ํด๋ผ์ด์ธํธ ์ธก์์๋ ์ ํด์ง ๋ช ์ธ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ฌ์ฉ
- ํ์ฌ ์ฃผ๋ก ์ฌ์ฉ๋๋ API ์ข
๋ฅ์๋ ์๋์ ๊ฐ์ ๊ฒ๋ค์ด ์์ (์ญ์ฌ ์)
- SOAP API
- REST API
- GraphQL
- gRPC
- ์ ํต์ ๊ท์ฝ์ ํ์คํํ๋ ค๊ณ ํ๋๊ฐ?
- ๋ชจ๋ ๋ค๋ฅธ API ๋ช
์ธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ๋ค๋ฅธ ๊ณณ์ API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ช
์ธ๋ฅผ ํ์ธํ ๋ ์ด ๋ช
์ธ๋ฅผ ์ดํดํ๊ธฐ ์ํด ๋ง์ ์๊ฐ์ ์ฌ์ฉํ๊ฒ ๋จ
- ๋ช ์ธ๊ฐ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์์ฑ๋์๋์ง๋ฅผ ๋จผ์ ์ดํดํด์ผ ํ๊ธฐ ๋๋ฌธ
- ํ์ง๋ง ๋ช
์ธ๋ฅผ ์ ์๋ ค์ง ๊ณตํต์ ํฌ๋งท์ผ๋ก ๋ค๋ฃจ๋ฉด? API ์์ฒด์ ๋ํด ์ดํดํ๋ ๋ฐ์๋ง ์ง์คํ๋ฉด ๋จ
- ์ ์๋ ค์ง ์ํคํ ์ฒ๋ ๋์์ธ ํจํด์ ์ ์ฉํ๋ ์ด์ ์ ๊ฐ๋ค๊ณ ๋ณด๋ฉด ๋ ๋ฏ
- ๋ชจ๋ ๋ค๋ฅธ API ๋ช
์ธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ๋ค๋ฅธ ๊ณณ์ API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ช
์ธ๋ฅผ ํ์ธํ ๋ ์ด ๋ช
์ธ๋ฅผ ์ดํดํ๊ธฐ ์ํด ๋ง์ ์๊ฐ์ ์ฌ์ฉํ๊ฒ ๋จ
- SOAP๋ - XML ๊ธฐ๋ฐ์ ํต์ ํ๋กํ ์ฝ
- ์ํ๋ ๋ฐ์ดํฐ ํ๋์ ์ํ ๋ถ๊ฐ ์ ๋ณด๋ฅผ XML ํ์์ผ๋ก request body์ ๋ด์ ์์ฒญํ๊ณ , ์๋ฒ ์ธก์์ ์ ๊ณตํ๋ XML ๋ด์์ ์ํ๋ ํ๊ทธ์ ๊ฐ์ ํ์ฑํด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํต์
- ์ฃผ๋ก POST ๋ฉ์๋๋ก ์์ฒญ์ด ์ด๋ฃจ์ด์ง
- ๋์ ๋ณด์ ์์ค
- WS-Security์ ๊ฐ์ ๋ณด์ ํ๋กํ ์ฝ์ ์ง์
- ํธ๋์ญ์ ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ํ๋กํ ์ฝ๋ ์ง์
- Statefulํ๊ธฐ ๋๋ฌธ์, ํธ๋์ญ์ ๋จ์์ ์ฒ๋ฆฌ์ ๋ ์
- ์ด๋ฌํ ๋ณด์ ์์ค ๋๋ฌธ์ ๊ธ์ต, ์๋ฃ ๋ฑ ์ค์ํ ์ ๋ณด๋ฅผ ๋ค๋ฃจ๋ ์๋น์ค์์๋ ์ฌ์ ํ SOAP์ ์ด์ฉํ๊ธฐ๋ ํจ
- ํ ๋ฒ์ ๋ง์ ๋ด์ฉ์ ๋ด์ ๋ฐ์ดํฐ(XML)๊ฐ ์ค๊ฐ๋ฏ๋ก ํต์ ์๋๊ฐ ๋๋ฆผ
- Statefulํ๋ฏ๋ก ์๋ฒ ํ์ฅ์ด ์ด๋ ค์
- ์ฌ๋์ด ์ฝ๊ธฐ ์ด๋ ค์
- ์บ์ฑํ๊ธฐ ์ด๋ ค์
- REST๋ - API ์ค๊ณ๋ฅผ ์ํ ์ผ์ข ์ ์ํคํ ์ฒ ์คํ์ผ
- URI๋ก ์์ ์, HTTP Method๋ก ํ์๋ฅผ ๋ํ๋
- ๊ฐ๋ฒผ์
- ๋ฐ์ดํฐ ํ์์ ๊ตฌ์ ๋ฐ์ง ์์ (XML, JSON, ์ด๋ฏธ์ง ๋ฑ ๋ค์ํ ๊ฒ๋ค์ ์ฃผ๊ณ ๋ฐ์ ์ ์์)
- Stateless ํ๋ฏ๋ก ํ์ฅ์ฑ์ด ์ข์
- ์บ์ฑ์ ์ฉ์ดํจ
- ๋ช
ํํ ํ์ค์ด ์์ด ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ์ ๊ฐ๊ฐ์ผ ์ ์์
- ์ค์ ๋ก๋ REST ๊ท์ฝ์ ์ ๋๋ก ์ค์ํ์ง ์๊ณ ์ ๋งคํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ ๊ณณ์ด ๋ง์
- ์์์ ์์น๋ฅผ ๋ํ๋ด์ง๋ง, ์ด๋ฅผ ํตํด ์ด๋ค ๋ฐ์ดํฐ๋ค์ด ์ ๊ณต๋๋์ง๋ฅผ ์๊ธฐ๋ ์ด๋ ค์
- /api/books/1 ์ด๋ผ๋ URI๋ฅผ ํตํด 1๋ฒ ์ฑ ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๊ฒ ๋ค๋ ๊ฒ์ ์์ธกํ ์ ์์ผ๋ ๊ทธ ์ฑ ์ ์ด๋ค ์ ๋ณด๋ค์ ์ค ๊ฑด์ง๋ ๋ฐ๋ก ์๊ธฐ ์ด๋ ค์
- ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ธ ์ ์์
- ๋ณดํต ์ด๋ฌํ ๊ฒฝ์ฐ ์ ๊ณตํ ๋ฐ์ดํฐ์ ๋จ์ํ๋ฅผ ์ํด ์ฌ๋ฌ ์๋ํฌ์ธํธ๋ก ์ชผ๊ฐ๊ณ ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ๋ฌ ๋ฒ API๋ฅผ ํธ์ถํ๋๋ก ํ๋๋ฐ, ์ด ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ฒ์ ํต์ ์ด ๋ฐ์ํ๋ค๋ ๋นํจ์จ์ฑ์ด ์กด์ฌ
- ์ด๋ฅผ Under fetching ๋ฌธ์ ๋ผ๊ณ ํจ
- ๋ณดํต ์ด๋ฌํ ๊ฒฝ์ฐ ์ ๊ณตํ ๋ฐ์ดํฐ์ ๋จ์ํ๋ฅผ ์ํด ์ฌ๋ฌ ์๋ํฌ์ธํธ๋ก ์ชผ๊ฐ๊ณ ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ๋ฌ ๋ฒ API๋ฅผ ํธ์ถํ๋๋ก ํ๋๋ฐ, ์ด ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ฒ์ ํต์ ์ด ๋ฐ์ํ๋ค๋ ๋นํจ์จ์ฑ์ด ์กด์ฌ
- ์ํ๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ธฐ ์ด๋ ค์
- book์ ์ ๋ณด ์ค ์ ์์ ์ด ํ์ด์ง ์๋ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๊ณ ํด๋, API์์ ์ค๊ฑฐ๋ฆฌ, ๊ฐ๊ฒฉ ๋ฑ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์๋๊ณ (ํต์ ๋น์ฉ) ์ฌ์ฉํ์ง๋ ์๊ฒ ๋จ
- ์ด๋ฅผ Over fetching ๋ฌธ์ ๋ผ๊ณ ํจ
- book์ ์ ๋ณด ์ค ์ ์์ ์ด ํ์ด์ง ์๋ง ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๊ณ ํด๋, API์์ ์ค๊ฑฐ๋ฆฌ, ๊ฐ๊ฒฉ ๋ฑ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์๋๊ณ (ํต์ ๋น์ฉ) ์ฌ์ฉํ์ง๋ ์๊ฒ ๋จ
- ๋ณด์์ด ๊ฐ์ ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ค๊ณ ์ธก์์ ๋ณด์ ์ค์ ์ ์ ๋๋ก ํ์ง ์์ผ๋ฉด ์ค๊ฐ์ ๊ณต๊ฒฉ์ด๋ XSS, CSRF ๋ฑ ๋ํ์ ์น ๊ณต๊ฒฉ์ ๋นํ ์ ์์
- ์ฆ, REST๋ ์ ๋ฐ์ ์ผ๋ก ์์ ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ป๋ ์ฅ์ ๋ค์ด ๋ง์ผ๋, ๊ทธ๋งํผ ์ ๋๋ก ์ ์๊ณ ์ฌ์ฉํ์ง ๋ชปํ๋ฉด ์ํํ๊ธฐ๋ ํ๊ณ ์ฅ์ ์ ์ ๋๋ฆฌ๊ธฐ๋ ์ด๋ ต๋ค๋ ํน์ง์ ๊ฐ์ง
- GraphQL์ด๋ - REST์ Under fetching, Over fetching ๋ฌธ์ ์ ํด๊ฒฐ์์ผ๋ก ๋ ์ค๋ฅธ ์ง์ ์ธ์ด
- ํน์ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด ์์ฒญํ๋ฉด ์ํ๋ ๋ฐ์ดํฐ๋ง ์๋ต์ผ๋ก ๋ฐ์ ์ ์์
- ๋ณต์กํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ป์ ์ ์์ผ๋ฉฐ, ์ํ๋ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ์๋ ์ฉ์ดํจ
- Subscription ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด WebSocket์ ๋ ๊ฐํธํ๊ฒ ์ด์ฉํ ์ ์์
- ์บ์ฑ์ด ์ด๋ ค์
- ์๋ํฌ์ธํธ ๋น ์๋ต ํ์์ด ์ ํด์ ธ์๋ REST์ ๋ฌ๋ฆฌ, GraphQL์ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋งํผ์ ๋ฐ์ดํฐ๋ง ์ ๊ณตํ๋ฏ๋ก ์๋ต ํ์์ด ๋งค์ฐ ๋ค์ํจ. ์ด ๋๋ฌธ์, ์บ์ฑ์ด ์ด๋ ค์
- ์๋ฒ์ ๋ถํ๋ฅผ ์ค ์ ์์
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์๊ตฌํ๋์ ๋ฐ๋ผ ์คํ๋๋ ์ฟผ๋ฆฌ๊ฐ ๋ฐ๋๊ณ , ๋ณต์กํ ์ฐ์ฐ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ ์ด ์์ฒญ์ด ์๋ฒ์ ๋ถํ๋ฅผ ์ค ์ ์์
- ๋ณด์์ ์ ์ํด์ผ ํจ
- ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ ๊ณต๋์ด์๋ ์ ๋๋ ๋ฏผ๊ฐ ์ ๋ณด๊ฐ ์ ๊ณต๋ ์๋, ๋ถ๋ณ์ธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ์๋ ์์
- ์ฆ, GraphQL์ ์ ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ฌด ๋ง์ ๊ถํ์ ๋ถ์ฌํจ์ ๋ฐ๋ผ ์์ฒญ-์๋ต ํ์์ ์์จํํ์ผ๋ ํด๋ผ์ด์ธํธ ์ธก์ ์ค๋จ์ฉ์ผ๋ก ์ธํ ๋ณด์ ๋ฌธ์ ๋๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์์ ์ ์ํด์ผ ํจ
- RPC๋ - Remote Procedure Call, ์ฆ ์๊ฒฉ์ ํ๋ก์์ (๊ธฐ๋ฅ)์ ํธ์ถํ๋ ํต์ ๊ธฐ์
- gRPC๋ ๊ทธ ์ค ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ RPC ํ๋ ์์ํฌ๋ก, ๊ตฌ๊ธ์์ ๊ฐ๋ฐ
- ํ๋กํ ์ฝ ๋ฒํผ(protobuf) ๊ธฐ๋ฐ์ผ๋ก ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ์ ๋ฏธ๋ฆฌ ์ฌ์์ ํฉ์ํ๊ณ , ์ด๋ฅผ ํตํด ํต์
- JSON ๊ธฐ๋ฐ์ REST ๋ณด๋ค๋ ๋ฐ์ดํฐ์ ์ฌ์ด์ฆ๋ฅผ ์ค์ผ ์ ์์
- protobuf๋ฅผ ํตํด ํค๊ฐ์ ๊ฐ์ํ, ๋ฐ์ดํฐ์ ๋ฐ์ด๋๋ฆฌ ์ง๋ ฌํ ๋ฑ์ด ์ ์ฉ๋จ
- HTTP/2 ๊ธฐ๋ฐ์ผ๋ก HTTP/2์ ์ด์ ์ ๋๋ฆด ์ ์์
- ์ปค๋ฅ์ ์ ์ง์, HOL ๋ฐฉ์ง์ ๋ณ๋ ฌํ, ์๋ฒ๋ก๋ถํฐ์ ๋ฐ์ดํฐ ์ ์ก(์๋ฐฉํฅ ์ ์ก ๊ฐ๋ฅ) ๋ฑ
- TLS๋ฅผ ํตํ ์ํธํ
- ๋ฐ์ดํฐ๋ฅผ ์ํธํํด ํ์ทจ/๋ณ์กฐ๋ฅผ ๋ง์
- ์ฆ, gRPC๋ REST๋ณด๋ค๋ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ํํ๊ณ , ๋ฐ์ดํฐ์ ํจ์จ์ ํต์ ์ด๋ ๋ณด์ ์ฒด๊ณ๋ฅผ ํ์คํํ ๊ธฐ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์
- HTTP/2๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์ง์ํ์ง ์๋ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์
- ์ผ๋ถ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด์ ํด๋นํ๊ธฐ ๋๋ฌธ์, ์์ง ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ ํต์ ์ gRPC๋ก ๋์ฒดํ๊ธฐ์ ์ด๋ ค์์ด ์์
- ์ด ๋๋ฌธ์ ๋๋ถ๋ถ ์๋ฒ ํฌ ์๋ฒ ํต์ ์ค ํจ์จ์ฑ์ด ์ค์๋๋ ๊ณณ์ ๋์ ๋จ. MSA ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ฒ ํฌ ์๋ฒ ํต์ ์ด ๋ง์์ง๋ฏ๋ก gRPC๊ฐ ๊ฐ๊ด๋ฐ๊ณ ์์