728x90
TypeScript(Node.js)는 멀티스레드가 아니라 기본적으로 '싱글 스레드(Single Thread)' 기반으로 동작합니다.
Java/Spring은 요청이 들어올 때마다 스레드를 새로 생성하거나 스레드 풀에서 꺼내 쓰는 방식이지만, TypeScript가 돌아가는 환경인 Node.js는 조금 다른 방식을 취합니다.
1. 왜 싱글 스레드인가요?
TypeScript는 결국 JavaScript로 변환되어 실행됩니다. JavaScript의 엔진(V8)은 한 번에 하나의 작업만 수행하는 싱글 스레드 이벤트 루프(Event Loop) 방식을 사용합니다.
- Spring: 손님이 올 때마다 요리사(스레드)를 새로 고용함. 요리사가 많으면 동시에 여러 요리를 하지만 비용이 많이 듬.
- NestJS (Node.js): 요리사는 단 한 명임. 하지만 주문을 받고 요리가 익는 동안(I/O 작업) 가만히 기다리지 않고 다음 주문을 처리함.
2. 멀티스레드처럼 동작하는 비결: 논블로킹(Non-blocking) I/O
"스레드가 하나면 서버가 느려지지 않나요?"라고 생각하실 수 있지만, Node.js는 비동기 작업을 기가 막히게 처리합니다.
- 데이터베이스 조회나 파일 읽기 같은 무거운 작업은 시스템(커널)에 맡겨버리고,
- 그동안 메인 스레드는 다른 요청을 받습니다.
- 작업이 끝나면 "다 됐어!"라는 신호(이벤트)를 받고 응답을 보냅니다.
3. TypeScript에서도 멀티스레드를 쓸 수 있나요?
네, 불가능한 것은 아닙니다. CPU 연산이 너무 복잡해서 스레드 하나로 감당이 안 될 때는 아래 방법들을 사용합니다.
- Worker Threads: Node.js 내장 모듈을 사용하여 실제로 별도의 스레드를 띄워 연산을 분산할 수 있습니다. (Java의 Thread와 유사)
- Cluster: 서버의 CPU 코어 개수만큼 프로세스를 복사해서 띄우는 방식입니다.
요약비교
| 비교 항목 | Java / Spring | TypeScript / NestJS |
|---|---|---|
| 기본 모델 | 멀티스레드 (Multi-threaded) | 싱글 스레드 이벤트 루프 (Single-threaded) |
| 강점 | 복잡한 계산, 대규모 CPU 연산 | 많은 연결(I/O) 처리, 채팅, 실시간 서비스 |
| 자원 소모 | 상대적으로 높음 (스레드 생성 비용) | 매우 낮음 (가벼움) |
정리하자면: TypeScript(NestJS)는 Spring과 '생긴 것(문법, 구조)' 은 매우 비슷하지만, '엔진(작동 원리)' 은 완전히 다릅니다. 가벼운 발걸음으로 엄청나게 많은 손님을 빠르게 쳐내는 스타일이라고 이해하시면 됩니다.
728x90
'기술 학습' 카테고리의 다른 글
| 소켓(Socket) 이란? (0) | 2026.02.09 |
|---|---|
| Java 비동기 (0) | 2026.02.05 |
| NestJS와 Spring에 연관성 (0) | 2026.02.05 |
| NestJS는 왜 TypeScript를 사용할까? (0) | 2026.02.05 |
| TypeScript란? (0) | 2026.02.05 |