티스토리 뷰
고급웹프로그래밍 수업에서 진행하는 프로젝트에서 서버 개발을 맡게되어서 2주간 'Node.js 교과서 개정 2판'이라는 책으로 Nodejs를 공부할 예정이다🔥 저번 학기 소프트웨어공학 수업에서 쇼핑몰 개발할 때 우연히 발견했는데 정말 한줄기 빛같은 책이다*。+
1장 노드 시작하기
📌 Nodejs?
→ Nodejs는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임 (즉, 자바스크립트 실행기)
📌 Nodejs의 특성
1️⃣ 이벤트 기반(event-driven)
→ 이벤트(클릭, 네트워크 요청)가 발생할 때 미리 지정해둔 작업(콜백 함수)을 수행하는 방식 (이벤트리스너에 콜백함수를 등록)
→ 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단
→ 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리 가능
잠깐, 이벤트 루프 ❓
: 함수가 호출되면 호출 스택에 쌓임 → 만약 해당 함수에 콜백 함수가 있으면 콜백 함수를 백그라운드로 보냄 → 백그라운드에 맡겨진 작업이 완료되면 콜백 함수는 태스크 큐로 들어감 → 호출스택이 비워지면 이벤트 루프가 태스크 큐의 콜백을 호출 스택으로 올림
2️⃣ 논 블로킹 I/O
→ 논 블로킹이란 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행는 것 (단, 모든 작업들이 모두 동시에 처리될 수 있다고 가정)
→ 노드는 I/O 작업을 백그라운드로 넘겨 동시에 처리 (동시에 처리될 수 있는 작업들을 최대한 묶어서 백그라운드로 넘겨야 효율적!)
→ 동시에 처리될 수 있는 I/O 작업이라도 논 블로킹 방식으로 코딩하지 않으면 의미 X (setTimeout(콜백, 0), setImediate()를 활용!)
→ I/O 작업이 없더라도 논 블로킹을 통해 실행 순서를 바꿔줌으로써 간단한 작업들이 대기하는 상황을 막을 수 있음
3️⃣ 싱글 스레드
→ 싱글 스레드란 스레드(프로세스 내에서 실행되는 흐름의 단위)가 하나뿐인 것
→ 사실, 노드를 싱행하면 여러 스레드들이 생성되는데 그중에서 우리가 제어할 수 있는 스레드가 하나뿐!
멀티 스레딩 | 멀티 프로세싱 |
하나의 프로세스 안에서 여러 개의 스레드 사용 | 여러 개의 프로세스 사용 |
CPU 작업이 많을 때 사용 | I/O 요청이 많을 때 사용 |
프로그래밍이 어려움 | 프로그래밍이 비교적 쉬움 |
📌 서버로서의 노드
🙆🏻 장점
→ I/O 작업이 많은 서버로 적합
→ 멀티 스레드 방식에 비해 적은 컴퓨팅 자원 사용
→ 멀티 스레드 방식보다 쉬움
→ 웹 서버가 내장되어 있음 (but 규모가 커지면 결국 nginx 등의 웹서버를 연결)
→ 자바스크립트를 사용
→ JSON 형식과 쉽게 호환
🙅🏻♀️ 단점
→ CPU 작업이 많은 서버로 부적합 (이미지 또는 비디오 처리, 대규모 데이터 처리)
→ 기본적으로 싱글 스레드라서 CPU 코어를 하나만 사용
→ 하나뿐인 스레드가 멈추지 않도록 관리가 필요
→ 서버 규모가 커졌을 때 서버를 관리하기 어려움
→ 어중간한 성능
'백엔드 > Nodejs' 카테고리의 다른 글
[Nodejs] 익스프레스 웹 서버 만들기 (0) | 2021.11.16 |
---|---|
[Nodejs] 패키지 매니저 (0) | 2021.11.15 |
[Nodejs] http 모듈로 서버 만들기 (0) | 2021.11.15 |
[Nodejs] 노드 기능 알아보기 (0) | 2021.11.13 |
[Nodejs] 알아두어야 할 자바스크립트 (0) | 2021.11.11 |