nodejs03 asyncprogramming
- Node.js는 비동기 프로그래밍을 기본으로 하며, 콜백 함수를 활용하여 응답을 기다리지 않고 다음 작업을 처리합니다. 🔄
- 이벤트 루프를 통해 싱글 스레드 방식으로 동작하여, 마치 진동벨처럼 요청을 처리하고 결과가 준비되면 콜백으로 알려줍니다. 🔔
- CPU, 램, 디스크, 네트워크 등 입출력 장치 간 속도 차이가 커서, 느린 I/O 작업 시 블로킹 방식은 성능 저하를 유발합니다. 🐌
- 블로킹 코드는 I/O 작업 완료까지 대기하여 병목 현상을 일으키지만, 넌블로킹 코드는 콜백 함수를 넘겨주고 즉시 다음 코드를 실행합니다. 🚦
- Apache와 같은 쓰레드 기반 서버는 동시 접속자 증가 시 메모리 사용량이 늘고 성능이 저하되지만, Nginx와 같은 이벤트 루프 기반 서버는 효율적입니다. 📈
- Node.js 개발 시, 시간이 오래 걸리는 작업을 동기적으로 처리하면 전체 서버가 멈추는 안티패턴이 발생하므로 비동기 처리가 필수입니다. 🚫
- 개발자는 쓰레드를 직접 관리할 필요 없이, Node.js 플랫폼이 이벤트 루프를 통해 비동기 태스크와 콜백을 효율적으로 처리합니다. 🛠️
- 출력 스트림(예:
response 객체)을 파라미터로 전달하여, 비동기 작업 완료 시 해당 스트림에 직접 결과를 쓰는 방식으로 블로킹을 방지합니다. 📤
- 비동기 코딩은 직관적이지 않아 복잡해 보일 수 있지만, Node.js의 성능과 확장성을 위해 반드시 익혀야 할 핵심 개념입니다. 🧠