๋„ค์ด๋ฒ„ Tech Talk - ๊ทธ๋Ÿฐ REST API๋กœ ๊ดœ์ฐฎ์€๊ฐ€

2025. 4. 14. 18:07ยท๐Ÿ“‚ Computer Science

 

๐Ÿ“Œ REST๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

 ~> REST(Representational State Transfer)๋Š” ๋ถ„์‚ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ๋กœ, ์›น์˜ ๋…๋ฆฝ์  ์ง„ํ™”๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ 6๊ฐ€์ง€ ์ œ์•ฝ ์กฐ๊ฑด ์กด์žฌํ•œ๋‹ค.
  1. Client-Server: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์˜ ์—ญํ•  ๋ถ„๋ฆฌ
  2. Stateless: ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ
  3. Cacheable: ์‘๋‹ต์€ ์บ์‹œ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  4. Uniform Interface: ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
  5. Layered System: ๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ ๊ตฌ์กฐ
  6. Code-on-Demand (Optional): ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฝ”๋“œ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Œ
 

๐Ÿ“Œ REST์˜ ํ•ต์‹ฌ - Uniform Interface

 ~> ์ด ๋ฐœํ‘œ์—์„œ๋Š” ํŠนํžˆ Uniform Interface์˜ 2๊ฐ€์ง€ ์„ธ๋ถ€ ์กฐ๊ฑด์— ์ฃผ๋ชฉํ•œ๋‹ค
  1. Self-descriptive Messages
   • ๋ฉ”์‹œ์ง€ ์ž์ฒด๋งŒ์œผ๋กœ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
   • ์š”์ฒญ/์‘๋‹ต์—๋Š” ๋ฉ”ํƒ€์ •๋ณด(์˜ˆ: Content-Type, Link ๋“ฑ)๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•จ
  2. HATEOAS (Hypermedia as the Engine of Application State)
   • ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์— ํฌํ•จ๋œ ํ•˜์ดํผ๋งํฌ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ํ–‰๋™์„ ์œ ๋„๋ฐ›์•„์•ผ ํ•จ
   • ์˜ˆ: HTML์—์„œ <a href="/edit">์ˆ˜์ •</a> ๊ฐ™์€ ์—ญํ• 
 

๐Ÿ“Œ REST๋ฅผ ์ง€ํ‚ค๊ธฐ ์–ด๋ ค์šด ์ด์œ 

ํ•ญ๋ชฉ ํ”ํ•œ ์›น ํŽ˜์ด์ง€ HTTP API
Protocol HTTP HTTP
์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์‚ฌ๋žŒ ↔ ๊ธฐ๊ณ„ ๊ธฐ๊ณ„ ↔ ๊ธฐ๊ณ„
Media Type HTML JSON

 ~> REST์˜ ๋ณธ์งˆ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € HTML ๊ธฐ๋ฐ˜์˜ “์›น”๊ณผ JSON ๊ธฐ๋ฐ˜์˜ “HTTP API”๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๋ƒ๋ฅผ ๋น„๊ตํ•œ๋‹ค.
 ~> REST๋Š” HTML ๊ธฐ๋ฐ˜ ์›น์„ ์ „์ œ๋กœ ํ–ˆ์ง€๋งŒ, ํ˜„๋Œ€ API๋Š” JSON์„ ์‚ฌ์šฉํ•˜๊ณ , ์ฃผ์ฒด๋„ ์‚ฌ๋žŒ ↔ ๊ธฐ๊ณ„ ์—์„œ ๊ธฐ๊ณ„ ↔ ๊ธฐ๊ณ„๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค.
 

๐Ÿ“Œ HTML vs JSON - ์™œ REST๊ฐ€ ์–ด๋ ค์šด๊ฐ€?

