[ํ๋ก์ ํธ] API ๋ช ์ธ ์์ฑํ๊ธฐ - 1
๋ ๋ค ๋ฐ๋ผํ๋ ํด๋ก ์ฝ๋ฉ์์๋ API ๋ช ์ธ๊ฐ ํ์ ์์์ง๋ง, ๋ง์ ๊ธฐ๋ฅ์ ๋ด์ ์นํ์ด์ง๋ฅผ ๊ตฌํํ๋ค ๋ณด๋ ์ด๋ค API์์ ์ด๋ค ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๊ณ , ํ๋ก ํธ์ ๋ฐฑ์์์ ๋ณ์ ์ ๋ฆฌ๊ฐ ํ์๊ฒ ๋ค๋ ํ๋จ์ด ๋ค์๋ค.
์ด์ ์ด๋ฒ ํฌ์คํ ์์๋ API ๋ช ์ธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ฐฐ๊ฒฝ์ง์์ ๊ฐ๋จํ ์ ๋ฆฌํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ํฌ์คํ ์์ API ๋ช ์ธ๋ฅผ ์์ฑํด๋ณด๊ณ ์ ํ๋ค.
์ฉ์ด์ ๊ฐ๋
API๋?
Application Programming Interface, ์์ฉํ๋ก๊ทธ๋จ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค
API์ ๊ฐ๋ ์ ์ค๋ช ํ ๋์๋ ์ข ์ข ๋ ์คํ ๋์ ์ ์์ผ๋ก ๋น์ ๋๊ณ ๋ ํ๋ค. ์ฆ, API๋ ์๋(ํ๋ก๊ทธ๋จ)์ด ์ฃผ๋ฌธํ ์ ์๋๋ก ๋ฉ๋ด(๋ช ๋ น ๋ชฉ๋ก)์ ์ ๋ฆฌํด์ฃผ๊ณ , ์ฃผ๋ฌธ(๋ช ๋ น)์ ๋ฐ์ผ๋ฉด ์๋ฆฌ์ฌ(์์ฉํ๋ก๊ทธ๋จ)์ ์ํธ์์ฉํ์ฌ ์์ฒญ๋ ๋ฉ๋ด(๋ช ๋ น์ ๋ํ ๊ฐ)์ ์ ๋ฌํ๋ค๋ ๊ฒ์ด๋ค.

