내일배움캠프 TIL (221220)

Jiumn·2022년 12월 20일

res.send() vs res.json() vs res.end() 차이

노드 숙련 과제로 express.js로 회원가입, 로그인, 댓글 CRUD api를 만들고 있다.
스파르타 강의를 듣다가 어떨 때는 res.send()를 쓰고, 어떨 때는 res.json(), res.end()를 사용하길래 차이가 궁금했다.

send()와 json()은 형식의 차이인 것 같은데, end()는 뭐지?

블로그를 찾아보니 대체로 다음과 같이 설명되어 있었다.

res.send()는 send에 전해진 argument에 따라서 Content-type이 자동적으로 만들어진다. 이게 기본이다.
res.json()은 json이 아닌 것도 json 형식으로 바꾸어서 보내준다. 즉 content-type 헤더를 application/JSON으로 고정한다. 그런데 결국 res.json()도 마지막에 res.send()를 호출한다.
res.end()는 보내줄 아무 데이터도 없는데 response를 끝내고 싶을 때 사용한다.
ex) res.status(400).end();

출처: https://yohanpro.com/posts/nodejs/express-response

보내줄 데이터가 없지만 response를 끝내고 싶을 때 res.end()를 사용한다.
주로 400 에러가 발생할 때 end()로 끝낸다고 하는데, 강의에서는 에러가 없을 때도 end()로 마무리하는 경우가 있었다.

res.cookie() 메서드 사용법

쿠키를 발행할 때 cookie() 메서드를 사용하는데 들어가는 옵션이 다양하길래 정리 겸 찾아봤다.

res.cookie(‘cookie name’, ‘cookie value’, option)

maxAge: 쿠키의 만료 시간을 밀리초 단위로 설정
expires: 쿠키의 만료 시간을 표준 시간 으로 설정
path: 쿠키의 경로 (default: /)
domain: 쿠키의 도메인 이름 (default: loaded)
secure: HTTPS 프로토콜만 쿠키 사용 가능
httpOnly: HTTP 프로토콜만 쿠키 사용 가능
signed: 쿠키의 서명 여부를 결정

출처: https://cinema4dr12.tistory.com/838

강의에서 사용했던 건 expires로 쿠키의 만료 시간을 지정할 때 사용되었다.

app.get("/set-cookie", (req, res) => {
  const expires = new Date();
  expires.setMinutes(expires.getMinutes() + 60); 
  // 만료 시간을 60분으로 설정합니다.

  res.cookie('name', 'sparta', {
    expires: expires
  });
  return res.status(200).end();
});

나머지는 언제 쓰는지 모르겠지만 앞으로 쓸 일이 있겠지..?

Sequelize 사용하기

이번 과제에서는 Mongoose로 연결했던 DB를 Sequlize를 이용해서 Mysql로 변경해야 한다.

그런데 Sequelize가 뭐냐...?

Sequelize란 node.js에서 관계형 데이터베이스를 쉽게 다룰 수 있게 도와주는 라이브러리다. (ORM: Object-Relational Mapping)
raw Query를 사용하지 않고도 객체의 메서드를 활용함으로서 DB를 조작할 수 있다.

Sequelize를 설치하면 파일 구조가 다음과 같이 생성된다. 스파르타 강의에서는 자세하게 설명해주지 않아서 따로 찾아봤다.

  • config : 데이터베이스 설정 파일, 사용자 이름, DB 이름, 비밀번호 등의 정보 들어있다.
  • migrations : git과 비슷하게, 데이터베이스 변화하는 과정들을 추적해나가는 정보로, 실제 데이터베이스에 반영할 수도 있고 변화를 취소할 수도 있다.
  • models : 데이터베이스 각 테이블의 정보 및 필드타입을 정의하고 하나의 객체로 모은다.
  • seeders : 테이블에 기본 데이터를 넣고 싶은 경우에 사용한다.

models는 mongoose의 schema와 비슷한 개념인 것 같은데,
sequelize에서는 migration 파일도 같이 변경을 해줘야 한다.

그리고 mongoose와 다른 점은 id를 objectid가 아니라 autoincrement로 자동생성을 해준다는 점이고,
데이터 생성날짜와 수정날짜를 자동으로 저장해준다. (CreatedAt, UpdatedAt 컬럼에 저장)

사용되는 문법도 좀 다른데 또 구글링하며 변경해봐야겠다...

profile
Back-End Wep Developer. 꾸준함이 능력이다. Node.js, React.js를 주로 다룹니다.

0개의 댓글