๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/NodeJS

[NodeJS+Express] 9. RESTful API๋ž€?

by KASSID 2023. 10. 11.

๋ชฉ์ฐจ

    728x90

    ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 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

    - ํ•˜์œ„ ๋ฌธ์„œ์ผ๋•Œ๋Š” ํŠธ๋ฆฌํ˜•์‹์œผ๋กœ / ์‚ฌ์šฉ (/~)

     

    ๋Œ“๊ธ€