인프런 커뮤니티 질문&답변

jaden님의 프로필 이미지
jaden

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

동시 요청 - 멀티 쓰레드

멀티 쓰레드와 싱글톤 스레드

작성

·

387

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)

2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)

3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
아니오

[질문 내용]
안녕하세요. 좋은 강의 감사드립니다.
강의를 보다보니 몇 가지 궁금한 부분이 생겼습니다.
동시성 이슈를 해결하기 위해 멀티 스레드를 활용하는 부분은 이해가 되었는데요, WAS 가 리소스를 효율적으로 사용하기 위해 서블릿을 싱글톤패턴을 통해 인스턴스 하나를 사용하는 경우
1. 여러 스레드가 하나의 서블릿 인스턴스에 동시에 접근하여 문제가 발생하지는 않나요?
2. 이런 부분들은 WAS 의 서블릿컨테이너가 알아서 관리를 해주는걸까요?
3. 맞다면 혹시 서블릿 컨테이는 어떤방식으로 관리하는지에 대해 알아볼 수 있는 자료같은게 있을까요?


답변 2

1

안녕하세요. jaden님, 공식 서포터즈 y2gcoder입니다.

혹시 다음 링크(클릭) 를 참고해보시겠습니까?

감사합니다.

0

jaden님의 프로필 이미지
jaden
질문자

답변 감사합니다.
링크를 통해 추측한 내용은 Servlet 은 힙 영역에 저장되어 애플리케이션의 모든 영역에서 접근 가능하고, 각 Thread 들은 Servlet 으로부터 HttpRequest, HttpResponse 정보를 전달받아 stack 영역에 두고 사용함으로써 Thread 사이의 동시성 이슈를 해결할 수 있다고 생각되는데요.

HttpRequest 와 HttpResponse 는 Servlet 에서 생성해서
각 Thread 로 전달할 때 동시성 이슈가 생기지는 않나요?
예를들어 다음과 같은 순서로 진행되는 경우입니다.

1번 요청 진입
Servlet 에서 1번 HttpRequest 객체 생성
(Servlet 이 HttpRequest 를 스레드에 전달하기 전)
2번 요청 진입
Servlet 에서 2번 HttpRequest 객체 생성

위와 같은 경우에는 1번 요청은 무시될 수 있을 것 같다는 생각이 들어서요.


이 또한 마찬가지입니다. 각 스레드마다 서블릿의 service()를 호출하고, service() 내에서 스레드마다 새로운 HttpServletRequest를 생성하기 때문에 스레드끼리 HttpServletRequest를 공유할 일은 없다고 생각합니다.

jaden님의 프로필 이미지
jaden

작성한 질문수

질문하기