[Java] Controller 1개는 수십개의 요청을 어떻게 처리하는가 - 사용자의 요청과 스레드의 동작

Hyo Kyun Lee·2025년 1월 17일
0

Java

목록 보기
78/87

이 글과 같이 보면서 이해한다.

1. 개요

금번 발생한 세션 불일치 문제, 인증에 관한 전역처리를 전체적으로 훑어보았다. 그러면서 요청에 대해 내부적으로 어떠한 프로세스로 진행이 되는지 알아보았다.

일단 알아보면서 항상 느끼는 것이지만, os나 was나 스레드 동작 등 전산학이 상당히 많이 연결이 되고 원리가 비슷하다는 것을 많이 볼 수 있었다. 왜 전산학을 공부해야 하는지 다시 한번 느끼게 된 순간이었다.

2. 사용자 다수 요청에 대한 컨트롤러의 반응

기본적으로 요청당 스레드가 발생하는데, 스레드 생성에 수반되는 여러 비용과 자원할당이 크기 때문에 요청 당 하나의 스레드가 발생한다. 스레드는 상태정보를 저장하지 않고 서블릿에 요청을 전달하는 stateless의 성격을 갖추고 있다.

다만 요청을 컨트롤러에 전달할때(mvc기준) Controller 객체 하나를 생성하면 객체 자체는 Heap에 생성되지만, 해당 Class의 정보는 Method Area(또는 Permanent Area)에 저장되어 공유된다. 결국 힙 영역이던 메소드 영역이던 모든 쓰레드가 객체의 Binary Code 정보를 공유하므로 하나의 컨트롤러 객체만 공유하게 된다.

서블릿은 하나의 클래스이다. 이 클래스를 이용해 개발자가 웹서버 통신을 위한 환경설정이나 관리를 수동적으로 하지 않고, 편리하고 간편하게 할 수 있는 방법을 제공하고 이 서블릿들을 통제하는 공간이 서블릿 컨테이너이다.

서블릿에 전달된 요청은 그 후 핸들러 어댑터 등을 통해 컨트롤러를 찾아 비즈니스 로직을 수행한다.

또한 서블릿은 소켓을 생성하여 웹서버와 소통하고, 내부적으로 생명주기를 통해 비즈니스 로직을 진행할 것이며 개발자는 이를 어떻게 활용할지만 고민하면 된다.

이때 우리가 유념해야할 점은, 같은 전역처리라도 서블릿에 대한(인터셉터 등) 생명주기 로직에 의한 전역처리와 was에 대한 전역처리는 발생시점과 관할이 다르므로 이를 고려하면서 적용해야 할 것이다.

3. 참고자료

☆☆사용자 요청에 대한 was 등의 반응 - https://sigridjin.medium.com/servletcontainer%EC%99%80-springcontainer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80-626d27a80fe5

핸들러 - https://dding9code.tistory.com/m/41

0개의 댓글

관련 채용 정보