[Node.js] 기본 사용법 (feat. API 만들기)

손은실·2024년 4월 14일
0

Web

목록 보기
3/8
post-thumbnail
post-custom-banner

Node.js란?

  • 크롬의 V8 엔진을 이용해 브라우저 외부에서도 Javascript를 실행시킬 수 있는 환경
  • 싱글 스레드
    - 하나의 heap 영역과 하나의 call stack을 가짐
  • 이벤트 루프 기반
    - 콜백 함수의 호출 순서를 판단해 이벤트 종료까지 작업을 반복
  • Non-Blocking I/O
    - 어떠한 작업이 끝날때 까지 기다리지 않고 다른 작업을 동시에 진행
    - 함수 호출 발생 시 요청을 쌓아두고 동시에 처리하며 요청이 완료된 순서대로 처리

I/O 요청이 많은 서버(채팅)에 효율적이다. 싱글 스레드를 사용해 CPU 연산이 많은 프로그램에는 적합하지 않다.


Node.js VS Javascript

JavaScript : 브라우저에서만 동작하며 client에 대한 개발
Nodejs : 브라우저 밖에서 동작하는 Javascript 런타임으로, server에 대해 Javascript로 웹 서버 구축


npm

  • Node.js의 패키지를 관리할 수 있는 도구

express 설치

npm install express

const express = require('express')
const app = express()
  • require() 외부 모듈을 가져오는 메서드

서버 띄우기

const port = 3000

app.listen(port, ()=>{
    console.log(`App listen on port ${port}`)
})

API 만들기

app.get('/', ()=>{})
  • get HTTP 메서드
  • / 라우팅
  • ()=>{} 콜백 함수

예제

app.get('/cat', (req, res)=>{
    res.send('고양이')
})

app.get('/dog', (req, res)=>{
    res.json({'sound':'멍멍'})
})
  • res.send('value') response 보내는 역할
  • res.json({'key':'value'}) send 대신 json 을 이용해 직관적으로 사용 가능

response 전달하는 방법

GET

  1. param

    app.get('/user/:id', (req, res)=>{
        const p = req.params
        console.log(p)
    })

    주소 창의 : 뒤의 데이터를 이용할 수 있다

param-url

param-console

  1. query

    app.get('/user/:id', (req, res)=>{
        const q = req.query
        console.log(q)
    })

    주소 창의 ? 뒤로 key-value 형태로 전달

query-url

query-console


POST

  1. param
    Get의 param 방식과 동일

  2. body

    app.post('/user/:id', (req, res)=>{
        const b = req.body
        console.log(b)
    })

    body에 값을 담아 전달


API 서버 만들기

app.get('/sound/:name', (req, res)=>{
    const { name } = req.params
    console.log(name)

    res.json({'sound':'야옹'})
})

변수 명 대신 중괄호 안에 json의 key 값을 넣어 사용하면 편하다.


동물 소리 API

app.get('/sound/:name', (req, res)=>{
    const { name } = req.params

    if (name == "dog") {
        res.json({'sound':'멍멍'})
    } else if (name == "cat") {
        res.json({'sound':'야옹'})
    } else if (name == "pig") {
        res.json({'sound':'꿀꿀'})
    } else {
        res.json({'sound':'알 수 없음'})
    } 
})

Cors Policy 이슈 처리

  1. cors 설치 + 모듈 추가

    npm install cors
    const cors = require("cors")
  2. 모든 요청에 응답

    app.use(cors())

마무리

궁금해서 아주 간단하게만 사용해봤는데 JS 실행을 위한 것이라서 그런지 JS와 매우 유사했고 서버 부분도 JS로 할 수 있다는 점이 좋은 것 같다. 백엔드 프레임워크의 전체적인 흐름은 비슷하구나 싶었다.

post-custom-banner

0개의 댓글