기술 학습

TypeScript는 싱글 스레드

hawon6691 2026. 2. 5. 14:39
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 연산이 너무 복잡해서 스레드 하나로 감당이 안 될 때는 아래 방법들을 사용합니다.

  1. Worker Threads: Node.js 내장 모듈을 사용하여 실제로 별도의 스레드를 띄워 연산을 분산할 수 있습니다. (Java의 Thread와 유사)
  2. 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