- Javascript가 서버에서 동작될 수 있도록 하는 그러한 환경(플랫폼)
- 구글이 크롬 브라우저 용으로 개발한 V8 JavaScript 엔진으로 빌드된 JS 런타임기
특징
- Nods.js 라이브러리 내의 api는 모두 비동기
- 단일 스레드.
- 이벤트 메커니즘을 통해 서버가 멈추지 않으며 실시간 데이터 애플리케이션, SPA, I/O 잦은 앱개발에 효율적
- 여기서 I/O작업이란? 파일 시스템 접근, DB 접근, 네트워크 요청과 같은 작업. 컴퓨터의 기본적인 동작 중 가장 느리다.
- 느린 이유? 요청을 보낸순간부터 완료될때까지 지연되기 때문
- 이것을 해결하기 위한 것
- Non blocking + Sync : 폴링방식으로 busy waiting하기
- Non blocking + Async : 이벤트 루프
- 하나의 작업 자체가 오래걸리면 전체 성능 저하. (싱글스레드 이기 때문)
Node.js의 철학
: JS나 Unix 체제의 공통적인 철학(경량)에 뿌리를 둔다.
다른 소프트웨어 개발 철학들 모음: https://en.wikipedia.org/wiki/List_of_software_development_philosophies
경량 코어
: Node.js 그 자체만으로는 정말 최소의 기능만하도록 최소한으로 유지
경량 모듈
: 필요한 패키지만을 npm을 통해 관리가능
- 패키지간 의존성 없이 관리, 재사용성을 높게 유지
- 아주 작은 단위의 코드 조각(패키지)조차도 재사용 -> DRY원칙
작은 외부 인터페이스
: 최소한의 기능만을 export로 노출 가능
간결함과 실용주의
: 단순한 설계 추구
- JS의 철학. 객체지향의 복잡성을 버리고 합리적인 수준의 복잡성으로, 높은 생산성을 지향
- KISS 원칙
Node의 주요 도구(패키지)
- 확장을 잠가 확장성을 줄이더라도, 단순한 구현과 유지 용이, 가용성을 높이는 것이 목적
Http 모듈
- HTTP 통신으로 데이터를 주고 받을 수 있는 프로토콜
- createServer를 통해 server 객체 생성(웹서버 객체)
Express
- 외장 모듈(npm으로 다운)
- package.json : 모듈 버전, 의존 패키지 관리(npm 이용)
- Routing: app.js로 routing 역할 수행
- URI 및 특정 HTTP 요청메소드인 특정 엔드포인트에 대한 요청에 application이 응답하는 방법을 결정
- 앱 구동
Sequelize
- DB와 연동할 때 객체와 테이블을 매핑해주는 ORM
- 이걸 이용하면 객체의 메서드를 통해 쿼리를 조작함. sql 문법을 모르더라도.
- create(), findOne(), findAll(), update(), destroy() 등
Reference)
Node.js 디자인패턴
https://velog.io/@new_wisdom/Node.js-SOPT-%EB%A9%B4%EC%A0%91-%EC%A4%80%EB%B9%84