널널한 개발자 선생님의 네트워크 강의를 듣는데 다음과 같은 그림을 많이 그리셨다
화살표로 가리키고 있는 소켓 부분이 커널 모드에서 추상화된 TCP/IP 인터페이스를 구현한 후 TCP(PORT)/IP(ip address)에 바인딩 된 부분이다.
저 부분을 통해 외부 네트워크와 I/O 작업을 수행하게 된다!

Nodejs로 웹 개발을 하는데 TCP/IP 통신을 어떻게 하는 지 궁금했다.
그럼 내가 만드는 Nodejs Express 프레임워크도 유저 모드에서 커널 모드에 추상화된 TCP/IP 인터페이스를 가져와 구체화 시킨 후 실행하게 될 것인데 어떻게 구현이되고 기다리고 있는 지 궁금했다.
또한 서버를 끄기 전까지 특정 포트(Ex 3000)에 매핑되어 기다리고 있는 것도 궁금했다.
// index.js
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => { // 여기가 의심스럽다
console.log(`Example app listening on port ${port}`)
})
node index.js
알림을 받게 된다.Express의 app.listen() 메서드는 몇 가지 단계를 캡슐화한다.
app.listen 메서드는 http 객체를 생성한 다음 특정 포트와 IP 주소에서 TCP 연결을 수신하도록 구성한다.
즉, 클라이언트가 해당 포트에 연결을 요청하고 HTTP 요청을 보낼 때 서버가 해당 HTTP 요청을 수신하고 처리하여 응답을 보내는 것이다.

server.listen은 1~3단계를 캡슐화 한다.res.send(), res.json() 과 같은 응답을 통해 소켓을 닫거나 res.send로 소켓을 직접 닫는다.listen의 기본 코드는 운영 체제의 TCP 스택 내부에 있다.인터페이스로 Nodejs http 서버 객체를 사용하는 것이다.기본 운영 체제 API와 통신하여 해당 대상 호스트의 실제 TCP 스택에 도달하게 되고,수신 모드로 전환하여 해당 대상 IP 주소와 포트에 새로 들어오는 클라이언트 연결에 대한 알림을 받을 수 있도록 하기 위한 것이다!
결국 socket.io를 사용하지 않더라도 이미 소켓 통신을 하고 있는 것이다!
구현되어 있는 예시 코드를 찾아보고 이해해 보고 싶은데 아직 부족한 부분이 많아 V8 엔진 코드에 Socket Binding 하는 GDB-Debug 부분만 링크해 놓았습니다!
V8 엔진 코드.cc V8 엔진 코드.h
아직 많이 부족하기에 어디서 관련 로직이 수행되고 있는지 코드를 보고 찾아가는 데는 어려움을 겪고 있습니다 :(
관련 레퍼런스 부분이 있다면 알려주시면 감사하겠습니다!
잘 못된 부분도 집어주세요 :)
libuv, event loop (in Node js)
What does the .listen() method in express look like?
[Express] app.listen 과 http.createServer(app) 의 차이