작성
·
51
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
여기에 질문 내용을 남겨주세요.
controllerV3를 만들때 파라미터로 Map<String,String>으로 전해주시는데 이것은 V2에서는 사용안하는 response를 없애기 위한것인가요?
그렇다면 파라미터로 그냥HttpServletRequest requestt만 받게 하면 안되나요?
답변 2
0
안녕하세요. 재우양님
ControllerV3
를 만들 때 파라미터로 Map<String, String>
을 전달하는 것은 HttpServletRequest
와 HttpServletResponse
와 같은 서블릿 기술에 대한 컨트롤러의 종속성을 제거하기 위함입니다.
구체적으로 설명하면 다음과 같습니다:
Map<String, String>
을 사용하는 이유:
ControllerV2
까지는 컨트롤러가 HttpServletRequest
와 HttpServletResponse
를 직접 파라미터로 받았습니다. 이로 인해 컨트롤러는 서블릿 기술에 직접적으로 의존하게 되었습니다.
ControllerV3
의 핵심 목표는 이러한 서블릿 종속성을 제거하여 컨트롤러의 코드를 더욱 단순하게 만들고, 테스트 작성을 용이하게 하는 것입니다.
HttpServletRequest
객체를 통해 직접 파라미터를 조회하는 대신, 프론트 컨트롤러(FrontControllerServletV3
)가 HttpServletRequest
로부터 파라미터 정보들을 미리 추출하여 Map<String, String>
형태로 변환한 다음, 이 paramMap
을 ControllerV3
로 넘겨줍니다. 이렇게 함으로써 ControllerV3
는 서블릿 기술을 전혀 몰라도 동작할 수 있게 됩니다.
파라미터로 HttpServletRequest request
만 받으면 안 되는 이유:
만약 HttpServletRequest request
를 여전히 파라미터로 받게 된다면, ControllerV3
는 여전히 서블릿 기술에 종속되게 됩니다. 이는 ControllerV3
를 설계한 주요 목표인 서블릿 종속성 제거와 모순됩니다.
ControllerV3
는 "서블릿 기술을 전혀 사용하지 않는다"는 특징을 가지며, 이 덕분에 "구현이 매우 단순해지고, 테스트 코드 작성이 쉽다"는 장점을 얻습니다. HttpServletRequest
를 받으면 이러한 장점들이 사라지게 됩니다.
요약하자면, Map<String, String>
의 사용은 HttpServletResponse
뿐만 아니라 HttpServletRequest
를 포함한 모든 서블릿 관련 객체로부터 컨트롤러를 분리하여 더 유연하고 테스트하기 쉬운 구조를 만들기 위한 설계 결정입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
재우양님, ControllerV3에서 Map<String, String>
을 파라미터로 사용하는 이유에 대해 질문해주셨군요.
ControllerV3에서 Map<String, String>
을 사용함으로써 HTTP 요청의 파라미터를 관리하려는 디자인적인 결정이 있습니다. 이는 HTTP 요청 객체의 의존성을 줄이기 위한 방법으로, 더 유연하고 테스트하기 쉬운 코드를 작성할 수 있게 합니다. 단순히 HttpServletRequest
를 사용하는 것 대신에 Map
타입의 파라미터를 사용하게 되면, 테스트 시에도 쉽게 사용할 수 있고, 코드의 유연함과 모듈성을 높이는 데 도움이 됩니다.
하지만, 직접적으로 HttpServletRequest
를 사용하지 않는 이유는 객체에 대한 의존성을 줄이고, 프레임워크 레벨의 객체에 대한 직접적인 접근을 최소화하기 위해서입니다. 이렇게 함으로써 MVC 패턴에서의 컨트롤러가 비즈니스 로직과 프레젠테이션 로직을 더욱 분리할 수 있으며, 유지보수가 더욱 용이해집니다.
추가 설명과 유사한 사례를 확인할 수 있는 게시물을 추천해드립니다. 이는 ControllerV3와 관련한 MVC 구조 간 이해를 넓히는데 도움을 줄 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.