Skip to content

Latest commit

ย 

History

History
111 lines (83 loc) ยท 6.56 KB

API.md

File metadata and controls

111 lines (83 loc) ยท 6.56 KB

API

API๋ž€?

  • SW ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ๋ช…์„ธ
  • ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์–ด๋–ค ๋ฐ์ดํ„ฐ ์ถœ๋ ฅ์„ ์ œ๊ณตํ•  ๊ฒƒ์ธ์ง€ ๋ช…์‹œ
  • ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋Š” ์ •ํ•ด์ง„ ๋ช…์„ธ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ
  • ํ˜„์žฌ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” API ์ข…๋ฅ˜์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Œ (์—ญ์‚ฌ ์ˆœ)
    • SOAP API
    • REST API
    • GraphQL
    • gRPC
  • ์™œ ํ†ต์‹  ๊ทœ์•ฝ์„ ํ‘œ์ค€ํ™”ํ•˜๋ ค๊ณ  ํ•˜๋Š”๊ฐ€?
    • ๋ชจ๋‘ ๋‹ค๋ฅธ API ๋ช…์„ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ๋‹ค๋ฅธ ๊ณณ์˜ API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ช…์„ธ๋ฅผ ํ™•์ธํ•  ๋•Œ ์ด ๋ช…์„ธ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ
      • ๋ช…์„ธ๊ฐ€ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋จผ์ € ์ดํ•ดํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ
    • ํ•˜์ง€๋งŒ ๋ช…์„ธ๋ฅผ ์ž˜ ์•Œ๋ ค์ง„ ๊ณตํ†ต์  ํฌ๋งท์œผ๋กœ ๋‹ค๋ฃจ๋ฉด? API ์ž์ฒด์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋Š” ๋ฐ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋จ
      • ์ž˜ ์•Œ๋ ค์ง„ ์•„ํ‚คํ…์ฒ˜๋‚˜ ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•˜๋Š” ์ด์œ ์™€ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋ ๋“ฏ

SOAP API

  • SOAP๋ž€ - XML ๊ธฐ๋ฐ˜์˜ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ
  • ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํš๋“์„ ์œ„ํ•œ ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ XML ํ˜•์‹์œผ๋กœ request body์— ๋‹ด์•„ ์š”์ฒญํ•˜๊ณ , ์„œ๋ฒ„ ์ธก์—์„œ ์ œ๊ณตํ•˜๋Š” XML ๋‚ด์—์„œ ์›ํ•˜๋Š” ํƒœ๊ทธ์˜ ๊ฐ’์„ ํŒŒ์‹ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ 
  • ์ฃผ๋กœ POST ๋ฉ”์„œ๋“œ๋กœ ์š”์ฒญ์ด ์ด๋ฃจ์–ด์ง

์žฅ์ 

  • ๋†’์€ ๋ณด์•ˆ ์ˆ˜์ค€
    • WS-Security์™€ ๊ฐ™์€ ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›
    • ํŠธ๋žœ์žญ์…˜์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋„ ์ง€์›
    • Statefulํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„์˜ ์ฒ˜๋ฆฌ์— ๋” ์œ 
    • ์ด๋Ÿฌํ•œ ๋ณด์•ˆ ์ˆ˜์ค€ ๋•Œ๋ฌธ์— ๊ธˆ์œต, ์˜๋ฃŒ ๋“ฑ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๋Š” ์„œ๋น„์Šค์—์„œ๋Š” ์—ฌ์ „ํžˆ SOAP์„ ์ด์šฉํ•˜๊ธฐ๋„ ํ•จ

๋‹จ์ 

  • ํ•œ ๋ฒˆ์— ๋งŽ์€ ๋‚ด์šฉ์„ ๋‹ด์€ ๋ฐ์ดํ„ฐ(XML)๊ฐ€ ์˜ค๊ฐ€๋ฏ€๋กœ ํ†ต์‹  ์†๋„๊ฐ€ ๋Š๋ฆผ
  • Statefulํ•˜๋ฏ€๋กœ ์„œ๋ฒ„ ํ™•์žฅ์ด ์–ด๋ ค์›€
  • ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์–ด๋ ค์›€
  • ์บ์‹ฑํ•˜๊ธฐ ์–ด๋ ค์›€

REST API

  • REST๋ž€ - API ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ์ผ์ข…์˜ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ
  • URI๋กœ ์ž‘์—…์„, HTTP Method๋กœ ํ–‰์œ„๋ฅผ ๋‚˜ํƒ€๋ƒ„

