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을 이용하여 구현한 서버 프로그램 손쉽게 테스트 가능
- 익스프레스 라우트 테스트하기
'Books > Node.js 프로젝트 일주일 ✔️' 카테고리의 다른 글
[Node.js 프로젝트 투입 일주일 전] 9장 - 애플리케이션 운영과 고성능 웹을 위한 Node.js (0) | 2022.05.16 |
---|---|
[Node.js 프로젝트 투입 일주일 전] 8장 - 데이터베이스 사용하기 (0) | 2022.05.10 |
[Node.js 프로젝트 투입 일주일 전] 6장 - json-server 이용하기 (0) | 2022.05.07 |
[Node.js 프로젝트 투입 일주일 전] 5장 - Node.js 내장 모듈과 객체 (0) | 2022.05.07 |
[Node.js 프로젝트 투입 일주일 전] 4장 - Node.js 시작하기 (0) | 2022.05.05 |
댓글