Node.js
V8 (자바스크립트 엔진)으로 빌드 된 이벤트 기반 자바스크립트 런타임이다.
Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다. (출처 : 위키)
Node.js 사용 시 주의사항 (출처 : Fall in IT)
- 싱글스레드이기 때문에 하나의 작업 자체가 시간이 많이 걸리면 전체 시스템의 성능이 낮아진다.
- CPU를 많이 사용하지 않는 작업 위주로 개발되어야 한다. - 코드의 가독성이 좋지않다.
- 자바에 비해 자바스크립트는 코드의 가독성이 좋지 않기 때문이다.
- 코드의 가독성이 좋지 않다보니, 유지보수가 어려워 질 수 있다. - 실행해봐야 에러를 확인 할 수 있다.
- 컴파일시 확인이 불가하다. - 프로그래밍 컨셉이 기존의 서버사이드 컨셉과는 달라서 적응 시간이 필요하다.
- 코드를 순차적으로 실행하는 것이 아니라, 비동기 방식으로 이벤트를 보내 놓고, 그 응답에 대한 이벤트가 오면 핸들러를 통해서 처리하는 형식이기 때문에, 기존 서버 프로그래밍 모델과는 많은 차이가 있다.
Node.js를 사용하는데 적합한 어플리케이션은?
-
Node.js 의 특징을 살펴보면 짧은 시간에 대량의 클라이언트 요청을 처리하는 웹 어플리케이션을 개발하기엔 적합하나, CPU의 사용이 높게 필요한 어플리케이션의 경우(특히, 하나의 작업처리 시간이 길게 필요한경우)에는 오히려 성능이 좋지 않을 수 있을것 같습니다.
-
간단히 말하면, Node.js는 간단하지만 많은 양의 처리를 요하는 서버를 구축할때 효율이 좋습니다.
Express.js
: http와 middleware라는 connect 컴포넌트를 기반으로 하는 웹 프레임워크다. 개발자들은 미들웨어를 통해 프로젝트에 맞게 필요한 라이브러리를 자유롭게 선택하여 유연하게 웹을 구성할 수 있다.
Node.js의 핵심 모듈만 이용해서 중요 앱을 작성한다면 다음과 같은 비슷한 작업을 위해 동일한 코드를 지속적으로 작성함으로써 바퀴를 재발명할 가능성이 높다.
- HTTP 요청 본문 파싱
- 쿠키 파싱
- 세션 관리
- URL 경로와 HTTP 요청 메서드를 기반으로 한 복잡한 if 조건을 통해 라우팅을 구성
- 데이터 타입을 토대로 한 적절한 응답 헤더 결정
Express.js는 이러한 문제를 비롯해 다른 여러 문제를 해결함과 동시에 웹 앱에 MVC 형태의 구조를 제공한다. 이 같은 앱은 백엔드만 갖춘 REST API에서부터 온갖 기능을 제공하는 고도로 확장 가능한 풀스택(jade-browser와 Socket.IO를 포함하는) 실시간 웹 앱에 이르기까지 다양하다.
(출처 : 위키북스)
미들웨어
: request / response 조건을 정해 응답 여부를 결정할 수 있다.
app.use((req,res,next)=>{
if(req.headers.token){
req.user = true;
next()
} else {
res.status(400).send('invalid user')
}
})
자주 쓰는 미들웨어
req.on('data',()=>{}) 없이 data 받는법 (여기)
cors header설정 손쉽게 하는 법 (여기)
라우터
: 보다 간단하게 URLs / Path 를 이용하여 http method를 이용하여 응답/요청 조건을 설정할 수 있다.
const router = express().Router()
router.get('/classes/messages',(req,res)=>{
res.send(messages)
})
router.post('/classes/messages',(req,res)=>{
// do something
})
Reference: https://expressjs.com/en/guide/routing.html
'2. 우당탕탕 개발자 > 2-1. 공부기록' 카테고리의 다른 글
11Feb2020 TIL (0) | 2020.02.12 |
---|---|
09Feb2020 TIL (0) | 2020.02.09 |
02Feb2020 TIL (0) | 2020.02.03 |
30Jan2020 TIL (0) | 2020.01.31 |
29Jan2020 TIL (0) | 2020.01.30 |
댓글