์žฅ์ 

  • ๊ฐ€๋ฒผ์›€
  • ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์Œ (XML, JSON, ์ด๋ฏธ์ง€ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฒƒ๋“ค์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ)
  • Stateless ํ•˜๋ฏ€๋กœ ํ™•์žฅ์„ฑ์ด ์ข‹์Œ
  • ์บ์‹ฑ์— ์šฉ์ดํ•จ

๋‹จ์ 

  • ๋ช…ํ™•ํ•œ ํ‘œ์ค€์ด ์—†์–ด ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์ด ์ œ๊ฐ๊ฐ์ผ ์ˆ˜ ์žˆ์Œ
    • ์‹ค์ œ๋กœ๋„ REST ๊ทœ์•ฝ์„ ์ œ๋Œ€๋กœ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๊ณ  ์• ๋งคํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ณณ์ด ๋งŽ์Œ
  • ์ž์›์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, ์ด๋ฅผ ํ†ตํ•ด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋“ค์ด ์ œ๊ณต๋˜๋Š”์ง€๋ฅผ ์•Œ๊ธฐ๋Š” ์–ด๋ ค์›€
    • /api/books/1 ์ด๋ผ๋Š” URI๋ฅผ ํ†ตํ•ด 1๋ฒˆ ์ฑ…์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ฒ ๋‹ค๋Š” ๊ฒƒ์€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ๊ทธ ์ฑ…์˜ ์–ด๋–ค ์ •๋ณด๋“ค์„ ์ค„ ๊ฑด์ง€๋Š” ๋ฐ”๋กœ ์•Œ๊ธฐ ์–ด๋ ค์›€
  • ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ
    • ๋ณดํ†ต ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ œ๊ณตํ•  ๋ฐ์ดํ„ฐ์˜ ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์—”๋“œํฌ์ธํŠธ๋กœ ์ชผ๊ฐœ๊ณ  ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ API๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ํ†ต์‹ ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋น„ํšจ์œจ์„ฑ์ด ์กด์žฌ
      • ์ด๋ฅผ Under fetching ๋ฌธ์ œ๋ผ๊ณ  ํ•จ
  • ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์–ด๋ ค์›€
    • book์˜ ์ •๋ณด ์ค‘ ์ €์ž์™€ ์ด ํŽ˜์ด์ง€ ์ˆ˜๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๊ณ  ํ•ด๋„, API์—์„œ ์ค„๊ฑฐ๋ฆฌ, ๊ฐ€๊ฒฉ ๋“ฑ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€๋†“๊ณ (ํ†ต์‹  ๋น„์šฉ) ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๊ฒŒ ๋จ
      • ์ด๋ฅผ Over fetching ๋ฌธ์ œ๋ผ๊ณ  ํ•จ
  • ๋ณด์•ˆ์ด ๊ฐ•์ œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„ค๊ณ„ ์ธก์—์„œ ๋ณด์•ˆ ์„ค์ •์„ ์ œ๋Œ€๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ค‘๊ฐ„์ž ๊ณต๊ฒฉ์ด๋‚˜ XSS, CSRF ๋“ฑ ๋Œ€ํ‘œ์  ์›น ๊ณต๊ฒฉ์„ ๋‹นํ•  ์ˆ˜ ์žˆ์Œ
  • ์ฆ‰, REST๋Š” ์ „๋ฐ˜์ ์œผ๋กœ ์ž์œ ๋„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์–ป๋Š” ์žฅ์ ๋“ค์ด ๋งŽ์œผ๋‚˜, ๊ทธ๋งŒํผ ์ œ๋Œ€๋กœ ์ž˜ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋ฉด ์œ„ํ—˜ํ•˜๊ธฐ๋„ ํ•˜๊ณ  ์žฅ์ ์„ ์ž˜ ๋ˆ„๋ฆฌ๊ธฐ๋„ ์–ด๋ ต๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง

GraphQL

  • GraphQL์ด๋ž€ - REST์˜ Under fetching, Over fetching ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ์•ˆ์œผ๋กœ ๋– ์˜ค๋ฅธ ์งˆ์˜ ์–ธ์–ด
  • ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ์š”์ฒญํ•˜๋ฉด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์‘๋‹ต์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

์žฅ์ 

  • ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์›ํ•˜๋Š” ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ์—๋„ ์šฉ์ดํ•จ
  • Subscription ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด WebSocket์„ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ

