๐Ÿ“– 14. JWT & API

Lee Jinoยท2022๋…„ 9์›” 25์ผ
0

๐Ÿ“– JWT & API

๐Ÿš€ 1. JWT(JSON Web Token)์˜ ์ •์˜

  • JWT๋Š” ์œ ์ €๋ฅผ ์ธ์ฆํ•˜๊ณ  ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ํ† ํฐ(Token) ๊ธฐ๋ฐ˜ ์ธ์ฆ์ด๋‹ค. RFC 7519์— ์ž์„ธํ•œ ๋ช…์„ธ๊ฐ€ ๋‚˜์™€์žˆ๋‹ค.

  • ํ† ํฐ์€ ์„ธ์…˜๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๊ธฐ ๋–„๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ์„ ํ†ตํ•ด ์„ธ์…˜์„ ๊ด€๋ฆฌํ–ˆ๋˜ ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์„ ๋œ ์ˆ˜ ์žˆ๋‹ค.

  • JWT๊ฐ€ ๊ฐ€์ง€๋Š” ํ•ต์‹ฌ์ ์ธ ํŠน์ง•์ด ์žˆ๋‹ค๋ฉด, ํ† ํฐ ์ž์ฒด์˜ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ ์ •๋ณด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ(Self-contained)๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํ† ํฐ์ด ์ปค์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ† ํฐ์ด ํ•œ ๋ฒˆ ๋ฐœ๊ธ‰๋œ ์ดํ›„ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋ฐ”๊พธ๋”๋ผ๋„ ํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค.

  • JWT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด RESTful๊ณผ ๊ฐ™์€ ๋ฌด์ƒํƒœ(Stateless)์ธ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

  • ์„ธ์…˜(Session)์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ์—๋Š” ์ฟ ํ‚ค ๋“ฑ์„ ํ†ตํ•ด ์‹๋ณ„ํ•˜๊ณ  ์„œ๋ฒ„์— ์„ธ์…˜์„ ์ €์žฅํ–ˆ์ง€๋งŒ JWT์™€ ๊ฐ™์€ ํ† ํฐ์„ ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅํ•˜๊ณ  ์šซ์–ด์‹œ ๋‹จ์ˆœํžˆ HTTP ํ—ค๋”์— ํ† ํฐ์„ ์ฒจ๋ถ€ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋‹จ์ˆœํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.


โ–ถ๏ธ ์ผ๋ฐ˜์ ์œผ๋กœ JWT๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ง„ํ–‰๋œ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์›น์„œ๋น„์Šค ์ธ์ฆ
  2. ์„œ๋ฒ„์—์„œ ์„œ๋ช…๋œ(Signed) JWT๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์œผ๋กœ ๋Œ๋ ค์ฃผ๊ธฐ.
  3. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ์š”๊ตฌํ•  ๋•Œ JWT๋ฅผ HTTP Header์— ์ฒจ๋ถ€.
  4. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์˜จ JWT ๊ฒ€์ฆ
  • JWT๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ Base64 URL-safe Encode๋ฅผ ํ†ตํ•ด ์ธ์ฝ”๋”ฉํ•˜์—ฌ ์ง๋ ฌํ™”ํ•œ ๊ฒƒ์ด ํฌํ•จ๋˜๋ฉฐ ํ† ํฐ ๋‚ด๋ถ€์—๋Š” ์œ„๋ณ€์กฐ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๊ฐœ์ธํ‚ค๋ฅผ ํ†ตํ•œ ์ „์ž์„œ๋ช…๋„ ์žˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ JWT๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์„œ๋ช…์„ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉฐ ๊ฒ€์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ์š”์ฒญํ•œ ์‘๋‹ต์„ ๋Œ๋ ค์ค€๋‹ค.

=> Base64 URL-safe Encode๋Š” ์ผ๋ฐ˜์ ์ธ Base64 Encode์—์„œ URL์—์„œ ์˜ค๋ฅ˜์—†์ด ์‚ฌ์šฉํ•˜๋„๋ก '+'. '/'๋ฅผ ๊ฐ๊ฐ '-','_'๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.


