๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

TIL

์›นํŽ˜์ด์ง€ ๋žœ๋”๋ง ใƒป Restful API

 

๐Ÿ“Œ ์›นํŽ˜์ด์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๋žœ๋”๋ง๋˜๋Š” ๊ณผ์ •

 

 

HTML ํŒŒ์‹ฑ - DOM ํŠธ๋ฆฌ ๊ตฌ์ถ• - CSS ํŒŒ์‹ฑ - Render ํŠธ๋ฆฌ ๊ตฌ์ถ• - ๋ ˆ์ด์•„์›ƒ - ํŽ˜์ธํŠธ - ๋ฐ˜์‘์„ฑ ๋ฐ ์ƒํ˜ธ์ž‘์šฉ

 

 

 

1. HTML ํŒŒ์‹ฑ

 

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ html ํŒŒ์ผ์„ ๋žœ๋”๋ง ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ธ์ œ์ผ๊นŒ?

๋ธŒ๋ผ์šฐ์ €์— ์‚ฌ์ดํŠธ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด, ์ฃผ์†Œ์— ์žˆ๋Š” ์„œ๋ฒ„๊ฐ€ ์•ฝ์†๋˜์–ด ์žˆ๋Š” html ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋•Œ, html ์ฝ”๋“œ๋Š” 8๋น„ํŠธ์˜ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋กœ ์ „์†ก๋œ๋‹ค.(=๋ฐ”์ดํŠธ ์ŠคํŠธ๋ฆผ) 

 

๋ฐ”์ดํŠธ๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ† ํฐ๊ณผ ๋น„๊ต๋ฅผ ํ•ด์„œ ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ html ์ฝ”๋“œ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.(ํ† ํฐํ™” ๊ณผ์ •) ํ† ํฐ์€ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” html์˜ ์‹œ์ž‘ ํ˜น์€ ์ข…๋ฃŒ ํƒœ๊ทธ ๊ทธ๋ฆฌ๊ณ  ์†์„ฑ๊ณผ ์†์„ฑ ๊ฐ’ ๋“ฑ ์•ฝ์†๋œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ’๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. 

 

 

 

2. DOM ํŠธ๋ฆฌ ๊ตฌ์ถ•

 

์œ„ ํ† ํฐํ™” ๊ณผ์ •์„ ํ†ตํ•ด ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ๋…ธ๋“œ๋Š” DOM ํŠธ๋ฆฌ๋ฅผ ์ด๋ฃจ๋Š” ๊ฑฐ๋Œ€ํ•œ ๊ตฌ์กฐ์˜ ํ•œ ๋‹จ์œ„๋ฅผ ๋งํ•œ๋‹ค. ์ž‘์€ ๋…ธ๋“œ๋“ค์ด ๋ชจ์—ฌ์„œ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๊ฒŒ ๋œ๋‹ค. 

 

DOM ํŠธ๋ฆฌ

 

๋ธŒ๋ผ์šฐ์ €๊ฐ€ DOM ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, link์™€ img ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ํƒœ๊ทธ ์•ˆ์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์šด ๋ฐ›๋Š”๋‹ค.

script ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ๋” ์ƒ์„ฑ์„ ์ค‘๋‹จํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•œ๋‹ค.

 

 

 

3. CSS ํŒŒ์‹ฑ

 

๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌ๋ฐ›์€ CSS ํŒŒ์ผ์„ ๋ฌธ์ž๋กœ ํ•ด์„ํ•˜๊ณ  ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ† ํฐ๊ณผ ๋น„๊ต๋ฅผ ํ•ด์„œ ๋…ธ๋“œ๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค. ๋…ธ๋“œ๋“ค์ด ๋ชจ์—ฌ์„œ CSS object ๋ชจ๋ธ.  ์ฆ‰, CSSOM Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

 

 

 

4. Render ํŠธ๋ฆฌ ๊ตฌ์ถ•

 

 

DOM ํŠธ๋ฆฌ์™€ CSSOM ํŠธ๋ฆฌ๋ฅผ ํ•ฉ์ณ์„œ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (์ด๋ฅผ ํฌ๊ฒŒ ๋ ˆ์ด์•„์›ƒ ๋‹จ๊ณ„๋ผ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.) Render ํŠธ๋ฆฌ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ์š”์†Œ๋“ค๊ณผ ๊ทธ๋“ค์˜ ์Šคํƒ€์ผ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค. ํ•˜์ง€๋งŒ, ์ผ๋ถ€ ์š”์†Œ๋Š” ๋ Œ๋”๋ง์— ํฌํ•จ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํƒ€์ผ์— "display: none"์ด ์ง€์ •๋œ ์š”์†Œ๋Š” ๋ Œ๋” ํŠธ๋ฆฌ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. 

 

 

 

 

5. ๋ ˆ์ด์•„์›ƒ (๋ฆฌํ”Œ๋กœ์šฐ)

 

 

 

์•ž์„œ ๋งŒ๋“ค์–ด์ง„ DOM ํŠธ๋ฆฌ์™€ ๊ณ„์‚ฐ๋œ ์Šคํƒ€์ผ์„ ๋”ฐ๋ผ๊ฐ€๋ฉด์„œ ์š”์†Œ์˜ ํฌ๊ธฐ๋‚˜ ์ขŒํ‘œ์™€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ๋‹ด์€ ๋ ˆ์ด์•„์›ƒ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. 

 

 

 

 

 

