본문 바로가기
Books/Node.js 프로젝트 일주일 ✔️

[Node.js 프로젝트 투입 일주일 전] 7장 - Express로 웹 서버 구축하기

by Aaron-Kim 2022. 5. 8.

7.1 Express.js로 웹 서버 만들기

  - package.json 파일 생성

    - 패키지와 버전이 무엇인지 아는 것은 애플리케이션을 론칭하고 운영하는데 매우 중요

    - npm init 명령어

  - Express 설치

    - npm install express 명령어

  - app.js 생성

7.2 라우팅 처리

  - 라우팅(Routing)

    - 라우팅: 특정 엔드 포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것

      - 특정 엔드 포인트: URI(경로), HTTP 요청 메소드로 구분된 클라이언트에서 서버로 요청보낼 수 있는 문

    - app.METHOD(PATH, HANDLER)

      - app: express의 인스턴스

      - METHOD: HTTP 요청 메소드 (GET, POST 등)

      - PATH: 서버에서의 경로

      - HANDLER: 라우트가 일치할 때 실행되는 함수

  - 라우트(Route) 메소드

    - 익스프레스는 HTTP 메소드에 해당하는 여러 라우트 메소드 지원

    - HTTP 요청 메소드 상관없이 하나의 라우트 메소드를 사용하고 싶으면 app.all() 라우트 메소드 사용

  - 라우트(Route) 경로

    - 요청 메소드와의 조합을 통해 요청이 이루어질 수 있는 엔드 포인트 정의

    - 문자열, 문자열 패턴, 정규식 이용 가능

  - 라우트(Route) 핸들러

    - 클라이언트 요청에 따라 라우트가 일치할 때 실행되는 콜백 함수

    - 파라미터

      - req: Request

      - res: Response

      - next: 다음 미들웨어 함수를 가리키는 오브젝트

        - 하나의 라우트에서 next 오브젝트를 사용해서 2개 이상의 콜백 함수 실행 가능

        - next를 이용하면 콜백 함수의 배열로 정의 가능

  - 응답 메소드

    - 라우트 메소드에서 응답 메소드 하나라도 호출되지 않은 경우에,

       클라이언트 요청이 응답받지 못하고 정지된 채로 있음

  - app.route()

    - 여러 라우트 메소드를 한 곳에서 작성 가능

      - 하나의 라우트 경로로 각 라우트 메소드 연쇄 처리

    - 모듈식 라우트를 작성하면 중복성이 감소하여 코드를 좀 더 효율적으로 관리 가능

  - express.Router

    - 라우트 처리를 하나의 파일에서 하는 것이 아니라 여러 개의 파일로 분리해서,

      각각의 용도(기능)에 맞게 구현하여 사용 가능

    - 라우트 모듈을 분리하면 라우트를 기능별로 관리 가능

    - 여러 서버 개발자가 기능별로 분리된 라우트 파일을 각자 관리하면 업무를 명확하게 구분 가능

    - 운영과 유지보수 측면에서도 기능별로 라우트 모듈이 분리되어 있는 것이 훨씬 관리하기 쉬움

7.3 Express에서 에러 처리하기

  - 익스프레스에는 앱에서 발생할 수 있는 모든 에러를 처리하는 에러 핸들러가 내장되어 있음

  - 에러 처리 핸들러 미들웨어 함수

    - 파라미터: err, req, res, next

7.4 Express에서 정적 파일 제공하기

  - 이미지, CSS, JS 파일과 같은 정적 파일을 제공하기 위해 익스프레스의 미들웨어 모듈인 express.static 사용

  - 정적 파일이 있는 폴더인 public 폴더 이름을 express.static 미들웨어 함수에게 전달하면,

     브라우저 URL을 통해 파일 제공 가능

  - app.use('추가된 가상 경로', express.static('폴더명'));

