allthingsare๐Ÿ…ฟ๏ธ.com Books โฌ…๏ธ Back allthingsare

RESTful ๊ฐœ๋…๊ณผ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๋ ˆ์ด์–ด

1. RESTful ๊ฐœ๋…

**REST (Representational State Transfer)**๋Š” ์›น์—์„œ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ด๋‹ค.
์ด๋ฅผ ๋”ฐ๋ฅด๋Š” ์„ค๊ณ„ ๋ฐฉ์‹์„ RESTful์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

RESTful์˜ ํ•ต์‹ฌ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

  1. ์ž์›(Resource)์˜ ๋ช…ํ™•ํ•œ ์‹๋ณ„

    • ์›น์—์„œ ๋ชจ๋“  ์ž์›์€ ๊ณ ์œ ํ•œ URI๋กœ ํ‘œํ˜„๋œ๋‹ค.

    • ์˜ˆ: /students/1 โ†’ id๊ฐ€ 1์ธ ํ•™์ƒ ์ž์›

  2. ํ‘œ์ค€ HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ

    • GET : ์ž์› ์กฐํšŒ

    • POST : ์ž์› ์ƒ์„ฑ

    • PUT : ์ž์› ์ „์ฒด ์ˆ˜์ •

    • PATCH : ์ž์› ๋ถ€๋ถ„ ์ˆ˜์ •

    • DELETE : ์ž์› ์‚ญ์ œ

  3. ๋ฌด์ƒํƒœ์„ฑ(Stateless)

    • ์„œ๋ฒ„๋Š” ์š”์ฒญ ๊ฐ„ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

    • ๊ฐ ์š”์ฒญ์€ ๋…๋ฆฝ์ ์ด๋ฉฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค.

  4. ํ‘œ์ค€ํ™”๋œ ์‘๋‹ต ํฌ๋งท

    • ์ฃผ๋กœ JSON, ๋•Œ๋กœ๋Š” XML์„ ์‚ฌ์šฉํ•œ๋‹ค.

    • ์ผ๊ด€๋œ ์‘๋‹ต ๊ตฌ์กฐ๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์˜ ํŽธ์˜์„ฑ์„ ๋†’์ธ๋‹ค.

RESTful์€ ๋‹จ์ˆœํžˆ API ์ž‘์„ฑ ๊ทœ์น™์ด ์•„๋‹ˆ๋ผ, "์›น ์ž์›์„ ์ผ๊ด€๋˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ๋‹ค๋ฃจ๋Š” ์ฒ ํ•™" ์ด๋‹ค.


2. ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๋ ˆ์ด์–ด

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณดํ†ต **3๊ณ„์ธต ๊ตฌ์กฐ(Layered Architecture)**๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
์ด ๊ตฌ์กฐ๋Š” ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ธ๋‹ค.

  1. Controller (ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด)

    • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ , ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋Œ๋ ค์ฃผ๋Š” ์—ญํ• 

    • RESTful API ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ณณ

    • ์˜ˆ: GET /students ์š”์ฒญ์„ ๋ฐ›์•„ ์„œ๋น„์Šค์— ์ „๋‹ฌ

  2. Service (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ ˆ์ด์–ด)

    • ์‹ค์ œ ๋™์ž‘(๋กœ์ง)์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต

    • ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ, ๊ทœ์น™ ์ ์šฉ, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰ ๋“ฑ์„ ๋‹ด๋‹น

    • ์˜ˆ: ํ•™์ƒ ์„ฑ์  ํ‰๊ท ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ธฐ๋Šฅ

  3. Repository (๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ ˆ์ด์–ด)

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ง์ ‘ ์†Œํ†ตํ•˜๋Š” ๊ณ„์ธต

    • SQL ์‹คํ–‰, ๋ฐ์ดํ„ฐ ์ €์žฅ/์กฐํšŒ/์‚ญ์ œ ๋‹ด๋‹น

    • ์˜ˆ: ํ•™์ƒ ์ •๋ณด๋ฅผ MySQL์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ


3. ๋ ˆ์ด์–ด ๊ฐ„ ๊ด€๊ณ„

ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

์‚ฌ์šฉ์ž ์š”์ฒญ โ†’ Controller โ†’ Service โ†’ Repository โ†’ DB
โ†˜ (๊ฒฐ๊ณผ ๋ฐ˜ํ™˜)

์ด ๊ตฌ์กฐ ๋•๋ถ„์—:

  • Controller๋Š” ๋‹จ์ˆœํžˆ ์ž…์ถœ๋ ฅ๋งŒ ๋‹ด๋‹น

  • Service๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™๋งŒ ์ง‘์ค‘

  • Repository๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ๋งŒ ์ „๋‹ด

์ฑ…์ž„์ด ๋ช…ํ™•ํžˆ ๋‚˜๋‰˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.


์ •๋ฆฌ:

  • RESTful์€ ์ž์›์„ URI์™€ HTTP ๋ฉ”์„œ๋“œ๋กœ ํ‘œํ˜„ํ•˜๋Š” ์›น ์•„ํ‚คํ…์ฒ˜ ์ฒ ํ•™.

  • ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” Controllerโ€“Serviceโ€“Repository๋กœ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•œ ๊ตฌ์กฐ.

  • ๋‘˜์„ ๊ฒฐํ•ฉํ•˜๋ฉด, RESTful API ์„ค๊ณ„๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ณ , ์‹œ์Šคํ…œ์ด ๊ฒฌ๊ณ ํ•ด์ง„๋‹ค.