개요이전부터 Node가 I/O가 많은 환경에 강하다는 말을 자주 듣곤 했다. 이유를 물으면 나는 항상 이벤트 루프 때문에 I/O에 강하다라고 답변했는데, 이벤트 루프가 무엇을 어떻게 해주길래 I/O에 강한지에 대해서는 설명하지 못하였다. 이번 기회에 Node가 I/O에 강한 이유에 대해 깊이 파고들고자 한다.비교 대상전통적인 Java 서버인 Tomcat이나 Spring MVC 같은 환경과 Node.JS를 비교하며 설명하고자 한다. Java 서버는 어떻게 동작할까Java로 작성된 서버에서는 클라이언트 요청이 오면 스레드풀에서 스레드 하나를 꺼내 그 요청을 처리한다. 스레드 생성 비용이 워낙 크기 때문에, 요청마다 매번 스레드를 새로 만들지는 않고 미리 만들어둔 스레드풀에서 빌려쓰고 반납하는 구조이다. 문제..
들어가며 웹 서버에 요청이 오면 스레드를 할당받아 정해진 로직을 수행하고 응답을 보낸다. 하지만 이 단순해 보이는 과정 뒤에는 OS 내부에서 NIC, 커널, 유저 영역을 넘나드는 복잡한 여정이 숨어있다. 하나의 요청이 어떻게 네트워크를 타고 들어와 애플리케이션까지 전달되고, 다시 응답이 클라이언트에게 돌아가는지, 이 글에서는 TCP 연결이 맺어지는 순간부터 데이터가 오가는 과정까지를 커널 수준에서 파헤쳐본다.TCP 연결, 3 way handshake 내부알다시피 TCP는 3-way handshake 과정을 통해 연결을 맺는다. 그렇다면 이 과정에서 OS 내부에서는 어떤 일이 일어날까? 첫 번째로 클라이언트는 TCP 연결을 위해 SYN 패킷을 서버로 보낸다. 해당 패킷이 서버에 도착하면 가장 먼저 네트워크..