1. HTML์€ REST์— ์ž˜ ๋งž๋Š”๋‹ค.
โœ… Self-descriptive (์ž์ฒด ์„ค๋ช… ๋ฉ”์‹œ์ง€)
 ~> Content-Type: text/html ์„ ๋ณด๊ณ  HTML ๋ฌธ์„œ์ž„์„ ์•ˆ๋‹ค.
 ~> text/html์€ IANA์— ๋“ฑ๋ก๋œ ํ‘œ์ค€ media type์ด๋‹ค.
 ~> ๋ช…์„ธ๋Š” W3C HTML ๋ช…์„ธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
 ~> HTML ํƒœ๊ทธ <a>, <form> ๋“ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ํ–‰๋™์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์•ˆ๋‚ดํ•œ๋‹ค.
โœ… HATEOAS (ํ•˜์ดํผ๋ฏธ๋””์–ด๋ฅผ ํ†ตํ•œ ์ƒํƒœ ์ „์ด)
 ~> <a href="..."> ๋งํฌ๋งŒ์œผ๋กœ ๋‹ค์Œ ํ–‰๋™์„ ์œ ๋„ํ•  ์ˆ˜ ์žˆ๋‹ค.
 ~> ์‚ฌ์šฉ์ž(๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €)๋Š” ๋ฌธ์„œ ์•ˆ์˜ ๋งํฌ๋งŒ ๋”ฐ๋ผ๊ฐ€๋ฉด ๋œ๋‹ค.
 ~> ์ฆ‰, ๋ฉ”์‹œ์ง€๋งŒ์œผ๋กœ ์ƒํƒœ ์ „์ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
 
2. JSON์€ REST์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
โŒ Self-descriptive (์ž์ฒด ์„ค๋ช… ๋ฉ”์‹œ์ง€)
  ~> Content-Type: application/json์ด ๋ช…์‹œ๋ผ ์žˆ์œผ๋‚˜, JSON ๋‚ด๋ถ€์˜ "id", "title"์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€๋Š” ์™ธ๋ถ€ ๋ฌธ์„œ ์—†์ด๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค.
 ~> ๋ช…์„ธ๋Š” ์žˆ์ง€๋งŒ, ํ•„๋“œ์˜ ์˜๋ฏธ๊นŒ์ง€๋Š” ์„ค๋ช…ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‚ฌ๋žŒ์ด ํ•ด์„ํ•ด์•ผ ํ•œ๋‹ค.
โŒ HATEOAS (ํ•˜์ดํผ๋ฏธ๋””์–ด๋ฅผ ํ†ตํ•œ ์ƒํƒœ ์ „์ด)
  ~> JSON ์‘๋‹ต์—๋Š” "๋‹ค์Œ์— ๋ญ˜ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€"๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋งํฌ๊ฐ€ ์—†๋‹ค.
  ~> /todos/1์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด, ํด๋ผ์ด์–ธํŠธ๊ฐ€ API ๋ฌธ์„œ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  ~> ์ฆ‰, ์ž๊ธฐ ๊ธฐ์ˆ ์ด ์•„๋‹Œ, ์‚ฌ์ „ ์ง€์‹์— ์˜์กดํ•œ๋‹ค.
 

๐Ÿ“Œ ๊ทธ๋ž˜์„œ ๋Œ€๋ถ€๋ถ„์˜ REST API๋Š” ์‚ฌ์‹ค "RESTful" ํ•˜์ง€ ์•Š๋‹ค.

์œ„์™€ ๊ฐ™์ด REST์˜ ๋ณธ์งˆ์ ์ธ ์ œ์•ฝ์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค๋ฌด์—์„œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ JSON ๊ธฐ๋ฐ˜ API๊ฐ€ ์‹ค์ œ๋กœ๋Š” REST์Šค๋Ÿฝ์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
 