๋‹จ์ 

  • ์บ์‹ฑ์ด ์–ด๋ ค์›€
    • ์—”๋“œํฌ์ธํŠธ ๋‹น ์‘๋‹ต ํ˜•์‹์ด ์ •ํ•ด์ ธ์žˆ๋Š” REST์™€ ๋‹ฌ๋ฆฌ, GraphQL์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์‘๋‹ต ํ˜•์‹์ด ๋งค์šฐ ๋‹ค์–‘ํ•จ. ์ด ๋•Œ๋ฌธ์—, ์บ์‹ฑ์ด ์–ด๋ ค์›€
  • ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Œ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์š”๊ตฌํ•˜๋ƒ์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ”๋€Œ๊ณ , ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์š”์ฒญ์ด ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Œ
  • ๋ณด์•ˆ์— ์œ ์˜ํ•ด์•ผ ํ•จ
    • ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๋ฏผ๊ฐ ์ •๋ณด๊ฐ€ ์ œ๊ณต๋  ์ˆ˜๋„, ๋ถˆ๋ณ€์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜๋„ ์žˆ์Œ
  • ์ฆ‰, GraphQL์€ ์ „๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•จ์— ๋”ฐ๋ผ ์š”์ฒญ-์‘๋‹ต ํ˜•์‹์„ ์ž์œจํ™”ํ–ˆ์œผ๋‚˜ ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์˜ค๋‚จ์šฉ์œผ๋กœ ์ธํ•œ ๋ณด์•ˆ ๋ฌธ์ œ ๋˜๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ์— ์œ ์˜ํ•ด์•ผ ํ•จ

gRPC

  • RPC๋ž€ - Remote Procedure Call, ์ฆ‰ ์›๊ฒฉ์˜ ํ”„๋กœ์‹œ์ €(๊ธฐ๋Šฅ)์„ ํ˜ธ์ถœํ•˜๋Š” ํ†ต์‹  ๊ธฐ์ˆ 
  • gRPC๋Š” ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” RPC ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœ
  • ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ(protobuf) ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„์— ๋ฏธ๋ฆฌ ์‚ฌ์–‘์„ ํ•ฉ์˜ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ํ†ต์‹ 

์žฅ์ 

  • JSON ๊ธฐ๋ฐ˜์˜ REST ๋ณด๋‹ค๋„ ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
    • protobuf๋ฅผ ํ†ตํ•ด ํ‚ค๊ฐ’์„ ๊ฐ„์†Œํ™”, ๋ฐ์ดํ„ฐ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ง๋ ฌํ™” ๋“ฑ์ด ์ ์šฉ๋จ
  • HTTP/2 ๊ธฐ๋ฐ˜์œผ๋กœ HTTP/2์˜ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Œ
    • ์ปค๋„ฅ์…˜์˜ ์ง€์†, HOL ๋ฐฉ์ง€์™€ ๋ณ‘๋ ฌํ™”, ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก(์–‘๋ฐฉํ–ฅ ์ „์†ก ๊ฐ€๋Šฅ) ๋“ฑ
  • TLS๋ฅผ ํ†ตํ•œ ์•”ํ˜ธํ™”
    • ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•ด ํƒˆ์ทจ/๋ณ€์กฐ๋ฅผ ๋ง‰์Œ
  • ์ฆ‰, gRPC๋Š” REST๋ณด๋‹ค๋„ ๋” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„์†Œํ™”ํ•˜๊ณ , ๋ฐ์ดํ„ฐ์˜ ํšจ์œจ์  ํ†ต์‹ ์ด๋‚˜ ๋ณด์•ˆ ์ฒด๊ณ„๋ฅผ ํ‘œ์ค€ํ™”ํ•œ ๊ธฐ์ˆ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ

๋‹จ์ 

  • HTTP/2๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€
    • ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด์— ํ•ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์•„์ง ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„ ํ†ต์‹ ์€ gRPC๋กœ ๋Œ€์ฒดํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ์Œ
    • ์ด ๋•Œ๋ฌธ์— ๋Œ€๋ถ€๋ถ„ ์„œ๋ฒ„ ํˆฌ ์„œ๋ฒ„ ํ†ต์‹  ์ค‘ ํšจ์œจ์„ฑ์ด ์ค‘์‹œ๋˜๋Š” ๊ณณ์— ๋„์ž…๋จ. MSA ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„ ํˆฌ ์„œ๋ฒ„ ํ†ต์‹ ์ด ๋งŽ์•„์ง€๋ฏ€๋กœ gRPC๊ฐ€ ๊ฐ๊ด‘๋ฐ›๊ณ  ์žˆ์Œ

Reference