소켓통신 구분

image.png

어떻게 애플리케이션은 운영체제의 소켓을 통해 데이터를 전달할 수 있을까?

사용자가 요청을 보내면, 서버는 OSI 7계층 관점에서 아래에서 위로 데이터를 전달받는다. 클라이언트가 보낸 요청은 전송 계층에서 TCP 3-way handshake를 통해 연결을 수립한다. 연결이 완료되면 커널 모드에서 유저 모드로 전환되며, 사용자 요청은 소켓을 통해 애플리케이션으로 전달된다.

JVM에서 동작하는 Tomcat은 요청에 따라 쓰레드를 생성하여 운영체제의 소켓 API를 호출한다. 이를 통해 네트워크 데이터를 송수신하며 클라이언트와 통신한다.

만약 TLS(Transport Layer Security)가 활성화된 경우, JVM 내에서 JSSE(Java Secure Socket Extension)와 같은 암호화 라이브러리를 사용하거나 Tomcat의 OpenSSL과 같은 네이티브 라이브러리를 활용하여 TLS 핸드셰이크를 진행한다. 이를 통해 클라이언트와 서버 간의 데이터 전송이 암호화됩니다.

Tomcat은 클라이언트의 요청 데이터를 수신한 후, Spring 애플리케이션의 DispatcherServlet으로 전달하여 비즈니스 로직 처리를 시작한다.

image.png

strace -f -e trace=network -p <PID>

리눅스에서 strace 명령어로 실행중인 spring boot의 시스템콜을 확인 할수 있다.