* ๋ฆฌํ”Œ๋กœ์šฐ : css๋ฅผ ์ˆ˜์ •ํ•ด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋‹จ๊ผ์ธ ํŽ˜์ธํŠธ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ ๋ ˆ์ด์•„์›ƒ์ด ์ค‘๊ฐ„์— ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ €์— ๋ถ€๋‹ด์ด ๋˜๋Š” ์ž‘์—…์ด๋‹ค.

 

๋ฆฌํ”Œ๋กœ์šฐ์™€ ๋ฆฌํŽ˜์ธํŠธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋™์‹œ์— ์‹คํ–‰๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ๋ ˆ์ด์•„์›ƒ์˜ ์˜ํ–ฅ์ด ์—†๋Š” ๋ณ€๊ฒฝ์ด ๋ฆฌํ”Œ๋กœ์šฐ ์—†์ด ๋ฆฌํŽ˜์ธํŠธ๋งŒ ์‹คํ–‰๋œ๋‹ค.

 

 

 

 

6. ํŽ˜์ธํŠธ (๋ฆฌํŽ˜์ธํŠธ)

 

๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ๋”ฐ๋ผ์„œ ํŽ˜์ธํŠธ ๊ธฐ๋ก์ด ์ƒ์„ฑ์ด ๋œ๋‹ค. ํŽ˜์ธํŠธ ๊ธฐ๋ก์—๋Š” ์š”์†Œ๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ์ˆœ์„œ ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ๊นŒ์ง€์˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ํŽ˜์ด์ง€๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ด์–ด๋กœ ๋‚˜๋ˆˆ ๋‹ค์Œ ๊ทธ ์œ„์— ํ…์ŠคํŠธ, ์ƒ‰, ์ด๋ฏธ์ง€, ๋ณด๋”, ๊ทธ๋ฆผ์ž ๋“ฑ ๋ชจ๋“  ์‹œ๊ฐ์ ์ธ ๋ถ€๋ถ„์„ ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์ด ์ง„ํ–‰๋œ๋‹ค.

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


 

** transform, opacity๋Š” ๋ฆฌํ”Œ๋กœ์šฐ, ๋ฆฌํŽ˜์ธํŠธ ์ƒ๋žต

transform, opacity๋Š” DOM ํŠธ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์œ ๋ คํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํฌ์ง€์…˜ ์†์„ฑ๋ณด๋‹ค๋Š” ํŠธ๋žœ์Šคํผ ์†์„ฑ์„ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

 

7. ๋ฐ˜์‘์„ฑ ๋ฐ ์ƒํ˜ธ์ž‘์šฉ

 

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

 

 

 

 

 


 

 

 

๐Ÿ“Œ Restful API๋ž€?

 

RESTful API๋Š” Representational State Transfer(ํ‘œํ˜„ ์ƒํƒœ ์ „์†ก)์˜ ์•ฝ์–ด๋กœ, ์›น ์„œ๋น„์Šค์˜ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. RESTful API๋Š” ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๊ทœ์น™๊ณผ ์ œ์•ฝ์„ ์ œ๊ณตํ•œ๋‹ค.

 

  1. ์ฃผ์š” ํŠน์ง•:
    • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ตฌ์กฐ: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ์ƒํƒœ ์—†์Œ(Statelessness): ๊ฐ ์š”์ฒญ์€ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์„œ๋ฒ„๋Š” ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค.
    • ์บ์‹œ ์ง€์›: ์‘๋‹ต ๋ฐ์ดํ„ฐ์— ์บ์‹œ ํ—ค๋”๋ฅผ ํฌํ•จํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์บ์‹ฑ์„ ํ†ตํ•ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ณ„์ธตํ™”: ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋œ ์‹œ์Šคํ…œ์—์„œ ์ค‘๊ฐ„ ๊ณ„์ธต(๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ์บ์‹œ ๋“ฑ)์„ ํ†ตํ•ด ํ™•์žฅ์„ฑ๊ณผ ๋ณด์•ˆ์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค: ์ผ๊ด€๋œ URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›์— ์ ‘๊ทผํ•˜๊ณ , HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์›์˜ ์ƒํƒœ๋ฅผ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ฃผ์š” HTTP ๋ฉ”์„œ๋“œ:
    • GET: ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • POST: ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • PUT: ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธ(์ „์ฒด ๊ต์ฒด)ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • PATCH: ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธ(๋ถ€๋ถ„ ๋ณ€๊ฒฝ)ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • DELETE: ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

RESTful API์—๋Š” ์ด์™ธ์—๋„ OPTIONS, HEAD, TRACE, CONNECT ๋“ฑ์˜ HTTP ๋ฉ”์„œ๋“œ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • OPTIONS: ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ง€์› ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • HEAD: GET ๋ฉ”์„œ๋“œ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์‘๋‹ต ๋ณธ๋ฌธ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ํ—ค๋” ์ •๋ณด๋งŒ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • TRACE: ์š”์ฒญ์„ ๋ฐ˜์‚ฌํ•˜์—ฌ ๋””๋ฒ„๊น…์ด๋‚˜ ํ…Œ์ŠคํŠธ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • CONNECT: ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€์˜ ํ„ฐ๋„์„ ๋งบ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.