์ด์œ ๋ฅผ ์ •๋ฆฌํ•ด ๋ณด์ž๋ฉด
 1. JSON์€ ํ•˜์ดํผ๋ฏธ๋””์–ด๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
   ~> HTML์€ <a>, <form> ๋“ฑ์œผ๋กœ ๋‹ค์Œ ํ–‰๋™์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์œ ๋„ํ•˜์ง€๋งŒ, JSON์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋งŒ ํ‘œํ˜„ํ•˜๊ณ , ๋‹ค์Œ ํ–‰๋™์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋‹ด์ง€ ์•Š๋Š”๋‹ค.
 2. ํด๋ผ์ด์–ธํŠธ๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ URL์„ ์‚ฌ์šฉํ•œ๋‹ค.
  ~> ๋งํฌ๊ฐ€ ๋ฉ”์‹œ์ง€ ์•ˆ์— ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์ „์— ๊ฒฝ๋กœ(/todos/{id}/edit ๋“ฑ)๋ฅผ ์•Œ์•„์•ผ ๋™์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค.
 3. API ๋ฌธ์„œ๊ฐ€ ์—†์œผ๋ฉด ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  ~> REST๋ผ๋ฉด ๋ฉ”์‹œ์ง€ ์ž์ฒด๋งŒ์œผ๋กœ ์‚ฌ์šฉ๋ฒ•์ด ๋ณด์—ฌ์•ผ ํ•˜์ง€๋งŒ, JSON์€ ํ•„๋“œ๋ช…์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Swagger ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์•ผ ํ•œ๋‹ค.
 • ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์ด ๋†’์•„์ง„๋‹ค.
  ~> Self-descriptive ๋˜๋Š” HATEOAS๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ปค์Šคํ…€ ๋ฏธ๋””์–ด ํƒ€์ž…, ๋งํฌ ์‚ฝ์ž…, ๋ช…์„ธ ๋ฌธ์„œ ๊ด€๋ฆฌ ๋“ฑ ์ถ”๊ฐ€ ๊ตฌํ˜„๊ณผ ํ‘œ์ค€ํ™” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
 
๊ทธ๋Ÿผ์—๋„ ์™œ JSON์„ ์“ฐ๋Š”๊ฐ€?

์ด์œ  ์„ค๋ช…
HTML์€ ์‚ฌ๋žŒ์„ ์œ„ํ•œ ํฌ๋งท JSON์€ ๊ธฐ๊ณ„ ๊ฐ„ ํ†ต์‹ ์— ์ตœ์ ํ™”
REST๋Š” ์›๋ž˜ '์‚ฌ๋žŒ ↔ ์›น'์— ์ดˆ์  ์ง€๊ธˆ์€ ๋Œ€๋ถ€๋ถ„ '๊ธฐ๊ณ„ ↔ ๊ธฐ๊ณ„' ํ†ต์‹  (HTTP API)
JSON์€ ๊ฐ€๋ณ๊ณ  ์‚ฌ์šฉ์ด ์‰ฌ์›€ ํ•˜์ง€๋งŒ REST ์ฒ ํ•™์„ ๋‹ด๊ธฐ์—๋Š” ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•จ
์‹ค์ œ๋กœ HATEOAS ๊ตฌํ˜„ ๋ถ€๋‹ด์ด ํผ ๋Œ€๋ถ€๋ถ„ ์ƒ๋žต๋จ, ์‚ฌ์‹ค์ƒ ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ํ†ต์‹ 

 

๐Ÿ“Œ ๋Œ€์•ˆ์€? ๋” ์ •์งํ•˜๊ฒŒ ๋ถ€๋ฅด๊ธฐ

 • ๋ชจ๋“  API๋ฅผ REST API๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ๋ง์ž. (์ฆ‰, REST API๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋‚จ์šฉํ•˜์ง€ ๋ง์ž.)
 • REST ์ œ์•ฝ์„ ๋”ฐ๋ฅด์ง€ ๋ชปํ•œ๋‹ค๋ฉด HTTP API ํ˜น์€ RPC-style API๋กœ ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•˜๋‹ค.
 • REST๋Š” ๋‹จ์ˆœํ•œ URL ์„ค๊ณ„ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ, "์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๋…๋ฆฝ์  ์ง„ํ™”๋ฅผ ๋ณด์žฅํ•˜๋Š” ์„ค๊ณ„ ์ฒ ํ•™"์ž„์„ ๊ธฐ์–ตํ•˜์ž.
 

