
더보기
이제 국비 과정의 교육이 다 끝나가며 2달간의 파이널 프로젝트만 남았다. 포스팅에 대한 내용은 작성은 당분간 불가능 해 질 것으로 생각이 되지만 간간히 올리도록 하겠다.
시작 하기 전에 Node.js 를 설치하는건 개인이 알아서 설치를 하고 읽어주길 바란다.
자 그럼 이제 다시 시작 하자.
Node.js란?
- 정의
구글 크롬의 V8 자바스크립트 엔진 기반
웹 브라우저 밖에서도 자바스크립트를 실행할 수 있게 해주는 서버 사이드 플랫폼
- 주요 특징:
- 비동기 I/O 처리
- 요청과 파일 읽기/쓰기, DB 작업 등을 블로킹 없이 처리가 가능하여 빠른 성능을 자랑
- 이벤트 기반(Event-driven)
- 이벤트와 콜백 함수 중심으로 동작
- 서버가 효율적으로 요청을 처리
- 싱글 스레드
- 하나의 스레드로 동작하지만 비동기처리를 통해 많은 요청을 동시 처리 가능
- npm(Node Package Management)
- 다양한 라이브러리와 패키지를 쉽게 설치 및 관리 할 수 있는 도구 제공
- 비동기 I/O 처리
- 용도:
- 웹 서버 구축
- Rest API 서버 개발
- 실시간 채팅 서버
- 파일 처리, 스크립트 자동화
- Node.js 를 사용 하는 이유
- 빠른 성능
- V8 엔진 덕에 자바 스크립트 실행 속도가 매우 빠름
- 비동기 I/O 구조로 요청을 동시에 처리 가 가능 하여 실시간 서비스(채팅, 게임)에 적
- 논블록킹(Non-blocking) 구조
- 일반 서버(ex. PHP, Java)는 요청 하나가 끝날때 까지 기다리지만 Node.js 는 이벤트 기반으로 멀티 테스크처럼 처리
- 동시에 수천개의 요청을 효율적으로 처리 가능
- 자바 스크립트로 서버 개발 가능
- 프론트엔드 개발자가 같은 언어(JavaScript)로 백엔드도 개발 가능
- 풀스텍 개발이 쉬워짐
- npm 생태계
- 수많은 오픈 라이브러리와 프레임워크(Express, Nest.js 등)를 쉽게 활용 가능
- 생산성이 매우 높음
- 실시간 서비스에 강함
- 웹소캣 기반의 실시간 채팅, 게임서버, 라이브 스트리밍 등에 많이 사용
- 확장성
- 마이크로서비스 아키텍처나 서버리스 환경에도 잘 동작함
- 빠른 성능
✅ Node.js 강점 VS 약점(사용하기 좋은 분야 VS 피해야 할 분야)
| 구분 | 사용하기 좋은 분야 | 피해야 할 분야 |
| 특징 | 비동기 I/O, 실시간, 네트워크 중심 | CPU 집약적 연산, 멀티스레드 필요 |
| 웹 서비스 | 실시간 채팅, 라이브 스트리밍, 알림 시스템 | 대규모 이미지/영상 렌더링 |
| API 서버 | REST API, GraphQL API | 복잡한 연산이 많은 API |
| 게임 | 실시간 멀티플레이어 게임 서버 | 고사양 그래픽 처리 게임 엔진 |
| 자동화 | 파일 처리, 스크립트, 빌드 도구 | 머신러닝 학습, 빅데이터 연산 |
| 기타 | IoT, 마이크로서비스, 서버리스 | 고부하 CPU 연산 작업 |
✅ 비동기 I/O란?
- I/O(Input/Output): 파일 읽기/쓰기, DB 쿼리, 네트워크 요청 등 외부작업을 뜻함
- 비동기: 어떤 작업을 요청 시, 그 작업이 끝나기 까지 기다리지 않고 다른 일도 동시에 할 수 있는 방식
즉 요청을 보내고 결과가 오면 알림을 받는 형식
동기 vs 비동기 예시
동기 방식(Synchronous)
- 친구에게 전화
- 내가 친구에게 전화함
- 친구가 받을 때까지 전화기를 귀에대고 계속 기다림
- 친구가 받으면 대화 시작
비동기 방식(Asynchronous)
- 친구에게 카톡
- 내가 친구에게 카톡 보냄
- 답장이 올 때까지 다른 일 함
- 친구가 답장하면 알림
참고:
본 내용은 「초보자를 위한 Node.js 200제」(김경록님, 정지현님)를 기반으로 하였으며,
본 글은 개인 공부용으로 작성되었으며 상업적 사용은 불가합니다.
'개발 > Node.js' 카테고리의 다른 글
| [200제] 06. `${변수}` 백틱(backtick)을 이용한 포맷팅 (0) | 2025.09.04 |
|---|---|
| [200제] 05. Formating해서 출력하기 (2) | 2025.09.02 |
| [200제] 04. console.log('hello');로 출력하기 (1) | 2025.09.01 |
| [200제] 03. ECMAScript6(ES6)란? (1) | 2025.09.01 |
| [200제] 02. 웹스톰 설치 및 hello 출력 (5) | 2025.09.01 |