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

[Node.js 프로젝트 투입 일주일 전] 9장 - 애플리케이션 운영과 고성능 웹을 위한 Node.js

by Aaron-Kim 2022. 5. 16.

9.1 로그 관리

  - 로그: 시스템 운영 시 발생하는 모든 데이터

    - 시스템을 운영하면서 예기치 못한 오류 혹은 치명적인 장애가 발생했을 때,

       장애 원인을 추적하고 시스템을 안정적으로 운영하기 위해서 반드시 제대로 관리 필요

  - winston: 로그 관리 대표적인 모듈 중 하나

9.2 메일링 서비스

  - Nodemailer

    - 다른 모듈에 의존성이 없는 독립된 모듈

    - 유니코드 지원해서 모든 언어 지원

    - 파일 첨부 기능 지원

    - 일반 텍스트뿐만 아니라 HTML을 본문 내용에 사용 가능

    - TLS/STARTTLS를 사용해서 안전한 이메일 전송 지원

    - OAuth2 인증 지원

    - SMTP 연결 위한 프록시 사용 가능

  - SMTP transport

    - SMTP(Simple Mail Transport Protocol): 인터넷에서 이메일을 보내기 위해서 이용되는 프로토콜

    - nodemailer.createTransport()

  - 이메일 보내기

    - transporter.sendMail()

  - Gmail을 사용해서 이메일 보내기

    - email, 앱 비밀번호 설정

  - mailtrap 서비스 이용해서 이메일 보내기

    - 실제로 이메일을 보내지 않고 정상적으로 보내지는지 테스트 가능한 가짜 SMTP 서버

    - 프로젝트 중에 발송한 이메일 정보를 한 곳에서 모아서 확인 가능한 장점

9.3 작업 스케줄러(Job Scheduler)

  - node-cron

  - 작업 스케줄 설정하기

  - 타임존 설정하기

    - 해외 서비스 고려하면 반드시 타임존 설정 필요!

  - ScheduledTask() 함수

  - start()

  - stop()

  - destroy()

  - validate()

  - 정해진 시간에 이메일 발송하기

    - node-cron을 통해 기업에서 운영하는 다양한 집계 데이터를 정해진 주기마다
       담당자에게 발송하는 프로그램을 활용하면 업무 효율 극대화 가능

9.4 엑셀 파일 처리

  - xlsx

  - 엑셀 파일 읽기

    - xlsx.readFile()

  - 엑셀 파일 내용 수정하기

    - xlsx.writeFile()

  - 클라이언트에서 업로드한 엑셀 파일 읽기

    - multer, xlsx, mysql 모듈 이용

  - 엑셀 파일 생성하기

    - xlsx.utils.book_new() 함수 사용

  - 셀 스타일

    - xlsx pro 버전 (유료)

    - xlsx-js-style 모듈

  - 데이터베이스 데이터를 조회해서 엑셀 파일로 생성하기

    - MySQL DB에 저장된 데이터 조회 후 엑셀 파일 생성하는 async 함수 만들어 사용

  - 이메일에 엑셀 파일 첨부하기

    - 물리적인 엑셀 파일을 생성하지 않고, 엑셀 데이터를 buffer로 생성해서 이메일에 바로 첨부

       (영구적으로 엑셀 파일을 보관할 필요 없을 경우 활용)

  - 엑셀 파일 클라이언트로 다운로드

    - 클라이언트로부터 엑셀 파일 다운로드 요청 시,

       DB에 저장된 데이터를 조회하고 조회된 데이터를 엑셀 파일로 생성해서 클라이언트로 응답

9.5 iCalendar 이벤트 생성

  - iCalendar 이벤트 생성하기

    - ics 모듈의 createEvent() 함수 이용

  - iCalendar 이벤트 이메일 발송하기

    - nodemailer를 이용하여 이메일로 전송

    - nodemailer로 전송하는 메시지의 옵션인 icalEvent 사용해서 iCalendar 이벤트를 첨부해서 보내기

9.6 웹소켓

  - 웹소켓이란

    - 웹소켓: 클라이언트와 서버 간의 양방향 통신 가능, 실시간 데이터 전송 가능

    - 클라이언트의 요청 없이도 서버에서 클라이언트로 데이터 전송 가능

    - 서버에서 DB로 단 한 번의 접속 요청이 일어나고, 변경사항이 있을 때만 클라이언트에 해당 정보 전송

    - 실무 활용

      - 지도, 대시보드, 실시간 지표

  - 웹소켓 서버 구현하기

    - 클라이언트와 서버 양쪽에 구축해야 함

    - socket.io 모듈

  - 웹소켓 클라이언트 구현하기

9.7 크롤링

  - 크롤링이란

    - 크롤링: 웹 페이지를 그대로 가져와서 웹 페이지 안에 있는 필요한 데이터 추출

  - axios, cheerio 모듈

    - axios 모듈: 브라우저, Node.js를 위한 Promise API를 활용하는 HTTP 비동기 통신 라이브러리

    - cheerio 모듈: Node.js에서 axios를 통해 가져온 웹 페이지를 파싱하여

                              전체 페이지 중에서 필요한 부분의 정보만 가져옴

  - 인프런 강의 목록 크롤링하기

    - 크롤링 프로그램을 이용하여 웹 페이지를 직접 방문하지 않고도

       원하는 정보를 주기적으로 수집하고 활용할 수 있기 때문에 실무에서 매우 유용!

9.8 forever

  - forever: Node.js 앱을 실행시키고 비정상 종료가 되었을 때 자동으로 재실행해 주는 CLI 툴

  - npm install -g forever

  - forever start

  - forever stop

9.9 클러스터 모드

  - cluster 모듈: CPU 코어를 모두 사용해서 작업을 병렬로 처리 가능

9.10 PM2

  - PM2 사용하기

    - PM2: Node.js 프로세스 관리 대표적인 도구, 별도의 코딩 없이 서버 자원 모두 사용하고 무중단 서비스 가능

  - 클러스터 모드로 실행하기

    - pm2 start

    - pm2 stop

    - pm2 monit

    - pm2 start app.js -i 4

  - Ecosystem File

    - PM2에서 2개 이상의 멀티 애플리케이션 관리할 때 js configuration 파일 사용

    - 여러 개의 프로세스를 동시에 관리 가능


[Source Code] - Ch 09. 애플리케이션 운영과 고성능 웹을 위한 Node.js

반응형

댓글