반응형
헤딩 글의 목적은 간단하고 빠르게 그리고 하나의 언어로 Back-end 환경(서버)을 구성할 수 있는 ‘Javascript’ 언어를 이용한 Node.js에 대해서 이해하는 글입니다.
1) Node.js 란 무엇인가?
💡 Node.js는 Chrome V8JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.
Node.js는 웹 서버의 개념이 아닌 javascript로 서버를 구축하고 서버에서 JavaScript가 작동되도록 해주는 런타임 환경(플랫폼)입니다.
[ 더 알아보기 ]
💡 웹 서버(web server)란?
- HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)를 전송해주는 서비스 프로그램을 말한다.
💡 런타임(runtime)이란?
- 프로그래밍 언어는 주로 고급 언어로, 기계(컴퓨터)가 바로 이해할 수 없기에 고급 언어로 작성된 소스 코드를 기계어로 변환하는 과정을 런타임이라고 한다.
💡자바스크립트 런타임(javascript runtime)이란?
- 프로그래밍 언어로 작성된 javascript 언어를 컴퓨터가 이해할 수 있는 기계어로 변환시켜주는 역할을 의미한다.
[참고] Node.js 공식 사이트
2) Node.js의 특징
💡 Node.js의 특징을 확인하고 어떠한 환경에서 이용하면 좋을지에 대해서 이해합니다.
1. Node.js 장점
- Node.js는 단일 스레드(Single-Thread)의 논 블로킹(Non-blocking I/O) 이벤트 기반 비동기 방식으로 처리되어 높은 처리 성능을 가지고 있다.
- 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.
- Javascript 언어로 Front-end 뿐만 아니라 Back-end 개발 환경을 구성할 수 있기에 생산성이 높고 러닝 커브가 줄어든다.
- 다양한 패키지 매니저(npm: node Package Manager)를 기반으로 다양한 모듈(패키지)을 제공하며 필요 라이브러리에 대해 설치하고 사용할 수 있기에 효율성이 좋다
[ 더 알아보기 ]
💡 블로킹 (blocking I/O)란?
- I/O가 동작되고 있는 동안에 다른 일을 처리하지 못하는 상태를 의미하며, 함수가 모든 일을 마무리될 때까지 다음 처리가 안되는 것을 의미한다.
💡 논 블로킹(Non-blocking I/O)란?
- I/O가 동작을 하면서 request를 받으면 바로 다음 처리에 요청을 보내 놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보내는 것을 의미한다.
💡러닝 커브(Learning Curve)란?
- ’ 학습 곡선’이라고도 하며 특정 기술 또는 지식을 실제 필요한 업무와 같은 환경에서 효율적으로 사용하기 위해 드는 학습 비용을 의미한다.
2. Node.js 단점
- Node.js 모든 API는 ‘비동기 기반의 처리 방식’이라 서버의 로직이 복잡한 경우에 ‘콜백 함수 늪(callback hell)'에 빠질 수 있다.
- 단일 스레드(Single Thread)이기 때문에 하나의 작업이 오래 걸리는 웹 서비스에 경우 애플리케이션의 성능이 저하될 수 있다.
- 해당 코드를 수행이 되어야지 코드에서 에러가 났는지 확인이 가능하며 에러 갈 날 경우 프로세스 자체가 내려갈 수 있다.
- 세션을 공유할 경우 redis와 같은 부가적인 인프라가 필요하다.
[ 더 알아보기 ]
💡 콜백 함수(callback) 란?
- 함수를 등록하면 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수를 말한다
3. 그럼 언제 쓰는 게 제일 좋은 걸까?
💡 장점과 단점을 비교해 보았을 때, 어떤 상황에서 Node.js를 사용하는지 좋은지에 대해 이해합니다.
- 하나의 언어로 Front/Back-end 개발환경을 구성할 때 유용하다
- 간단한 로직으로 구성하는 서비스에 사용하는 것이 좋다.
- 입출력(I/O)이 자주 발생하는 작고 빈번한 요청을 처리하는 서비스에 어울린다. ex) 알림 혹은 채팅 서비스
- 비동기 방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)에 유용하다.
- 빠르게 환경 구성을 하여 개발을 해야 하는 경우에 유용하다.
3) 오늘의 결론
Node.js에 대해 이해를 하였습니다.
상황에 따라서 Node.js를 사용하는 것이 좋을 수도 있고 Java의 Spring을 사용하는 게 좋을 수도 있습니다.
각각의 상황을 잘 따져서 사용하는 것을 추천드립니다.
다음 글에서는 Node.js를 구성하고 사용하는 방법에 대해서 글을 작성하겠습니다.
오늘도 감사합니다😀
반응형
'Node > 이해하기' 카테고리의 다른 글
[Node] Socket.io 기반 소켓 서버 구축 방법 -2 : Room, Namespace 별 소켓 통신 방법 (1) | 2024.08.25 |
---|---|
[Node] Socket.io 기반 소켓 서버 구축 방법 -1 : 구성 요소 및 흐름 + React 기반 채팅 화면 구성 (0) | 2024.08.18 |
[Node] Node 버전 상황에 따라 변경 방법 : 라이브러리 n 활용 (0) | 2024.04.22 |
[Node] 자바스크립트 패키지 매니져(npm/yarn) 이해하기 -1 (2) | 2022.06.26 |
[Node] Node.js 이해하기-2(환경구성, Express, MongoDB) (0) | 2022.06.19 |