์ฝ๊ฒ ๋งํด, API๋ ํ๋ก๊ทธ๋จ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ ๊ฒ์ ๋์์ฃผ๋ ์ค๊ฐ ๋งค๊ฐ์ฒด๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ฆ, ์ธ๊ฐ์ด ์๋ ์ฝ๋๋ค๋ผ๋ฆฌ ์ํตํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ด๋ค.
API๋ ์๋ฒ์์ ๋ง๋ค๋ฉฐ, ์์ฉํ๋ก๊ทธ๋จ์์ ์ด๋ค ๋ฉ๋ด๋ฅผ ์์ฒญํ๋ฉด ์ด๋ค ๊ธฐ๋ฅ์ ์ํํ ์ง๋ฅผ ์ ํ๋ ๊ฒ์ด๋ผ ๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ฒ ๋จ์์ API์ API ๋ช ์ธ์๋ฅผ ์์ฑํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ ๋จ์์ ๊ทธ API๋ฅผ ํ์ฉํ์ฌ ํด๋ผ์ด์ธํธ ํ๋ฉด์ ๊ตฌ์ฑํ๊ณ ๊ฐ๋ฐํ ์ ์๊ฒ ๋๋ค.
API์ ์ญํ
- ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ถ์ ๊ตฌ(์ ๊ทผ ๊ถํ ๋ถ์ฌ) ์ญํ ์ ํ๋ค. (ํ์ฉ๋ ์ฌ๋์๊ฒ๋ง ์ ๊ทผ์ฑ ๋ถ์ฌ)
- ์์ฉํ๋ก๊ทธ๋จ๊ณผ ๊ธฐ๊ธฐ๊ฐ ์ํํ ํต์ ํ ์ ์๋๋ก ํ๋ค.
- ๋ชจ๋ ์ ์์ ํ์คํํ๋ค. (๊ธฐ๊ณ, ์ด์์ฒด์ ๋ฑ๊ณผ ์๊ด ์์ด ๋๊ตฌ๋ ๋์ผํ ์ก์ธ์ค๋ฅผ ์ป์ ์ ์๋ค.)
REST API๋?
REpresentational State Transfer API, ์์์ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ
REST API์์๋ JSON¹์ด๋ XML² ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฉฐ, URI³๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ HTTP ํ๋กํ ์ฝโด์์ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ํด๋น ์์์ ๋ํ CRUDโต๋ฅผ ๋์ํ๊ฒ ํ๋ API์ด๋ค.
โผ ์์ ๋ฌธ์ฅ์ ์ดํดํ๊ธฐ ์ํ ์ฉ์ด ์ ๋ฆฌ ๐
JSON
JavaSript Object Notation
JavaScript์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ํํ์์ ์๋ฏธํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ ์กํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒฝ๋์ DATA ๊ตํ ํ์์ด๋ค.
- JSON ํํ์์ ์ฌ๋๊ณผ ๊ธฐ๊ณ ๋ชจ๋ ์ดํดํ๊ธฐ ์ฝ๋ค.
- ์ฉ๋์ด ์์ ์ต๊ทผ์๋ XML์ ๋์ฒดํ์ฌ ๋ฐ์ดํฐ ์ ์ก์ ๋ง์ด ์ฌ์ฉํ๋ค.
- JSON = ๋ฐ์ดํฐ ํฌ๋งท์ผ ๋ฟ - ์ด๋ ํ ํต์ ๋ฐฉ๋ฒ๋, ํ๋ก๊ทธ๋๋ฐ ๋ฌธ๋ฒ๋ ์๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ํํ๋ฐฉ๋ฒ์ด๋ค.
- ํํ ๋ฐฉ๋ฒ : ํ๊ทธ(Tag)๋ก ํํํ์ง ์๊ณ , ์ค๊ดํธ({}) ํ์๊ณผ ํจ๊ป ๊ฐ์ ,๋ก ๋์ดํ์ฌ ํํ์ด ๊ฐ๋จํ๋ค.
{
"employees": [
{
"name": "Surim",
"lastName": "Son"
},
{
"name": "Someone",
"lastName": "Huh"
},
{
"name": "Someone else",
"lastName": "Kim"
}
]
}
XML
eXtensible Markup Language, ํ์ฅ ๊ฐ๋ฅํ ๋งํฌ์ ์ธ์ด
HTML๊ณผ ๋งค์ฐ ๋น์ทํ ๋ฌธ์ ๊ธฐ๋ฐ์ ๋งํฌ์ ์ธ์ด(test-based markup language)์ด๋ค. ๊ทธ๋ฌ๋ XML์ HTML์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ๋ชฉ์ ์ด ์๋๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ ๋ฌํ ๋ชฉ์ ์ผ๋ก๋ง ๋ง๋ค์ด์ก๋ค. ๋ํ, XML ํ๊ทธ๋ HTML ํ๊ทธ์ฒ๋ผ ๋ฏธ๋ฆฌ ์ ์๋์ด ์์ง ์๊ณ , ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์ ์๋ค.
XML์ ํน์ง
- Extensible(=ํ์ฅ ๊ฐ๋ฅํ) : ๋ฐ์ดํฐ๋ฅผ ์ค๋ช ํ๋ ํ๊ทธ(Tag)๋ฅผ ์ฌ์ฉ์ ๋ง์๋๋ก ์ ์ํ ์ ์์ด ํ์ฅ์ฑ์ด ์๋ค.
- HTML๊ณผ ๋ฌ๋ฆฌ Tag๊ฐ ๋ฏธ๋ฆฌ ์ ์๋์ด ์์ง ์๋ค.
- JSON ์ญ์ ๋ฐ์ดํฐ ํฌ๋งท์ผ ๋ฟ - ์ด๋ ํ ํต์ ๋ฐฉ๋ฒ๋, ํ๋ก๊ทธ๋๋ฐ ๋ฌธ๋ฒ๋ ์๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ํํ๋ฐฉ๋ฒ์ด๋ค.
- ํํ๋ฐฉ๋ฒ : ๋ฐ์ดํฐ๊ฐ ์์ชฝ์ผ๋ก Tag๊ฐ ์๋ค. (HTML์ ๊ทผ๋ณธ์ผ๋ก ํ๊ธฐ ๋๋ฌธ!)
<?xml version="1.0" encoding="euc-kr" ?>
<๋ถ์ฐ๊ณ ๋ฑํ๊ต์ ์๋ชฉ๋ก>
<์ ์๋ช
๋จ>
<์ด๋ฆ>์ฑ์น์</์ด๋ฆ>
<ํ๋
>3</ํ๋
>
<๋ฑ๋ฒํธ>4</๋ฑ๋ฒํธ>
<ํฌ์ง์
>C</ํฌ์ง์
>
<ํค>197</ํค>
<์ฒด์ค>93</์ฒด์ค>
</์ ์๋ช
๋จ>
<์ ์๋ช
๋จ>
<์ด๋ฆ>๊ถ์คํธ</์ด๋ฆ>
<ํ๋
>3</ํ๋
>
<๋ฑ๋ฒํธ>5</๋ฑ๋ฒํธ>
<ํฌ์ง์
>F</ํฌ์ง์
>
<ํค>178</ํค>
<์ฒด์ค>62</์ฒด์ค>
</์ ์๋ช
๋จ>
<์ ์๋ช
๋จ>
<์ด๋ฆ>์ ๋๋ง</์ด๋ฆ>
<ํ๋
>3</ํ๋
>
<๋ฑ๋ฒํธ>14</๋ฑ๋ฒํธ>
<ํฌ์ง์
>SG</ํฌ์ง์
>
<ํค>184</ํค>
<์ฒด์ค>70</์ฒด์ค>
</์ ์๋ช
๋จ>
<์ ์๋ช
๋จ>
<์ด๋ฆ>์กํ์ญ</์ด๋ฆ>
<ํ๋
>2</ํ๋
>
<๋ฑ๋ฒํธ>7</๋ฑ๋ฒํธ>
<ํฌ์ง์
>PG</ํฌ์ง์
>
<ํค>168</ํค>
<์ฒด์ค>59</์ฒด์ค>
</์ ์๋ช
๋จ>
<์ ์๋ช
๋จ>
<์ด๋ฆ>๊ฐ๋ฐฑํธ</์ด๋ฆ>
<ํ๋
>1</ํ๋
>
<๋ฑ๋ฒํธ>10</๋ฑ๋ฒํธ>
<ํฌ์ง์
>PF</ํฌ์ง์
>
<ํค>189.2</ํค>
<์ฒด์ค>83</์ฒด์ค>
</์ ์๋ช
๋จ>
<์ ์๋ช
๋จ>
<์ด๋ฆ>์ํ์
</์ด๋ฆ>
<ํ๋
>1</ํ๋
>
<๋ฑ๋ฒํธ>11</๋ฑ๋ฒํธ>
<ํฌ์ง์
>SF</ํฌ์ง์
>
<ํค>187</ํค>
<์ฒด์ค>75</์ฒด์ค>
</์ ์๋ช
๋จ>
</๋ถ์ฐ๊ณ ๋ฑํ๊ต์ ์๋ชฉ๋ก>
AJAX
Asynchronous JavaScript and XML
JavaScript๋ฅผ ํตํด ๋น๋๊ธฐ์์ผ๋ก XML์ ์ด์ฉํ์ฌ ์๋ฒ์ ํต์ ํ๋ ๋ฐฉ์์ผ๋ก, ๋น ๋ฅด๊ฒ ๋์ํ๋ ๋์ ์ธ ์นํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ฐ๋ฐ ๊ธฐ๋ฒ์ ํ๋์ด๋ค.
Ajax๋ ์นํ์ด์ง ์ ์ฒด๋ฅผ ๋ค์ ๋ก๋ฉํ์ง ์๊ณ ๋, ์น ํ์ด์ง์ ์ผ๋ถ๋ถ๋ง์ ๊ฐฑ์ ํ ์ ์๊ฒ ํด์ค๋ค. ์ฆ, Ajax๋ฅผ ์ด์ฉํ๋ฉด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ญ์์ ์๋ฒ์ ํต์ ํ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์นํ์ด์ง์ ์ผ๋ถ๋ถ์๋ง ํ์ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ ์๋ฒ์๋ JSON, XML, HTML, ํ ์คํธ ํ์ผ๊ณผ ๊ฐ์ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.
AJAX์ ๋์ ๋ฐฉ์
- Request (์์ฒญ) : JavaScript๊ฐ (XMLHttpRequest ๊ฐ์ฒด๋ฅผ ํตํด) ์๋ฒ์ ์ ๋ณด๋ฅผ ์์ฒญํ๋ค. → ์๋ฒ๋ ์๋ต์ผ๋ก ๋ฐ์ดํฐ(XML, JSON)๋ฅผ XMLHttpRequest๊ฐ์ฒด์ ์ ์กํ๋ค.
- Response (์๋ต) : JavaScript๋ ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ์ฌ ํ์ด์ง์ ์ถ๊ฐํ๋ค.
URI
Uniform Resource Identifier, ํตํฉ ์์ ์๋ณ์
์ธํฐ๋ท์ ์๋ ์์์ ๋ํ๋ด๋ ์ฃผ์์ด๋ค. ๋ฐ๋ผ์ URI๋ผ๋ ๊ฐ๋ ์ ์ด๋ค ํ์์ด ์๋ค๊ธฐ ๋ณด๋ค๋ ํน์ ์์์ ์๋ณํ๋ ๋ฌธ์์ด์ ์๋ฏธํ๋ค.
URL๊ณผ URN์ ์์ ๊ฐ๋ ์ผ๋ก, ์์์ ์์น๋ก ์๋ณํ๋ฉด URL, ๊ณ ์ ํ ์ด๋ฆ์ผ๋ก ์๋ณํ๋ฉด URN์ด๋ค.