๐Ÿš€ 1-1. JWT(JSON Web Token)์˜ ๊ตฌ์กฐ

  • JWT์˜ ๊ตฌ์กฐ๋Š” Header, Payload, Signature๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    ๋˜ํ•œ, ๊ฐ ์š”์†Œ๋Š” .์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

  • Header์—๋Š” JWT์—์„œ ์‚ฌ์šฉํ•  ํƒ€์ž…๊ณผ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ์œผ๋ฉฐ Payload๋Š” ์„œ๋ฒ„์—์„œ ์ฒจ๋ถ€ํ•œ ์‚ฌ์šฉ์ž ๊ถŒํ•œ ์ •๋ณด์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ฒจ์žˆ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ Signature ์—๋Š” Header, Payload๋ฅผ Base64 URL-safe Encode๋ฅผ ํ•œ ํ›„ Header์— ๋ช…์‹œ๋œ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ณ , ๊ฐœ์ธํ‚ค(Private Key)๋กœ ์„œ๋ช…ํ•œ ์ „์ž์„œ๋ช…์ด ๋‹ด๊ฒจ์žˆ๋‹ค.

  • ์ „์ž์„œ๋ช… ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํƒ€์› ๊ณก์„  ์•”ํ˜ธํ™”(ECDSA)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด,

  • ์ด๋ฅผ JWT๋กœ ํ‘œํ˜„ํ•˜๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋˜๋Š”๋ฐ, ์œ„์—์„œ ๋งŒ๋“  ์ „์ž์„œ๋ช…๋„ Base64 URL-safe Encode ๋กœ ์ฒ˜๋ฆฌํ•ด์„œ ํ•ฉ์ณ์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ๋งŒ๋“  ์ „์ž์„œ๋ช…์€ Header, Payload๊ฐ€ ๋ณ€์กฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š” ์ •๋ณด์ด๋ฉฐ JWT๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ† ํฐ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ทผ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

  • ์ „์ž ์„œ๋ช…์—๋Š” ๋น„๋Œ€์นญ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ ํ‚ค์™€ ๋ณตํ˜ธํ™”๋ฅผ ์œ„ํ•œ ํ‚ค๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์•”ํ˜ธํ™”(์ „์ž์„œ๋ช…)์—๋Š” ๊ฐœ์ธํ‚ค๋ฅผ, ๋ณตํ˜ธํ™”(๊ฒ€์ฆ)์—๋Š” ๊ณต๊ฐœํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿš€ 1-2. JWT(JSON Web Token)์˜ ์žฅ*๋‹จ์ 

  • JWT๋Š” ์ตœ๊ทผ ์›น์„œ๋น„์Šค์—์„œ ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ทœ๊ฒฉ์ด ์ •ํ•ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ(์›น,๋ชจ๋ฐ”์ผ ๋“ฑ)์—์„œ ํ˜ธํ™˜์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค.

  • Payload๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํ† ํฐ์ด ์ปค์ ธ์„œ ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

  • ํ† ํฐ์ด ์žฌ๋ฐœ๊ธ‰๋˜๊ธฐ ์ „๊นŒ์ง€ ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ๊ฐฑ์‹ ๋˜๋”๋ผ๋„ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

  • RESTful๊ณผ ๊ฐ™์€ ๋ฌด์ƒํƒœ(Stateless)ํ™˜๊ฒฝ์—์„œ์˜ ํ†ต์‹ ์ด ์šฉ์ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฒด์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ์œ„ํ•ด ํƒ€ ์„œ๋น„์Šค์— ๋‹ค์‹œ ์š”์ฒญํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด ์„œ๋ฒ„์˜ ๋ถ€๋‹ด์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

  • ํ† ํฐ์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งŒ๋ฃŒ์‹œ๊ฐ„๊นŒ์ง€๋Š” ๊ฐ•์ œ์ ์œผ๋กœ ๋งŒ๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋…ธ์ถœ์ด ๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ์ค‘๋ณด์ •๋ณด๋ฅผ ๋„ฃ๋Š” ์ผ์€ ์—†์–ด์•ผ ํ•œ๋‹ค.


๐Ÿš€ 2. API์˜ ์ •์˜

  • ์ •์˜ ๋ฐ ํ”„๋กœํ† ์ฝœ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ธฐ์ƒ์ฒญ์˜ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์—๋Š” ์ผ์ผ ๊ธฐ์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํœด๋Œ€ํฐ์˜ ๋‚ ์”จ ์•ฑ์€ API๋ฅผ ํ†ตํ•ด ์ด ์‹œ์Šคํ…œ๊ณผ "๋Œ€ํ™”"ํ•˜๊ณ  ํœด๋Œ€ํฐ์— ๋งค์ผ ์ตœ์‹  ๋‚ ์”จ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

  • API๋Š” Application Programming Interface(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋žจ ์ธํ„ฐํŽ˜์ด์Šค)์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค. API์˜ ๋งฅ๋ฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋Š” ๋‹จ์–ด๋Š” ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๋ชจ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ์„œ๋น„์Šค ๊ณ„์•ฝ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณ„์•ฝ์€ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. API ๋ฌธ์„œ์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿš€ 2-1. API์˜ ์ž‘๋™๋ฐฉ์‹

  • API ์•„ํ‚คํ…์ฒ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ธก๋ฉด์—์„œ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ํ•˜๊ณ  ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋ฒ„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ ๋‚ ์”จ ์˜ˆ์—์„œ ๊ธฐ์ƒ์ฒญ์˜ ๋‚ ์”จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์„œ๋ฒ„์ด๊ณ  ๋ชจ๋ฐ”์ผ ์•ฑ์€ ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.

  • API๊ฐ€ ์ƒ์„ฑ๋œ ์‹œ๊ธฐ์™€ ์ด์œ ์— ๋”ฐ๋ผ API๋Š” ๋„ค ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โ–ถ๏ธ SOAP API

  • API๋Š” ๋‹จ์ˆœ ๊ฐ์ฒด ์ ‘๊ทผ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” XML์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์— ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง€๋Š” API์ž…๋‹ˆ๋‹ค.

