node.js - express

heitz·2022년 4월 17일
0

Node.js

목록 보기
1/2
💡 개요

Node.js는 자바스크립트 실행 엔진이다. 여기에서 돌아가는 프레임워크에는 express가 있다.
express는 서버를 제작하는 과정에서 불편함을 해소하고 편의기능을 추가한 웹서버 프레임워크이다.

express는 http 통신을 위한 추가기능이 있는데, req와 res 객체에 추가 기능이 부여되어있다.

💡 Req와 Res란? (요청과 응답 이해하기)

서버는 클라이언트로부터 요청을 받고, 클라이언트로 응답을 보낸다. 반대로, 클라이언트는 서버로 요청을 보내고, 서버로부터 응답을 받는다. 따라서 서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다.
req 객체에는 요청에 관한 정보가 담겨있고, res 객체에는 응답에 대한 정보가 담겨있다.

💡 REST와 RESTful 서버

REST는 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 가리킨다. 그리고, REST를 따르는 서버를 ‘RESTful’하다고 표현한다.
주소는 의미를 명확히 전달하기 위해 명사로 구성된다. 예를 들어, 주소가 /users이면 사용자에 대한 정보를 요청하는 것이고, /post면 게시물에 대한 자원을 요청하는 것이라고 추측할 수 있다. (주소는 정하기 나름인데 의미가 잘 전달되도록 주소를 지정해야 한다는 뜻)
하지만 주소만 가지고는 어떤 동작을 해야하는지 알기 어렵기 때문에 REST에서는 주소 외에도 http 요청 메서드를 사용한다. http 요청 메소드에는 get, post, put, delete 등이 있다.
즉, RESTful 서버에서는 주소+메소드를 통해 어떤 동작을 하는지 정해진다. 예를들어, /users + get 이라면 사용자의 정보를 불러오는 것이고, /users + post 이라면 사용자를 신규로 등록하는 것이다.

💡 라우터

먼저, 네트워크에서 라우팅의 개념은 ...

라우팅은 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정이다. 최적의 경로는 주어진 데이터를 가장 짧은 거리로 또는 가장 적은 시간 안에 전송할 수 있는 경로다. -위키백과

express에서 말하는 라우팅의 개념은 ...

라우팅은 애플리케이션 엔드 포인트(URI)의 정의, 그리고 URI가 클라이언트 요청에 응답하는 방식을 말합니다. -express

✔️ 참고 - https://expressjs.com/ko/guide/routing.html

라우터의 간단한 예시를 보자면

// respond with "hello world" when a GET request is made to the homepage
app.get(**'/'**, **function(req, res) {
  res.send('hello world');
}**);

이 라우터는 app.method(주소, 미들웨어) 구조를 갖고있다. 주소(’/’)에 대한 요청(http 요청 메소드)이 들어오면 미들웨어가 실행된다. 미들웨어는 요청과 응답을 조작하여 기능을 추가하거나 나쁜 요청을 거르는 역할을 한다. 라우터와 에러핸들러 역시 미들웨어의 일종이다. 즉, 어떤 라우터를 다른 라우터에서 미들웨어로 사용할 수 도 있다.

💡 Router 객체로 라우팅 분리

express의 장점 중 하나는 라우팅을 깔끔하게 관리할 수 있다는 점이다. 라우터가 많아지게 되면 app.js 코드가 매우 길어지기 때문에 express에서는 라우터를 분리할 수 있는 방법을 제공한다.

라우터 분리 작업은

  1. routes 폴더 생성
  2. 폴더 안에 사용하려는 라우터 작성
  3. app.js에 2번에서 작성한 라우터를 import 하여 최종 라우터의 미들웨어로서 등록

순서로 이루어진다. 이 때, 2번에서 작성한 라우터가 실제 기능을 하는 라우터이고 3번에서는 그 라우터를 미들웨어로서 app에 등록해주는 것이다. 따라서 2번에서 라우터를 만들 땐 get, post 등의 http 요청 메소드를 사용하여 라우터를 만들고, 3번에서 라우터를 미들웨어로서 등록할 땐 use 함수를 이용한다.

✔️ 참고 - https://expressjs.com/ko/guide/using-middleware.html

app.route나 router.route를 사용하면 같은 주소에 대한 다른 http 요청 메소드를 하나로 묶어서 다룰 수 있다.

app.route('/book')
  .get(function(req, res) {
    res.send('Get a random book');
  })
  .post(function(req, res) {
    res.send('Add a book');
  })
  .put(function(req, res) {
    res.send('Update the book');
  });
profile
For Fun

1개의 댓글

comment-user-thumbnail
2022년 4월 17일

Node.js 교과서 (조현영 저) 참고

답글 달기

관련 채용 정보