216.73.216.168 TODAY : 3,803

PHP ์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ๊ณ ๊ธ‰

๐Ÿ“š PHP ๊ณ ๊ธ‰ - 4์ฃผ์ฐจ: RESTful API ๊ฐœ๋ฐœ ๊ธฐ์ดˆ - 01 RESTful API ๊ฐœ๋…๊ณผ ์›์น™

๐Ÿ“š PHP ๊ณ ๊ธ‰ - 4์ฃผ์ฐจ: RESTful API ๊ฐœ๋ฐœ ๊ธฐ์ดˆ - 01 RESTful API ๊ฐœ๋…๊ณผ ์›์น™
ํ‰์  10.0 ๋ผ์ด์„ผ์Šค free
์‚ฌ์šฉ์žํ‰์  10.0 ์šด์˜์ฒด์ œ
๋‹ค์šด๋กœ๋“œ 1 ํŒŒ์ผํฌ๊ธฐ 0
์ œ์ž‘์‚ฌ LUZENSOFT ๋“ฑ๋ก์ผ 2025-09-14 14:41:51
์กฐํšŒ์ˆ˜ 3
- ์„ค๋ช…

#RESTful API์˜ #๊ฐœ๋…

uploadImage


#REST (Representational State Transfer)๋Š” #์›น ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ #์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค. #RESTful API๋Š” ์ด๋Ÿฌํ•œ REST ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์˜ #์›์น™์„ ์ค€์ˆ˜ํ•˜์—ฌ ์„ค๊ณ„๋œ #API๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด, ์›น์— ์žˆ๋Š” #์ž์› (Resource)์„ #HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž์›์€ #์‚ฌ์ง„, #๋™์˜์ƒ, #ํ…์ŠคํŠธ ๋“ฑ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

#RESTful API์˜ ํ•ต์‹ฌ์€ ๊ฐ ์ž์›์„ ๊ณ ์œ ํ•œ #URI (Uniform Resource Identifier)๋กœ ์‹๋ณ„ํ•˜๊ณ , #HTTP ๋ฉ”์„œ๋“œ (GET, POST, PUT, DELETE ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ #CRUD (Create, Read, Update, Delete) #์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์‹œ๋ฌผ์ด๋ผ๋Š” ์ž์›์ด ์žˆ๋‹ค๋ฉด /posts์™€ ๊ฐ™์€ URI๋กœ ๊ฒŒ์‹œ๋ฌผ์— ์ ‘๊ทผํ•˜๊ณ , GET /posts๋Š” ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•˜๊ณ , POST /posts๋Š” ์ƒˆ ๊ฒŒ์‹œ๋ฌผ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.



#REST์˜ #6๊ฐ€์ง€ #์•„ํ‚คํ…์ฒ˜ ์›์น™

uploadImage


#REST๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 6๊ฐ€์ง€ ํ•ต์‹ฌ #์•„ํ‚คํ…์ฒ˜ ์›์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ด ์›์น™๋“ค์€ #RESTful API์˜ #์„ค๊ณ„ ์ฒ ํ•™์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. #ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ (Client-Server) #ํด๋ผ์ด์–ธํŠธ์™€ #์„œ๋ฒ„์˜ #์—ญํ• ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ #๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” #์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์„ ๋‹ด๋‹นํ•˜๊ณ , ์„œ๋ฒ„๋Š” #๋ฐ์ดํ„ฐ ์ €์žฅ๊ณผ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  2. #๋ฌด์ƒํƒœ์„ฑ (Stateless) ๊ฐ #์š”์ฒญ์€ ๊ทธ ์ž์ฒด๋กœ ๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ #์ด์ „ ์š”์ฒญ์— ๋Œ€ํ•œ ์–ด๋–ค ์ •๋ณด๋„ ์œ ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•„์š”ํ•œ ์ •๋ณด๋Š” #์š”์ฒญ ์ž์ฒด์— ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” #์„œ๋ฒ„ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ์— ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค.

  3. #์บ์‹œ ๊ฐ€๋Šฅ (Cacheable) ํด๋ผ์ด์–ธํŠธ๋Š” #์‘๋‹ต์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” #์‘๋‹ต์— ์บ์‹œ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋ช…์‹œํ•˜์—ฌ #๋„คํŠธ์›Œํฌ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ณ  #์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. #๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ (Layered System) ํด๋ผ์ด์–ธํŠธ๋Š” #์ค‘๊ฐ„ ์„œ๋ฒ„๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ณ  #์—”๋“œ ์„œ๋ฒ„์™€ ์ง์ ‘ ํ†ต์‹ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” #๋ณด์•ˆ, #๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, #์บ์‹ฑ ๋“ฑ์„ ์œ„ํ•œ #์ค‘๊ฐ„ ๊ณ„์ธต์„ ํ—ˆ์šฉํ•˜์—ฌ #์‹œ์Šคํ…œ์˜ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ์ฆ๋Œ€์‹œํ‚ต๋‹ˆ๋‹ค.

  5. #์ฝ”๋“œ ์˜จ ๋””๋งจ๋“œ (Code on Demand) (์„ ํƒ ์‚ฌํ•ญ) ์„œ๋ฒ„๋Š” #์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด #ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: #์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ). ์ด ์›์น™์€ #์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

  6. #์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ (Uniform Interface) #RESTful API์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์›์น™ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. #์ž์›์˜ ์‹๋ณ„, #๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•œ ์ž์› ์กฐ์ž‘, #์ž๊ธฐ ์„œ์ˆ ์  ๋ฉ”์‹œ์ง€, #ํ•˜์ดํผ๋ฏธ๋””์–ด (HATEOAS)์˜ 4๊ฐ€์ง€ ํ•˜์œ„ ์›์น™์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์›์น™์€ #ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.



