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

김명기님의 프로필 이미지

작성한 질문수

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

MVC 패턴 - 적용

request.setAttribute 관련하여 질문 드립니다.

23.01.19 20:37 작성

·

2K

2

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

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

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

[질문 내용]
안녕하세요. 강의 듣다가 질문 사항이 있어 글 남깁니다.

위 코드는 회원 가입을 하고, 그 결과를 보여주는 servlet 클래스입니다.

@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {

    private MemberRepository memberRepository = MemberRepository.getInstance();

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        String username = request.getParameter("username");
        int age = Integer.parseInt(request.getParameter("age"));

        Member member = new Member(username, age);
        memberRepository.save(member);

        // Model에 데이터 보관
        request.setAttribute("member", member);

        String viewPath = "/WEB-INF/views/save-result.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request, response);

    }
}

저는

  1. request 객체를 통해 회원 정보(이름, 나이)가 서버에 전달됨.

  2. 해당 정보를 통해 비즈니스 로직(회원가입)이 실행됨.

  3. response 객체를 통해 실제 회원 가입된 정보(Member 객체)를 view(jsp)에 전달.

  4. jsp가 전달 받은 정보를 참고하여 jsp 작성을 완료하여 클라이언트에게 화면을 보여줌.

이런 로직으로 진행될 것으로 생각했습니다.

 

그런데 제 생각과는 다르게, jsp에 데이터를 전달하는 model의 역할을 response 객체가 아닌 request 객체가 하는지 궁금증이 생겼습니다.

 

제가 추측하기로는 dispatcher를 통해 서버 내부에서 jsp를 호출하는 과정이 추가적으로 진행되기 때문에, 그 호출 과정에서 request 객체가 사용되는 것 같은데,

 

제 추측이 맞는지, 틀렸다면 request 객체가 model 역할을 하는 것은 어떤 이유 때문인지 질문 드립니다.

 

감사합니다.

답변 2

6

김영한님의 프로필 이미지
김영한
지식공유자

2023. 01. 22. 19:50

안녕하세요. 김명기님

객체의 용도에 이유가 있습니다.

request 객체는 요청의 처리부터 끝날때 까지 사용자의 파라미터 + 내부에서 사용하는 파라미터를 저장하는 역할을 합니다.

response 객체는 응답을 만들어서 생성하는데 사용됩니다.

감사합니다.

0

babobabo님의 프로필 이미지

2023. 03. 19. 14:58

같은 생각했는데 글보고 해결되었습니다.! 감사합니다.

혹시 viewPath의 리터럴값은 @value 쓰는것처럼 숨기는게 좋나요?

김영한님의 프로필 이미지
김영한
지식공유자

2023. 03. 23. 22:05

이 부분은 상황에 따라서 다릅니다.

해당 경로가 자주 변경될 일이 없다면 코드에 직접 사용해도 괜찮습니다.

감사합니다.