URI ์ค๊ณ ์์น
1. /(์ฌ๋์)๋ ๊ณ์ธต ๊ด๊ณ(is a)๋ฅผ ๋ํ๋ผ ๋ ์ฌ์ฉํ๋ค. (animal ์์ human์ด ํฌํจ๋ผ์๋ค. human is animal.)
https://www.ojjambbong.com/animal/human
2. ?(์ฟผ๋ฆฌ ์คํธ๋ง)์ ์์ฑ(has a)๋ฅผ ๋ํ๋ผ ๋ ์ฌ์ฉํ๋ค. (human์ gender๋ผ๋ ์์ฑ์ ๊ฐ๊ณ ์๋ค. human has a gender type.)
https://www.ojjambbong.com/animal/human?gender=female
3. URI์ ๋ง์ง๋ง์๋ /(์ฌ๋์)๋ฅผ ๋ถ์ด์ง ์๋๋ค.
https://www.ojjambbong.com/animal/human/ (x)
https://www.ojjambbong.com/animal/human (o)
4. URI์ ๊ฐ๋ ์ฑ์ ์ํด _(์ธ๋๋ฐ)๋ ์ฌ์ฉํ์ง ์๊ณ -(ํ์ดํ)์ ์ฌ์ฉํ๋ค.
https://www.ojjambbong.com/animal/human?gender_type=female (x)
https://www.ojjambbong.com/animal/human?gender-type=female (o)
5. ์๋ฌธ์ ์ฌ์ฉ์ด ๊ถ์ฅ๋๊ณ ํ์ผ ํ์ฅ์๋ฅผ ํฌํจํ์ง ์๋๋ค.
https://www.ojjambbong.com/animal/HUMAN?gender_type=female (x)
https://www.ojjambbong.com/animal/human?image.jpeg (x)
URL
Uniform Resource Locator, ํตํฉ ์์ ์ง์์
URL์ URI์ ๊ฐ์ฅ ํํ ํํ์ด๋ฉฐ, ํน์ ์๋ฒ์ ํ ๋ฆฌ์์ค์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์์น๋ฅผ ์์ ํ๋ค.
URL์ ๋ฆฌ์์ค๊ฐ ์ ํํ ์ด๋์ ์์ผ๋ฉฐ, ์ด๋ป๊ฒ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ๋ถ๋ช ํ ์๋ ค์ค๋ค.
- http://naver.com - ๋ค์ด๋ฒ ์ฌ์ดํธ์ URL
- http://img.naver.net/static/www/dl_qr_naver.png- ๋ค์ด๋ฒ ์ฑ QR ์ฝ๋์ ์ด๋ฏธ์ง์ ๋ํ URL
- http://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=104 - ๋ค์ด๋ฒ ๋ด์ค์์ ๋ถ๋ฅ ์ค "์ธ๊ณ" ์ฃผ์ ์ ๊ธฐ์ฌ์ ๋ํ URL
URN
Uniform Resource Name, ํตํฉ ์์ ์ด๋ฆ
URL์ URI์ ๋ ๋ค๋ฅธ ํํ์ด๋ฉฐ, ์ฝํ ์ธ ๋ฅผ ์ด๋ฃจ๋ ํ ๋ฆฌ์์ค์ ๋ํด ๊ทธ ๋ฆฌ์์ค์ ์์น์ ์ํฅ๋ฐ์ง ์๋ ์ ์ผ๋ฌด์ดํ ์ด๋ฆ ์ญํ ์ ํ๋ค. ๋ฐ๋ผ์ ์ด ์์น ๋ ๋ฆฝ์ ์ธ URN์ ๋ฆฌ์์ค๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ๋ก ์ฎ๊ธฐ๋๋ผ๋ ๋ฌธ์ ์์ด ์๋ํ๋ค.
์๋ฅผ ๋ค์ด, ๋ค์์ URN์ ์ธํฐ๋ท ํ์ค ๋ฌธ์ 'RFC 2141'์ด ์ด๋์ ์๋ ์๊ด ์์ด ์ด ๋ฆฌ์์ค๋ฅผ ์ง์นญํ๊ธฐ ์ํ์ฌ ์ฌ์ฉ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค.
- urn:ietf:rfc:2141 - 'RFC 2141' ๋ฌธ์
๋จ, URN์ ์์ง ์คํ ์ค์ธ ์ํ๋ก ๋๋ฆฌ ์ฑํ๋์ง ์์ ์ ํ๊ธฐ ์ฝ์ง ์๋ค.
CRUD
Create, Read, Update, Delete
CRUD๋ ๋๋ถ๋ถ์ ์ปดํจํฐ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ธ Create(์์ฑ), Read(์ฝ๊ธฐ), Update(๊ฐฑ์ ), Delete(์ญ์ )๋ฅผ ๋ฌถ์ด์ ์ผ์ปซ๋ ๋ง์ด๋ค.
API์์ CRUD๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ๋ณด๋ด๋ ์์ฒญ๋ค์ ํฌ๊ฒ 4๊ฐ์ง ์ฑ๊ฒฉ์ผ๋ก ๋ถ๋ฅํ ์์ฒญ๋ค์ด๋ค.
Create = POST
์๋ฒ์ ์ ๋ณด๋ฅผ ์ฌ๋ ค๋ฌ๋ผ๋ Create๋ POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญํ๋ค. POST๋ฅผ ํตํด ํด๋น URI๋ฅผ ์์ฒญํ๋ฉด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ค.
Read = GET
์๋ฒ์์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๋ Read๋ GET ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญํ๋ค. GET์ ํตํด ํด๋น ๋ฆฌ์์ค๋ฅผ ์กฐํํ๊ณ , ํด๋น ๋ํ๋จผํธ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
Update = PUT, PATCH
์ ๋ณด๋ฅผ ๋ฐ๊พธ๋ Update๋ PUT ๋๋ PATCH ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญํ๋ค. PUT์ ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ ๋, PATCH๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ง ์์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
Delete = DELETE
์ ๋ณด๋ฅผ ์ง์ฐ๋ Delete๋ DELETE ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญํ๋ค. DELETE๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ ์ ์๋ค.
HTTP
HyperText Transfer Protocol
์น ํ๊ฒฝ์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ๋กํ ์ฝ(ํต์ ๊ท์ฝ, ์ฝ์)์ด๋ค.
TCP/IP๋ ํด๋ผ์ด์ธํธ/์๋ฒ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ด๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๊ตฌ์ ๋์ํ์ฌ ์๋ฒ๊ฐ ํ์ด์ง ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค. HTTP๋ ์ด๋ฌํ TCP/IP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํ๋กํ ์ฝ๋ก, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ HTTP ์์ฒญ๊ณผ HTTP ์๋ต์ ํ ์ ์๋ค.
HTTP๋ ์ด์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋ ํน์ฑ์ ์ง๋๋๋ฐ, ๊ฐ๊ฐ์ ์์ฒญ/์๋ต์ ๋ ๋ฆฝ์ ์ธ ๊ฒ์ผ๋ก ์ ์ ๋ณด๋ธ ์์ฒญ ๋ฐ ์๋ต์ ์์ง ๋ชปํ๋ค๋ ์๋ฏธ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์งํ ๊ณผ์ ์ด๋ ๊ทธ์ ๋ํ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋์๋ ์ฟ ํค๋ ์ธ์ ์ ํ์ฉํ๋ค.
HTTP์ ๊ตฌ์กฐ
HTTP ์์ฒญ(Request)๊ณผ ์๋ต(Response)์ ๋ชจ๋ headers๊ณผ body๋ผ๋ ๊ณตํต๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด์ ๋ํด ๊ฐ๊ฐ Request๋ start line, Response๋ status line์ด๋ผ๋ ๊ตฌ์กฐ๊ฐ ์๋ค.
HTTP ์ํ์ฝ๋
ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ๋ณด๋ด๋ HTTP์ ์ํ์ฝ๋๋ฅผ ํ์ธํ์ฌ ์์ฒญ์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
์ํ ์ฝ๋๋ 3์๋ฆฌ ์ซ์๋ก ๋ง๋ค์ด์ ธ ์์ผ๋ฉฐ, ์ฒซ๋ฒ์งธ ์๋ฆฌ๋ 1์์ 5๊น์ง ์ ๊ณต๋๋ค. (์ฒซ๋ฒ์งธ ์๋ฆฌ๊ฐ 4์ 5์ธ ๊ฒฝ์ฐ๋ ์ ์์ ์ธ ์ํฉ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฌ์ดํธ ๊ด๋ฆฌ์๊ฐ ์ฆ์ ์์์ผ ํ๋ ์ ๋ณด์ด๋ค.)
- 1xx(์ ๋ณด) : ์์ฒญ์ ๋ฐ์์ผ๋ฉฐ ํ๋ก์ธ์ค๋ฅผ ๊ณ์ ์งํํฉ๋๋ค.
- 2xx(์ฑ๊ณต) : ์์ฒญ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์์ผ๋ฉฐ ์ธ์ํ๊ณ ์์ฉํ์์ต๋๋ค.
- 3xx(๋ฆฌ๋ค์ด๋ ์ ) : ์์ฒญ ์๋ฃ๋ฅผ ์ํด ์ถ๊ฐ ์์ ์กฐ์น๊ฐ ํ์ํฉ๋๋ค.
- 4xx(ํด๋ผ์ด์ธํธ ์ค๋ฅ) : ์์ฒญ์ ๋ฌธ๋ฒ์ด ์๋ชป๋์๊ฑฐ๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- 5xx(์๋ฒ ์ค๋ฅ) : ์๋ฒ๊ฐ ๋ช ๋ฐฑํ ์ ํจํ ์์ฒญ์ ๋ํ ์ถฉ์กฑ์ ์คํจํ์ต๋๋ค.
์ด๋ฌํ ๊ฐ๋จํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก, API ๋ช ์ธ๋ฅผ ์์ฑํด๋ณด๋ ๋ด์ฉ์ ๋ค์ ํฌ์คํ ์์ ๋ง์ ์์๋ณด๋๋ก ํ๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
- wishket ๋ธ๋ก๊ทธ (https://blog.wishket.com/api%EB%9E%80-%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85-%EA%B7%B8%EB%A6%B0%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8/)
- keepcalm๋ ๋ธ๋ก๊ทธ (https://velog.io/@keepcalm/API-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%8C%A8%ED%82%B7-%ED%97%A4%EB%8D%94-%EB%B0%94%EB%94%94-CRUD-URI-path-variable-%EB%AA%85%EC%84%B8%EC%84%9C)
- TCP School (www.tcpschool.com)
- ์ฌ์ฐ๋ ๋ธ๋ก๊ทธ (https://m.blog.naver.com/PostView.naverisHttpsRedirect=true&blogId=chaeng1010&logNo=30041799169)
- ๋ง์ด๊ตฌ๋ฏธ์ HelloWorld:ํฐ์คํ ๋ฆฌ (https://mygumi.tistory.com/139)
- pock11๋์ ๋ธ๋ก๊ทธ (https://velog.io/@pock11/REST-API-CRUD)
- jaeseongdev๋์ ๋ธ๋ก๊ทธ (https://jaeseongdev.github.io/development/2021/04/22/REST_API%EC%97%90%EC%84%9C%EC%9D%98_HTTP_%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C_%EC%83%81%ED%83%9C%EB%A9%94%EC%8B%9C%EC%A7%80.md/)
- https://www.whatap.io/ko/blog/40/
'Projects > Web Projects' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก์ ํธ] ๋ฐฑ์๋ ๊ฐ๋ฐ์ - ๊ธฐ๋ฅ ๊ฐ๋ฐ ํ๋ก์ธ์ค (0) | 2022.07.30 |
---|---|
[ํ๋ก์ ํธ] ํฌ์คํธ๋งจ(Postman)์ผ๋ก REST API ์ค๊ณํ๊ธฐ (0) | 2022.07.16 |
[ํ๋ก์ ํธ] ์ผ์ ๊ด๋ฆฌ ์น์ฌ์ดํธ ๊ฐ์ (0) | 2022.05.31 |
[ํ ์ดํ๋ก์ ํธ] Onnuri ๊ฐ์ (0) | 2022.04.27 |
[ํ ์ดํ๋ก์ ํธ] DB ์ค๊ณํ๊ธฐ -1 (0) | 2022.04.26 |