#์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ์˜ #ํ•˜์œ„ ์›์น™

uploadImage


#์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ ์›์น™์€ #RESTful API์˜ #์ดํ•ด๋„๋ฅผ ๋†’์ด๊ณ  #์ƒํ˜ธ์ž‘์šฉ์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

  • #์ž์›์˜ ์‹๋ณ„ (Identification of Resources) ๋ชจ๋“  ์ž์›์€ #๊ณ ์œ ํ•œ URI๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด URI๋ฅผ ํ†ตํ•ด ์ž์›์— #์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • #๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•œ ์ž์› ์กฐ์ž‘ (Manipulation of Resources Through Representations) ํด๋ผ์ด์–ธํŠธ๋Š” #์ž์›์˜ ํ‘œํ˜„ (Representation)์„ ๋ฐ›์•„ #์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ํ•ด๋‹น ์ž์›์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ #์ •๋ณด๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • #์ž๊ธฐ ์„œ์ˆ ์  ๋ฉ”์‹œ์ง€ (Self-descriptive Messages) ๊ฐ ๋ฉ”์‹œ์ง€๋Š” #์ž์‹ ์„ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ์ธก์€ #๋ฉ”์‹œ์ง€์˜ ๋‚ด์šฉ์„ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด #์ถ”๊ฐ€์ ์ธ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. #HTTP ํ—ค๋”์™€ #๋ฉ”์‹œ์ง€ ๋ฐ”๋””๊ฐ€ ์ด๋Ÿฌํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • #ํ•˜์ดํผ๋ฏธ๋””์–ด ์ปจํŠธ๋กค์Šค ์• ์ฆˆ ์—”์ง„ ์˜ค๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํ…Œ์ดํŠธ (#HATEOAS - Hypermedia as the Engine of Application State) #API ์‘๋‹ต์—๋Š” #๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์ž์›์œผ๋กœ์˜ #๋งํฌ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” #API์˜ ๋ฌธ์„œ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ์ง€ ๋ชปํ•ด๋„ #๋™์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์‹œ๋ฌผ ์กฐํšŒ ์‹œ ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.


PHP ๊ณ ๊ธ‰ RESTful API ๊ฐœ๋ฐœ ๊ธฐ์ดˆ ๊ฐœ๋… ์›์น™ ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„ ๋ฌด์ƒํƒœ์„ฑ ์บ์‹œ ๊ณ„์ธตํ™” ์ฝ”๋“œ ์˜จ ๋””๋งจ๋“œ ์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ ์ž์› ์‹๋ณ„ ๋ฉ”์‹œ์ง€ ์ž์› ์กฐ์ž‘ ์ž๊ธฐ ์„œ์ˆ ์  ๋ฉ”์‹œ์ง€ HATEOAS



๋ฌด๋ฃŒ์ฒดํ—˜, ๋Š๊น€์—†์ด ๋น ๋ฅธVPN VPN, ๊ตญ๋‚ด ๋‹ค๋Ÿ‰IP, ๋ชจ๋ฐ”์ผ๊ฐ€๋Šฅ, ๋ณธ์‚ฌ ํ’ˆ์งˆ๊ด€๋ฆฌ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ์„ฑ ๋†’์€ VPN ์„œ๋น„์Šค

https://xn--299ao67b9qbmsf04c.net/