'๐Ÿ“‚ Computer Science' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

A2A(Agent to Agent)๋ž€?  (1) 2025.04.14
MCP(Model Context Protocol)๋ž€?  (4) 2025.04.11
Interpreter, Compiler์— ๋Œ€ํ•˜์—ฌ  (0) 2025.03.12
NUnit์— ๋Œ€ํ•˜์—ฌ  (0) 2025.03.08
Rendering์— ๋Œ€ํ•˜์—ฌ  (0) 2025.03.07
'๐Ÿ“‚ Computer Science' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • A2A(Agent to Agent)๋ž€?
  • MCP(Model Context Protocol)๋ž€?
  • Interpreter, Compiler์— ๋Œ€ํ•˜์—ฌ
  • NUnit์— ๋Œ€ํ•˜์—ฌ
YeonSu02
YeonSu02
Email : rkddustn2519@naver.com
  • YeonSu02
    IsLiife2
    YeonSu02
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • ๐Ÿ“‚ Computer Science
      • ๐Ÿ“‚ Unity Engine Study
        • ๐Ÿ“„ Unity ์ธํ”„๋Ÿฐ ๊ฐ•์˜
        • ๐Ÿ“„ Unity ์œ ํŠœ๋ธŒ ๊ฐ•์˜
        • ๐Ÿ“„ Unity ์ฐธ๊ณ 
      • ๐Ÿ“‚ Game Designer Study
        • ๐Ÿ“„ ๊ธฐํš ์ธํ”„๋Ÿฐ ๊ฐ•์˜
      • ๐Ÿ“‚ Quality Assurance Study
        • ๐Ÿ”ฅ ์—˜๋ฆฌ์Šค SW QAํŠธ๋ž™
        • ๐Ÿ“„ QA ๊ณต๋ถ€
        • ๐Ÿ“š QA ์ฑ… ๋ฆฌ๋ทฐ
      • ๐Ÿ“‚ Program Language Study
        • ๐Ÿ“„ C# ๊ณต๋ถ€
        • ๐Ÿ“„ ํŒŒ์ด์ฌ ๊ณต๋ถ€
        • ๐Ÿ“„ Java ๊ณต๋ถ€
        • ๐Ÿ“„ JavaScript ๊ณต๋ถ€
      • ๐Ÿ“‚ Additional Study
        • ๐Ÿ“„ Git
        • ๐Ÿ“„ Firebase
        • ๐Ÿ“„ License
      • ๐Ÿ’ป Game Development
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ •์ฒ˜๊ธฐ
    ์ปดํ™œ2๊ธ‰
    ์ •์ฒ˜๊ธฐ ํ•„๊ธฐ
    ์ปดํ“จํ„ฐํ™œ์šฉ๋Šฅ๋ ฅ
    ์ปดํ“จํ„ฐํ™œ์šฉ๋Šฅ๋ ฅ1๊ธ‰
    qa ์ฑ… ๋ฆฌ๋ทฐ
    ์ปดํ“จํ„ฐํ™œ์šฉ๋Šฅ๋ ฅ2๊ธ‰
    qa ์ฑ…
    ๊ตญ์ œ์ž๊ฒฉ์ฆ
    ์—‘์…€
    istqb-ctfl
    ์ž๊ฒฉ์ฆ
    qa์ž๊ฒฉ์ฆ
    ํ…Œ์ŠคํŒ…์ž๊ฒฉ์ฆ
    BTS
    QA
    ISTQB
    ์ •์ฒ˜๊ธฐ ๋…ํ•™
    ์ปดํ™œ
    ์ •์ฒ˜๊ธฐ ์‹ค๊ธฐ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
YeonSu02
๋„ค์ด๋ฒ„ Tech Talk - ๊ทธ๋Ÿฐ REST API๋กœ ๊ดœ์ฐฎ์€๊ฐ€
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”