๋ชฉ์ฐจ
์ฌ์ฉ์๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ DB์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ ์
RESTful API ์ ๋ํ ๊ฐ๋ ์ ์์๋ณด์!
1. ์๋ฒ๋ก์ ์์ฒญ
์๋ฒ๋ '์์ฒญ'์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ํ ์ค ์์ฝํ ์ ์๋ค.
์ด๋ ์์ฒญ์ ์๋ฌด๋ฐ ๋ฐฉ์์ผ๋ก ํ๋ ๊ฒ์ด ์๋ ์ ํด์ง ํ์์ ๋ฐ๋ผ์ผ ํ๋ค.
๋ง์ฝ ์ ์ ๊ฐ ์๋ฒ์ ์์ฒญ์ ํ ๋์๋
method ์ url ์ ์ ํํ๊ฒ ๋ช ์ํด์ผํ๋ค.
1) method์ ์ข ๋ฅ
GET : ๋ฐ์ดํฐ ๋ฐ๊ธฐ ์์ฒญ
POST : ๋ฐ์ดํฐ ๋ณด๋ด๊ธฐ ์์ฒญ
UPDATE, PUT : ๋ฐ์ดํฐ ์์ ์์ฒญ
DELETE : ๋ฐ์ดํฐ ์ญ์ ์์ฒญ
...
์ฃผ๋ก ์ฌ์ฉํ๋ method์ ์ข ๋ฅ๋ ์์ ๊ฐ๋ค.
2) URL
/path๋ช ๊ณผ ๊ฐ์ ์๋ฒ์ ๋ฑ๋ก๋์ด์๋ url์ ์์ฒญํด์ผํ๋ค.
url์ endpoint ๋ผ๊ณ ํํํ๊ธฐ๋ ํ๋ค.
3) API == method ์ URL ์กฐํฉ
method์ URL์ ์์๋ก ์กฐํฉํ๋ ๊ฒ์ด ์๋๋ผ
์๋ฒ์ ๋ฑ๋ก๋์ด์๋ ์กฐํฉ์ ์์ฒญํด์ผํ๋ค.
์ด๋ mothod์ URL์ ์กฐํฉ์ด API์ด๋ค.
app.get(...)
app.post(...)
app.update(...)
app.delete(...)
์๋ฒํ์ผ์ ์ด๋ฌํ ํ์์ผ๋ก ์์ฑํ๋ ๊ฒ์ด ๋ฐ๋ก API๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์ด๋ค.
์ฆ, ์๋ฒ์ ๊ธฐ๋ฅ์ ๋ง๋๋ ๊ฒ์ด๋ค!
์์
app.get('/', (request, response) => {
response.sendFile(__dirname + '/index.html');
})
server.js(์๋ฒํ์ผ)์ ์ด๋ฌํ ์ฝ๋๋ฅผ ๋ฃ์์๋
root ํ์ด์ง( / )๋ก GET ์์ฒญ์ ํ๋ค๋ฉด index.html์ ๋ณด๋ด๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก API๋ฅผ ๋ฑ๋กํด๋์ผ๋ฉด
์ ์ ๋ url์ ์ ์ํ์ฌ GET ์์ฒญ์ ํ๊ฑฐ๋ <form>ํ๊ทธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ํ POST ์์ฒญ์ ํ๋ ๋ฑ
์ํธ์์ฉ์ ํ ์ ์๋ค.
2. REST API๋? (๊ฐ๋จ ๋ฒ์ )
REST API(Representational State Transfer API)๋
๋ฏธ๊ตญ์ ๊ฐ๋ฐ์ ๋ก์ด ํ๋ฉ(Roy Fielding)์ด ์ฐฝ์ํ REST ๋ผ๋ ๊ฐ๋ ์ ๋ฐ๋ฅธ API๋ฅผ ๋งํ๋ค.
๋ ์์ธํ ๋ด์ฉ์ ์ถํ์ ๋ค๋ฃฐ ์์ ์ด๋ค!
1) REST
REST(Representational State Transfer)๋ ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ๋งํ๋ค.
1. HTTP URI(์ด๋ฆ)๋ฅผ ํตํด ์์(Resource)์ ๋ช ์ํ๊ณ ,
2. HTTP Method(GET, POST, UPDATE, PUT, DELETE ๋ฑ)๋ฅผ ํตํด
3. ํด๋น ์์(URI)์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ!
2) REST API
์์์ ์ค๋ช ํ REST ๊ฐ๋ ์ ๋ฐ๋ฅธ API ์ฆ, ์ข์ API์ ๋ํด ์ ์ํ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด์๋ ๋ช๊ฐ์ง ๋ฐ๋ผ์ผํ ๊ท์น์ด ์๋ค.
[REST API ๊ท์น]
1. Unifrom Interface
2. Client - Server ์ญํ ๊ตฌ๋ถ
3. Stateless
4. Cacheable
5. Layered System
6. Code on demand
(1) Unifrom Interface
- URL์ ์ผ๊ด์ฑ ์๊ฒ
e.g. ํฌ์คํธ์ URL์ด /post ๋ผ๋ฉด, /post/12312, /post/32123 ๋ฑ์ผ๋ก ์ผ๊ด์ฑ ์๊ฒ ์ค๊ณํ์!
- ํ๋์ URL+method์์๋ ํ ์ข
๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์ค๊ณ
- ๊ฒฐ๊ณผ ์์ธก์ด ๊ฐ๋ฅํ๋๋ก!
(2) Client - Server ์ญํ ๊ตฌ๋ถ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ญํ ์ ๋ช ํํ ๊ตฌ๋ถ
(์ ์ ๊ฐ ์๋ฒ์ญํ ์ ํ๋ค๊ฑฐ๋ DB์ ์ง์ ์ ์ถ๋ ฅํ์ง ์๋๋ก)
(3) Stateless
- ์์ฒญ๋ผ๋ฆฌ ์๋ก ์์กด์ฑ์ด ์์ง ์๋๋ก
(4) Cacheable
- ์์ฒญ์ ์บ์ฑ์ด ๊ฐ๋ฅํ๊ฒ (์์ฃผ ์์ ๋๋ ์๋ฃ๋ฉด ์์ฒญ์ด ์๋๋ผ ๋ก์ปฌ์ ์ฅ)
(5) Layered System
- ์์ฒญํ๋๋ ์ต์ข ์๋ต ์ ์ฌ๋ฌ๋จ๊ณ ๊ฑฐ์ณ๊ธฐ ๊ฐ๋ฅ
(6) Code on demand
- ์๋ฒ๋ ์ ์ ์๊ฒ ์คํ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ณด๋ผ ์ ์์
์ด๋ฌํ ์์น๋ค์ ์งํจ๋ค๋ฉด RESTful API ๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
(์์ฆ์ method, URL๋ง ์ ๊ธฐ์ ํ๋ฉด REST๋ผ๊ณ ํ๋ค๊ณ ํจ!)
3) ์ข์ URL ์๋ช ๋ฒ
- ๋จ์ด๋ณด๋ค ๋ช ์ฌ๋ก!
- ๋์ด์ฐ๊ธฐ๋ ์ธ๋๋ฐ(_) ๋์ ๋์(-)๋ก
- ํ์ผ ํ์ฅ์๋ฅผ ๊ทธ๋๋กX
- ํ์ ๋ฌธ์์ผ๋๋ ํธ๋ฆฌํ์์ผ๋ก / ์ฌ์ฉ (/~)
'๐ | WEB DEV > NodeJS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NodeJS+Express] 11. URLํ๋ผ๋ฏธํฐ (์์ธํ์ด์ง ๋ง๋ค๊ธฐ) (0) | 2023.10.15 |
---|---|
[NodeJS+Express] 10. ๊ธ ์์ฑ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (MongoDB ๋ฐ์ดํฐ ์ฝ์ ) (1) | 2023.10.14 |
[NodeJS+Express] 8. EJS ๋ฌธ๋ฒ ์ ๋ฆฌ (0) | 2023.10.09 |
[NodeJS+Express] 7. EJS ํ์ผ ๋ด JS๋ฌธ๋ฒ ์ฌ์ฉ & ํ์ผ ๋ด .ejsํ์ผ ์ฝ์ (0) | 2023.10.09 |
[NodeJS+Express] 6. EJS๋ก MongoDB ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉํ๊ธฐ (0) | 2023.10.08 |
๋๊ธ