• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

서블릿이 제공하는 HttpSession 질문 있습니다.

24.05.15 17:32 작성 조회수 89

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요

스프링 부트 내에는 서블릿 컨테이너와 스프링 컨테이너가 있다고 알고 있습니다.

또한, 서블릿 컨테이너는 스프링 컨테이너 외부에 존재하기 때문에 bean에 직접 접근할 수 없습니다.

그리고 DB에 직접 접근하여 요청을 처리하는 것은 스프링 컨테이너 내에서 이루어집니다.

 

이때, 궁금한 점이 있습니다.

1."서블릿이 제공하는 HttpSession"이라는 개념이 잘 이해가 안됩니다.

서블릿이 제공하는 HttpSession은 스프링 컨테이너에서 bean으로 등록되어 사용되는게 맞나요?

아니면 서블릿 컨테이너에서 관리하는 것이 HttpSession인가요?

 

  1. 서블릿 컨테이너, 톰캣, WAS 그리고 스프링 컨테이너에 대해서 고민하다 보니
    HttpServletRequest가 헷갈립니다



    HttpServletRequest는 서블릿이 HTTP 요청 메시지를 파싱한 결과를 담은 객체인데
    그러면 HttpServletRequest는 서블릿 컨테이너 안에 존재하는 서블릿이 스프링 컨테이너에게 넘겨주고, 스프링 컨테이너는 HttpServletRequest를 받아서 스프링 컨테이너 안에서 처리를 하는 건가요??

    아니면, 스프링 부트 내에는 서블릿 컨테이너가 있고 스프링 컨테이너가 존재하기 때문에 각각의
    그냥 아래와 같이 작성하면 서블릿 컨테이너 내에 존재하는 HttpServletRequest 객체를 처리한 것인가요?

    설명 부탁드립니다. 감사합니다

    스크린샷 2024-05-15 오후 5.29.16.png

답변 1

답변을 작성해보세요.

0

안녕하세요. blackhole124594님

1. “서블릿이 제공하는 HttpSession”이란?

서블릿 컨테이너(Tomcat, Jetty 등)는 HttpServletRequest와 HttpSession을 관리합니다. HttpSession은 클라이언트와 서버 간의 세션을 관리하기 위해 사용되는 객체로, 서블릿 컨테이너가 이를 생성하고 관리합니다.

서블릿 컨테이너에서 관리하는 HttpSession: HttpSession 객체는 서블릿 컨테이너에서 관리됩니다. 세션을 생성하고 유지하는 것은 서블릿 컨테이너의 책임입니다.

스프링 컨테이너와의 관계: 스프링 컨테이너는 서블릿 컨테이너와 별개로 존재하며, 주로 애플리케이션의 비즈니스 로직을 관리하는 빈(bean)들을 관리합니다. 그러나 스프링 MVC를 사용할 때, 서블릿 컨테이너에서 생성된 HttpServletRequest와 HttpSession 객체를 스프링 컨테이너에서 사용할 수 있습니다.

 

2. HttpServletRequest와 스프링 컨테이너

HttpServletRequest의 생성과 관리: HttpServletRequest 객체는 HTTP 요청이 들어올 때 서블릿 컨테이너가 생성합니다. 이 객체는 HTTP 요청 메시지를 파싱한 결과를 담고 있습니다.

HttpServletRequest의 전달: 서블릿 컨테이너가 HttpServletRequest 객체를 생성하면, 스프링 MVC에서는 이를 받아 컨트롤러 메서드로 전달합니다. 예를 들어, 사용하신 코드에서는 HttpServletRequest 객체가 sessionInfo 메서드의 인자로 전달되고 있습니다.

3. 서블릿 컨테이너와 스프링 컨테이너의 관계

• 서블릿 컨테이너와 스프링 컨테이너는 별개로 존재합니다. 서블릿 컨테이너는 HTTP 요청을 처리하고 서블릿을 관리하는 역할을 하며, 스프링 컨테이너는 애플리케이션의 비즈니스 로직을 관리하는 빈들을 관리합니다.

• HTTP 요청이 들어오면 서블릿 컨테이너가 이를 처리하고, 스프링 디스패처 서블릿을 통해 스프링 컨테이너에 전달합니다. 스프링 컨테이너는 비즈니스 로직을 처리하고, 결과를 다시 서블릿 컨테이너에 반환하여 응답을 클라이언트에게 전송합니다.

 

정리하자면, HttpSession, HttpServletRequest 객체는 서블릿 컨테이너가 관리하며, 스프링 컨테이너에서는 이를 받아서 사용하는 것입니다.

감사합니다.