node.js의 등장 배경 = 기존 서버의 한계
- 기존 서버
- 스레드 기반의 동기 방식
- 일이 많아지면 스레드를 계속 만들어야 하기 때문에 메모리 사용량이 폭발적으로 증가하고, 서버가 다운될 위험성이 커진다.
- node.js로 만든 서버
- 비동기 방식으로 처리하기 때문에 단일 스레드로도 굉장히 빠르게 처리할 수 있다
- 이벤트 메커니즘으로, 서버가 멈추지 않고 반응할 수 있게 해준다. -> 높은 확장성
node.js의 특징
- 비동기 I/O 처리 → non blocking
- API가 실행되었을 때 그 반환 결과를 기다리지 않고 다음 API 실행.
- 이전 API가 완료되면 node.js의 이벤트 알림 메커니즘을 통해 결과값을 받아옴.
- 빠른 속도
- 구글 크롬의 V8 Javascript Engine을 사용하여 빠른 코드 실행 제공
- 단일 스레드와 뛰어난 확장성
- 단일 스레드인데 이벤트 메커니즘으로 서버가 멈추지 않고 반응하여 확장성을 키워줌
- 노 버퍼링
- node.js 어플리케이션엔 데이터 버퍼링이 없고, 데이터를 chunk로 출력
- MIT License
node.js가 적합한 분야
- 알림이나 실시간 대화같이 데이터의 실시간 처리가 필요한 애플리케이션
- 데이터 스트리밍 애플리케이션
- 사용자의 입출력이 잦은 애플리케이션
- JSON API기반의 애플리케이션
- 단일 페이지 기반의 애플리케이션
node.js가 부적합한 분야
- Data Science같이 복잡한 데이터를 처리하기 위해 메모리, 램, CPU 등 하드웨어를 사용해야 하는 곳
- 하드코어한 처리에는 적합하지 않다 (이런 경우엔 Python Django)
node.js의 장점
- Javascript 문법으로 서버 프로그래밍까지 가능!
- 효율적인 서버 처리 방식 (위에서 계속 설명)
- 개발 생산성이 좋다
- 풀스택 개발, JSON 사용, 비동기 프로그래밍이 모두 가능하니까!
- 프론트엔드 개발자가 백엔드 개발도 할 수 있어서 의사소통 비용도 필요 없음.
- Javascript가 지원하는 JSON을 지원해서 데이터 다루기 편하다.
- mongoDB, ElasticSearch까지 사용하면 더욱 시너지 효과 발생
고찰
- node.js가 문제를 일으키는 상황은 개발자의 잘못인 경우로 밝혀졌다고 함. (2016년 8월기준)
- Javascript의 인터프리터 언어의 성질때문에 문제가 된다고 하는 의견은.. 사실 간단한 소프트웨어에 사용되는 node.js의 특성에서 문제가 될 일은 적어 보인다.
- 순환 의존성 등과 같은 문제가 발생할 수 있다지만, 사실 개발자가 잘하면 될 일이다.
References
'취업 > 준비' 카테고리의 다른 글
Class VS Object VS Instance (0) | 2019.10.24 |
---|---|
Overriding VS Overloading (오버라이딩 VS 오버로딩) (0) | 2019.10.24 |
객체지향 / OOP에 대해 설명해보세요 (0) | 2019.10.24 |
[IT면접] 그래서 동기화 문제를 어떻게 해결할건데? (2) | 2019.10.24 |
프로세스 VS 스레드 (메모리 상의 차이) (0) | 2019.10.24 |