REST / HTTP


REST



  • Representational State Transfer

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์š”์ฒญ๋˜์–ด์ง€๋Š” ์‹œ์ ์—์„œ ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ „๋‹ฌ

  • JSON ํ˜น์€ XML์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 

    • Client, Server : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌ ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ

    • Stateless : ์š”์ฒญ์— ๋Œ€ํ•ด ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š์•„์•ผ ํ•จ

    • Cache : ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ ์‘๋‹ต์„ Cache(์ž„์‹œ์ €์žฅ)ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ / ํด๋ผ์ด์–ธํŠธ๊ฐ€ Cache๋ฅผ ํ†ตํ•ด์„œ ์‘๋‹ต์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ๋‚ฎ์ถค

    • Layered System(๊ณ„์ธตํ™”) : ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ๋ฐฉํ™”๋ฒฝ, ๊ฒŒ์ดํŠธ์›จ์ด, Proxy ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณ„์ธต ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ™•์žฅ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

    • ์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ : ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๊ด€์„ฑ์„ ์ง€ํ‚ค๊ณ , ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹จ์ˆœํ™”์‹œ์ผœ ์ž‘์€ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ, ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

    • Code on Demand (optional) : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋“ฑ ํŠน์ •ํ•œ ๊ธฐ๋Šฅ์„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ „๋‹ฌ๋ฐ›์•„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ



์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ - REST๋ฅผ ์ž˜ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ

  • ์•„๋ž˜ ์กฐ๊ฑด๋“ค์„ ์ž˜ ๊ฐ–์ถ˜ ๊ฒฝ์šฐ Restful ํ•˜๋‹ค๊ณ  ํ‘œํ˜„, ์ด๋ฅผ REST API๋ผ๊ณ  ๋ถ€๋ฆ„

  • ์ž์›์˜ ์‹๋ณ„

    • ์›น ๊ธฐ๋ฐ˜์˜ REST์—์„œ๋Š” ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ํ•  ๋•Œ URI ์‚ฌ์šฉ

      • https://abcd.co.kr/user/100

        • Resource : user

        • ์‹๋ณ„์ž : 100

  • ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•œ ๋ฆฌ์†Œ์Šค ์กฐ์ž‘

    • Web์—์„œ๋Š” HTML, XML, JSON, TEXT ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

    • ์–ด๋– ํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ์ธ์ง€๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด HTTP Header ๋ถ€๋ถ„์— content-type์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

    • ๋ฆฌ์†Œ์Šค ์กฐ์ž‘์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ „์ฒด ์ „๋‹ฌ X, ๋ฉ”์‹œ์ง€๋กœ ์ „๋‹ฌ

  • ์ž๊ธฐ ์„œ์ˆ ์  ๋ฉ”์‹œ์ง€

    • ์š”์ฒญํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ ๋˜์–ด์ ธ์•ผ ํ•˜๋Š”์ง€ ์ถฉ๋ถ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

    • HTTP ๊ธฐ๋ฐ˜์˜ REST ์—์„œ๋Š” HTTP Method์™€ Header ์ •๋ณด, URI์— ํฌํ•จ๋˜๋Š” ์ •๋ณด๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

  • Application ์ƒํƒœ์— ๋Œ€ํ•œ ์—”์ง„์œผ๋กœ์จ ํ•˜์ดํผ๋ฏธ๋””์–ด

    • REST API๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋‹จ์ˆœํžˆ Client ์š”์ฒญ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์‘๋‹ต ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ด€๋ จ๋œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ Link ์ •๋ณด๊นŒ์ง€ ๊ฐ™์ด ํฌํ•จ ๋˜์–ด์ ธ์•ผ ํ•จ




HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ



  • ๋™์ผํ•œ ์š”์ฒญ์„ ํ•œ ๋ฒˆ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ์—ฌ๋Ÿฌ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์ง€๋‹ˆ๊ณ , ์„œ๋ฒ„์˜ ์ƒํƒœ๋„ ๋™์ผํ•˜๊ฒŒ ๋‚จ์„ ๋•Œ, ํ•ด๋‹น HTTP ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์กŒ๋‹ค๊ณ  ํ•œ๋‹ค

  • GET : ์‚ฌ์šฉ์ž์˜ ์ •๋ณด ์š”์ฒญ

  • POST : ์‚ฌ์šฉ์ž ์ •๋ณด ์ƒ์„ฑ

  • PUT : ์‚ฌ์šฉ์ž ์ •๋ณด ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •

  • DELETE : ์‚ฌ์šฉ์ž ์ •๋ณด ์‚ญ์ œ



HTTP Status Code


  • ์‘๋‹ต์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ

    • 1XX

      • ์˜๋ฏธ : ์ฒ˜๋ฆฌ์ค‘

      • ์ฒ˜๋ฆฌ๊ฐ€ ๊ณ„์† ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ, ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ๊ณ„์† ํ•˜๊ฑฐ๋‚˜ ์„œ๋ฒ„์˜ ์ง€์‹œ์— ๋”ฐ๋ผ ์žฌ์š”์ฒญ

    • 2XX

      • ์˜๋ฏธ : ์„ฑ๊ณต

      • ์š”์ฒญ์˜ ์„ฑ๊ณต

    • 3XX

      • ์˜๋ฏธ : ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ

      • ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ๋Š” Response์˜ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋กœ ๋‹ค์‹œ ์š”์ฒญ

    • 4XX

      • ์˜๋ฏธ : ํด๋ผ์ด์–ธํŠธ ์—๋Ÿฌ

      • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์—๋Ÿฌ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ, ์žฌ์ „์†ก ํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ

    • 5XX

      • ์˜๋ฏธ : ์„œ๋ฒ„์—๋Ÿฌ

      • ์„œ๋ฒ„ ์ฒ˜๋ฆฌ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ, ์žฌ ์ „์†ก์‹œ ์—๋Ÿฌ๊ฐ€ ํ•ด๊ฒฐ ๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ์Œ

  • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋“ค

    • 200 : ์„ฑ๊ณต

    • 201 : ์„ฑ๊ณต, ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์„ฑ๊ณต

    • 301 : ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹ค๋ฅธ ์žฅ์†Œ๋กœ ๋ณ€๊ฒฝ๋จ์„ ์•Œ๋ฆผ

    • 303 : ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, Client์—์„œ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋กœ ์š”์ฒญ ์ฒ˜๋ฆฌ

    • 400 : ์š”์ฒญ ์˜ค๋ฅ˜, ํŒŒ๋ผ๋ฏธํ„ฐ ์—๋Ÿฌ

    • 401 : ๊ถŒํ•œ ์—†์Œ (์ธ์ฆ์‹คํŒจ)

    • 404 : ๋ฆฌ์†Œ์Šค ์—†์Œ (ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ)

    • 500 : ์„œ๋ฒ„ ๋‚ด๋ถ€ ์—๋Ÿฌ (์„œ๋ฒ„ ๋™์ž‘ ์ฒ˜๋ฆฌ ์—๋Ÿฌ)

    • 503 : ์„œ๋น„์„œ ์ •์ง€ (์ ๊ฒ€ ๋“ฑ)

Categories:

Spring