본문 바로가기

기록/TIL

2022/03/14 TIL

💡wecode Foundation 3주차 과정을 참고/인용하여 작성하였습니다. 

📝 Node.js

 

 

 

1. UI 란? 

=> User Interface란 유저가 소프트웨어랑 만나는 경계면을 말한다. 즉, 유저가 소프트웨어에 접근하고 명령을 내릴수 있는 부분이다. 

쉽게 설명하자면 스크린화면, 키보드, 마우스나 브라우저 등이 UI 에 해당한다. 

 

 

 

 

 

2. API 란?

=> Appication Programming Interface는 어플리케이션과 어플리케이션이 의사소통하고 데이터를 교환할 수 있도록 매개체가 되어 주는 대상을 말한다. 

인스타 DM을 보내거나, 스마트폰에서 날씨를 확인하는 것과 같은 동작들을 할 때 API가 필요하다. 

스마트폰에서 날씨를 확인하는 것으로 예를 들어보자면, 

날씨어플은 인터넷을 연결하고, 서버로 데이터를 전달한다. 서버는 전달받은 데이터를 해석하고 그에 맞는 기능을 수행한 뒤 다시 스마트폰으로 정보를 전송한다. 날씨어플은 이렇게 전달받은 데이터를 다시 해석하여 우리가 읽을 수 있는 방법으로 나타난다. 

바로 이러한 과정이 API를 통해서 일어나게 된다. 

 

 

 

 

 

 

 

 

3. http 로 server를 생성하는 것과 express로 server를 생성하는 것의 차이점

 

 

 

 

  1. http 모듈의 server 객체

const http = require('http')
const { sendProducts } = require('./sendProducts')

const server = http.createServer((req, res) => {
  const { url, method } = req
  res.setHeader('Content-Type', 'application/json')

  if (url === '/ping') {
    return res.end(JSON.stringify({ message: '/ pong' }))
  }
  if (url === '/signup' && method === 'POST')
  return res.end(JSON.stringify({ message: '회원가입 완료!' }))
  
  if (url === '/login' && method === 'POST') 
  return res.end(JSON.stringify({ message: '로그인 완료!' }))
  
  if (url === '/products' && method === 'GET') 
  return sendProducts(res)

  res.send(JSON.stringify({ message: 'this response answers to every request' }))
})

server.listen(8080, () => { console.log('server is listening on PORT 8000')})

예시코드를 보면 http모듈의 server는 라우팅을 직접 request 객체에서 url과 methode에 따라 조건문을 분기한다. 

이렇게 분기한 조건문으로 다른 로직을 처리해야 하는 번거로움이 있다. 

예시코드와 같이 간단한 로직에는 문제가 없겠지만, 앱의 규모가 크다면 로직을 모듈화 하는 것에 있어서 어려움이 있게 된다. 

 

 

 

 

2.express 에서의 server 

const http = require('http')
const express = require('express')
const { sendProducts } = require('./sendProducts2')

const app = express()
app.use(express.json())

app.get('/', (req, res) => {
  res.json({ message: '/ endpoint' })
})

app.post('/signup', (req, res) => {res.json('signup success')})
// 첫번째 인자에는 endpoint url 을 기입하고,

app.post('/login', (req, res) => {res.json('login success')}) 
// 각각의 요청에 대해 핸들링 하는 함수를 두번째 인자로 넣습니다.

app.get('/products', sendProducts)

const server = http.createServer(app)

server.listen(8000, () => {
  console.log('server is listening on PORT 8000')
})

express를 이용하여 server를 생성하면 각각의 요청을 처리하는 함수를 분리함으로 인해

직관적으로 코드를 설계할 수 있다. 

 

 

 

 

 

 

 

4. res.end(), res.send(), res.json()

=> Express에서 응답을 보내는 메소드 

 

 

 

 

  • res.send()
app.get('/api/test/', (req, res) => {
 res.send({name : 'kimcode '});
 });

=> res.end()는 응답을 보내는 역할을 한다. 서버에서 response 처리를 할 때 content-type을 지정해야 한다. 

 

 

 

 

 

 

 

  • res.json()
app.set('json replacer', replacer);
// JSON 문자열에 포함시킬 객체의 프로퍼티를 지정해주는 옵션
app.set('json space', 2);
// 들여쓰기 공백 수 지정

=> res.json()은 json이 아닌 형식을 json 형식으로 바꾸어 보내주는 역할을 한다.

다른말로 하자면, content-type 헤더를 application/JSON 으로 고정한다. 

res.json()은 res.send()로 보낼 때 사용할 수 없는 몇가지 기능을 제공하는데, 두 가지 옵션을 통해 반환할 json의 형식을 정할 수 있다. 

위와 같이 옵션을 선언하게 되면 내부적으로 JSON.stringify(object, replacer, space)와 같은 형식으로 전달되고

전달된 후에 res.end() 가 호출되어 전송된다. 

 

 

 

 

 

 

 

 

  • res.end()
res.status(404).end();

=> 보내줄 데이터가 없는 경우, response를 끝내고 싶을때 사용한다. 

보내줄 데이터가 존재하는 경우, 데이터가 전송된 후 자동으로 응답이 종료되기 때문에 이러한 경우에는 res.end() 를 명시적으로 호출할 필요는 없다. 

 

 

 

 

 

 

5. 자주 사용되는 status 코드들  

 

status Code 란 ?

=> 사용자가 웹 서버에 요청을 보낼 때, 응답으로 보내주는 숫자코드 

 

 

 

 

 

  • 200: OK

가장 자주보게 되는 status code로, 문제 없이 요청에 대한 처리가 이루어졌을 때 백엔드로부터 오는 응답코드

 

 

 

  • 201: Created

무언가가 잘 생성되었을 때(Successfully Created) 오는 응답코드

대게 POST 메소드의 요청에 따라 데이터가 잘 생성 또는 수정 되었을 때 보낸다. 

 

 

 

  • 400: Bad Request

해당 요청이 잘못되었을 때 보내는 코드 

주로 요청의 Body에 보내는 내용이 잘못 되었을 때 사용되는 코드 

e.g. 숫자를 보내야 하는데 문자열이 body로 담겼을 때

 

 

 

 

  • 401: Unauthorized

유저가 해당 요청을 진행하려면 로그인을 하거나 회원가입이 필요하다는 의미를 가진 응답코드

e.g. wish list, 좋아요 기능과 같은 기능들은 회원이 아니면 요청을 보낼 수 없다. 

 

 

 

 

  • 403: Forbidden

유저가 해당 요청에 대한 권한이 없을 경우 오는 응답코드

혹은 접근 불가능한 정보에 접근했을 경우에 오는 응답코드

 

 

 

  • 404: Not Found

요청된 URI가 존재하지 않을 경우 오는 응답코드

 

 

 

 

  • 500: Internal Server Error

서버에서 에러가 났을 경우에 오는 응답코드

(프론트는 내 잘못이 아니라는 것을 알수 있는 코드)

 

'기록 > TIL' 카테고리의 다른 글

2022/03/20 TIL  (0) 2022.03.20
2022/03/17 TIL  (0) 2022.03.17
2022/03/11 TIL  (0) 2022.03.11
2022/03/09 TIL  (0) 2022.03.09
2022/03/08 TIL  (0) 2022.03.08