-
ServerSocket의 내부 동작 살펴보기: TCP 연결 설정의 로우레벨 이해개발 2024. 7. 8. 20:21
들어가며
WAS 미션을 진행하며 생긴 ServerSocket의 동작 원리에 대한 궁금증을 해결하기 위해 내부 구조를 확인해보았습니다.
궁금증
HTTP 요청을 처리하는 중 /index.html을 접속했을 때 멀티 스레딩을 구현하지 않아도 다수의 요청이 동시에 들어오는 것을 모두 처리하는 것에 의문이 들었습니다.
SeverSocket을 생성하면 발생하는 일
new ServerSocket(port)를 하면 먼저 해당 port에 서버소켓을 바인드 시스템 콜을 호출합니다. 그 다음 백로그에 크기만 큼 SYN와 accept 큐의 합계를 제한합니다. 클라이언트가 서버에 요청을 보내면 SYN 큐로 들어가고 3-way handshaking 가 완료되면 accept 큐에 들어가 서버의 accept를 기다립니다.
accept() 를 하면 발생하는 일
ServerSocket.accept() 를 실행하면 accept 큐에 있는 conn 을 꺼내와 clientSocket을 반환합니다.
그렇기 때문에 멀티 스레딩을 구현하지 않아도 여러 요청이 동시에 들어오더라도 내부 구현된 큐에 의해 요청을 처리할 수 있게 됩니다.
하지만
백로그를 통해 여러 요청을 처리할 수 있지만 메모리와 CPU 같은 시스템 리소스를 고려하지 않으면 나쁜 성능을 보일 수도 있습니다.
따라서
ServerSocket의 내부 동작을 공부하면서 WAS가 어떻게 HTTP request를 처리할 수 있는지 알 수 있었습니다. 또한, 시스템의 환경을 고려해 설정을 최적화한다면 효율적인 서버를 구성할 수 있다는 것을 알게되었습니다.
혹시라도 틀린 내용이나 추가적인 내용이 있다면 댓글로 알려주세요 :3
'개발' 카테고리의 다른 글
내가 만든 was, Maven에 올렸지 (0) 2024.07.20 Java 프로그램 바이트 코드를 분석해보자 (0) 2024.07.10 Buffered I/O Steram vs I/O Stream: 커널 영역 접근과 성능 비교 (0) 2024.07.08 [LiveStreamingOnWebRTC] 스트리밍 서비스를 WebRTC로 구현해보기 (0) 2024.05.02 WebRTC 찍어먹기 (0) 2024.05.01