โ–ถ๏ธ RPC API

  • ์ด API๋ฅผ ์›๊ฒฉ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ํ•จ์ˆ˜๋‚˜ ํ”„๋กœ์‹œ์ €๋ฅผ ์™„๋ฃŒํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์ถœ๋ ฅ์„ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

โ–ถ๏ธ Websocket API

  • JSON ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ตœ์‹  ์›น API ๊ฐœ๋ฐœ์ž…๋‹ˆ๋‹ค. WebSocket API๋Š” ํด๋ผ์ด์–ธํŠธ ์•ฑ๊ณผ ์„œ๋ฒ„ ๊ฐ„์˜ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์— ์ฝœ๋ฐฑ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์–ด REST API๋ณด๋‹ค ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

โ–ถ๏ธ REST API

  • REST๋Š” Representational State Transfer์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค. REST๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” GET, PUT, DELETE ๋“ฑ์˜ ํ•จ์ˆ˜ ์ง‘ํ•ฉ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” HTTP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • REST API์˜ ์ฃผ๋œ ํŠน์ง•์€ ๋ฌด์ƒํƒœ์ž…๋‹ˆ๋‹ค.
    ๋ฌด์ƒํƒœ๋Š” ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ๊ฐ„์— ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ•˜๋Š” URL๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ์‘๋‹ต์€ ์›น ํŽ˜์ด์ง€์˜ ์ผ๋ฐ˜์ ์ธ ๊ทธ๋ž˜ํ”ฝ ๋ Œ๋”๋ง์ด ์—†๋Š” ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.


๐Ÿš€ 2-2. ์›น API๋ž€?

  • ์›น API ๋˜๋Š” ์›น ์„œ๋น„์Šค API๋Š” ์›น ์„œ๋ฒ„์™€ ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฒ˜๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์›น ์„œ๋น„์Šค๋Š” API์ด์ง€๋งŒ ๋ชจ๋“  API๊ฐ€ ์›น ์„œ๋น„์Šค๋Š” ์•„๋‹™๋‹ˆ๋‹ค. REST API๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ํ‘œ์ค€ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ˆ˜ํ•œ ์œ ํ˜•์˜ ์›น API์ž…๋‹ˆ๋‹ค.

  • ์—ญ์‚ฌ์ ์œผ๋กœ API๊ฐ€ ์›”๋“œ ์™€์ด๋“œ ์›น ์ „์— ๋งŒ๋“ค์–ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— Java API, ์„œ๋น„์Šค API ๋“ฑ API์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์šฉ์–ด๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ์ตœ์‹  ์›น API๋Š” REST API์ด๋ฉฐ ์šฉ์–ด๋Š” ์„œ๋กœ ๋ฐ”๊ฟ” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ 2-3. REST API ์‚ฌ์šฉ์‹œ ์ด์ 

  1. ํ†ตํ•ฉ
    API๋Š” ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ธฐ์กด ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ ๊ธฐ๋Šฅ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค. API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํ˜์‹ 
    ์ƒˆ๋กœ์šด ์•ฑ์˜ ๋“ฑ์žฅ์œผ๋กœ ์ „์ฒด ์‚ฐ์—…์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์€ ์‹ ์†ํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๊ณ  ํ˜์‹ ์ ์ธ ์„œ๋น„์Šค์˜ ์‹ ์†ํ•œ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด API ์ˆ˜์ค€์—์„œ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ํ™•์žฅ
    API๋Š” ๊ธฐ์—…์ด ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ๊ณ ๊ฐ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ง€๋„ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›น ์‚ฌ์ดํŠธ, Android, iOS ๋“ฑ์„ ํ†ตํ•ด ์ง€๋„ ์ •๋ณด๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ๊ธฐ์—…์ด๋‚˜ ๋ฌด๋ฃŒ ๋˜๋Š” ์œ ๋ฃŒ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ ์‚ฌํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ์œ ์ง€ ๊ด€๋ฆฌ์˜ ์šฉ์ด์„ฑ
    API๋Š” ๋‘ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๊ฒŒ์ดํŠธ์›จ์ด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. API๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๊ฐ ์‹œ์Šคํ…œ์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ์‹œ์Šคํ…œ์˜ ํ–ฅํ›„ ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

profile
์•ˆ๋…•ํ•˜์„ธ์š”

0๊ฐœ์˜ ๋Œ“๊ธ€