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

이성훈님의 프로필 이미지
이성훈

작성한 질문수

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

단순하고 실용적인 컨트롤러 - v4

FrontControllerServletV4 model 질문

해결된 질문

작성

·

367

0

=========================================

[질문 내용]
FrontControllerServletV4 model map이 참조 변수로 model값을 빼서 render메소드를 호출에 view에 값을 넘기는건 알겠습니다. 근데 frontcontroller는 싱글톤 객체이고 메소드에 동시 접근한다고 가정하였을때 model 변수에 동시성 문제가 생기지 않는 이유를 알고싶습니다. 아무래도 동시에 save를 한다고 가정하면 model 변수를 동시에 참조하여 문제가 생길꺼같은데 이렇게 설계한 이유를 알고싶습니다.

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

FrontControllerServletV4의 model 변수에 대한 동시성 문제에 대해 궁금하신 거군요.

FrontControllerServletV4는 싱글톤 객체이기 때문에 여러 요청이 동시에 들어온다고 가정해도 해당 객체는 하나만 생성되어 공유됩니다. 개별 요청마다 다른 스레드가 처리되지만, model 변수는 각 스레드마다 새로운 객체로 생성됩니다. 이렇게 되면 각 스레드가 서로 다른 model 객체를 사용하게 되므로 동시성 문제가 발생하지 않습니다.

또한, FrontControllerServletV4의 model 변수는 메소드 내에서만 사용되기 때문에 메소드가 종료되면 해당 model 객체는 가비지 컬렉터에 의해 제거됩니다. 따라서 다른 요청과는 독립적인 객체로 동작하므로 동시성 문제가 발생하지 않습니다.

이렇게 설계된 이유는 각각의 요청이 독립적으로 처리되어야 하기 때문입니다. 각 요청마다 다른 model 객체를 사용함으로써 상호간에 영향을 미치지 않고 개별적으로 데이터를 처리할 수 있습니다.

만약 동시에 save를 수행한다면, 해당 요청에 대한 처리는 각각의 스레드가 담당하므로 서로 영향을 주지 않습니다.

다른 질문이 있으시면 언제든지 물어보세요. 즐거운 학습 되세요!

이성훈님의 프로필 이미지
이성훈

작성한 질문수

질문하기