7.5 미들웨어 모듈

  - 미들웨어 모듈: request와 response의 middle에서 목적에 맞는 특정 기능을 하는 함수

  - body-parser

    - HTTP 요청 body를 해석

    - req body의 구문을 해석해서 req.body 속성으로 사용하게 해주는 미들웨어

    - multi-part(이미지, 파일) 데이터는 처리 못함

    - 클라이언트로부터 전달받는 데이터의 유형은 보통 json, raw, text, urlencode

    - 익스프레스 4.16 이상 버전부터 body-parser 기능이 익스프레스에 내장되어 있음

      - 현재 모듈은 deprecated된 상태

    - body-parser를 특정 라우트에만 적용할 수도 있음

  - compression

    - HTTP 요청들을 압축

    - 주어진 옵션을 사용해서 서버에서 클라이언트로 응답하는 res body 압축

    - 일반적으로 파일처럼 응답하는 데이터의 크기가 큰 경우에 사용

    - 실무 활용

      - 이미지 파일이나 지도 데이터처럼 큰 데이터를 응답해야 하는 라우터에만 compression 사용

  - cookie-session

    - 쿠키 기반의 세션 생성

    - 사용자 세션은 쿠키를 사용해서 서버 혹은 클라이언트에 2가지 방법으로 저장 가능

      - cookie-session 모듈: 쿠키 내에 클라이언트의 세션 데이터 저장

      - express-session 모듈: 일반적으로 쿠키 내에 클라이언트의 세션 식별자만 저장하고.

                                                 서버의 세션 데이터는 데이터베이스 혹은 서버 파일에 저장

    - cookie-session은 브라우저의 최대 쿠키 크기 내에서만 저장 가능하지만,

       서버 측 데이터베이스와 별도의 리소스가 필요하지 않다는 장점 있음

    - cookie-session은 특정 부하 분산 시나리오를 단순화할 수 있음

  - express-session

    - 서버 기반의 세션 생성

    - cookie-session과는 다르게 데이터를 서버에 저장해서 더 안전하고 더 많은 데이터 저장 가능

    - 세션이 서버 메모리에 저장되면 휘발성으로 서버 재시작 시 저장되어 있는 세션 정보 모두 초기화됨

      - 세션을 안정적으로 관리하기 위해 물리적인 DB 또는 파일로 저장하는 것이 좋음

    - session-file-store 모듈

      - 세션 정보를 파일로 저장해서 관리 가능

      - 사용자가 로그인을 하고 나면 사용자를 식별할 수 있는 이메일 정보 및 로그인 여부를 세션에 기록해서

         서버에서 로그인 인증 후 이용할 수 있는 기능에 대해서,

         세션에 이메일 정보 및 로그인 여부를 확인한 후 처리하도록 할 수 있음

      - 로그아웃을 하면 세션 삭제 필요

  - cors

    - CORS: 추가 HTTP 헤더를 사용해서 도메인 또는 포트가 다른 서버의 자원에 접근할 수 있는 권한을 부여하도록

                   브라우저에 알려주는 체제

    - cors 모듈: CORS 도메인과 포트를 지정해서 권한이 있는 클라이언트만 접근할 수 있도록

                        접근 권한을 부여하고 관리할 수 있는 미들웨어

    - 특정 라우터에만 cors 적용도 가능

  - morgan

    - HTTP 요청 로그를 남김

    - HTTP 요청 로그를 파일로 생성해서 기록 가능

  - multer

    - multi-part(이미지, 파일) 폼 데이터 처리

    - 클라이언트에서 전송한 파일을 쉽게 업로드할 수 있게 해주는 미들웨어

    - 디스크 저장 장소에 대한 객체 생성

      - multer의 diskStorage() 함수를 통해 파일이 저장될 위치와 파일명을 어떻게 만들 것인지 정의

  - response-time

    - 클라이언트 요청에 대한 응답 시간을 관리하는 미들웨어 (응답 시간 기록)

    - 응답 시간이 오래 걸리는 기능을 반드시 체크해서 성능 개선 필요성

  - connect-timeout

    - HTTP 요청 처리를 위해 timeout 생성

    - 클라이언트의 요청에 대해서 지정된 시간 동안 응답을 못하는 경우 타임아웃,

       즉 연결을 종료하는 기능을 제공하는 미들웨어

    - 라우터별로 타임아웃 지정하는 것을 추천

7.6 Postman 설치 및 익스프레스 라우트 테스트

  - Postman 설치하기

    - Postman을 이용하여 구현한 서버 프로그램 손쉽게 테스트 가능

  - 익스프레스 라우트 테스트하기


[Source Code] - Ch 07. Express로 웹 서버 구축하기

반응형

댓글