스프링 MVC 밑바닥부터 만들어보기1 - 서블릿 탐구하기
흔히들 사용하고있는 SpringMVC는 많은 과정들을 거치면서 발전해 온 결과물이다.
HTTP를 이용한 전송을 하는 웹 애플리케이션에서 어떻게 HTTP를 잘 활용하며 사용할 수 있을까를 고민해서 **서블릿**이 만들어졌다.
이 이후에 효울적인 개발을 위한 디자인 패턴으로 MVC패턴이 나오게 되고 Spring에서 이 패턴을 이용한 SpringMVC를 만들게 된 것이다. 무작위로 사용하던 SpringMVC가 어디서부터 어떻게 만들어졌으며 어떻게 동작하는지를 깊게 이해하고 사용하기 위해서 이 프로젝트를 진행한다.
아무 세팅도 없는 완벽한 기본부터 하면 더 좋겠지만 지금의 기술을 완전히 무시하는 것도 비효울적이라는 생각도 어느정도 들기에 기본 세팅을 SpringBoot를 이용한 세팅으로 진행하고자 한다. 물론 프로젝트를 진행하면서 스프링의 기술을 사용하지는 않을 것이다. 첫 세팅만 스프링을 이용해서 진행하고 내부 코드는 모드 밑바닥부터 하나씩 만들어가며 최종적으로 SpringMVC와 비슷한 형태로 완성해볼려고 한다.
먼저 프로젝트를 생성하자. 필자의 경우 spring initializr를 이용해서 생성했다.
생성되면 제일먼저 Application클래스에 @ServletComponentScan어노테이션을 추가해준다.
@ServletComponentScan
@SpringBootApplication
public class SpringMvcStudyApplication {
public static void main(String[] args) {
SpringApplication.run(SpringMvcStudyApplication.class, args);
}
}
이 어노테이션은 현재 패키지의 하위에 있는 모든 서블릿을 자동으로 등록해주는 어노테이션이다.
다음으로 서블릿을 하나 만들어주자
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// http://localhost:8080/hello?name=servlet
String name = request.getParameter("name");
response.setContentType("text/plain");
response.setCharacterEncoding("utf-8");
response.getWriter().write("study " + name);
}
}
@WebServlet의 name값은 클래스이름에서 첫 자리를 소문자로 지정해주고 urlPatterns는 접근할 url이름을 정해주면 된다. name과 urlPatterns는 다른 서블릿과 겹치면 안되기 때문에 주의해서 작성해주어야한다.
HttpServlet을 상속받고 service메소드를 이용해서 사용할 수 있다.
이렇게 설정하고 실행하면 WAS가 함께 실행되면서 해당 url로 접근했을 때 서블릿을 이용해서 소통할 수가 있다. 톰캣서버는 내부에 서블릿 컨테이너 기능을 가지고 있다. 서블릿 컨테이너 안에 서블릿이 생성이 되고 http데이터를 처리해준다.
service메소드에서 사용한 HttpServletRequest를 이용해서 http데이터를 받아올 수 있고 HttpServletResponse를 이용해서 데이터를 내보낼 수도 있다.
- request.getParameter("name") : url에서 쿼리파라미터로 name이라는 키의 값을 가져온다.
- response.setContentType("text/plain") : 응답데이터의 바디형식을 지정한다.
- response.setCharacterEncoding("utf-8") : 응답데이터의 인코딩 종류를 지정한다.
- response.getWriter().write("study " + name) : 응답데이터의 바디값을 작성한다.
처리내용을 조금 더 자세히 살펴보자면
- http요청메세지가 WAS로 들어온다.
- WAS에서 요청메세지를 가공해서 request, response형식으로 서블릿에 전해준다.
- 서블릿에서 적절하게 사용후 response를 이용해서 WAS로 전송한다.
- WAS가 받은 데이터를 이용해서 http응답메세지를 만들어서 웹으로 전송한다.
스프링에서 사용해보신 분들은 익숙하실수도 있겠지만 http의 데이터를 쉽게 사용하는 과정입니다. 서블릿이 없다면 http에서 넘어오는 데이터들을 일일이 파싱해서 필요한 데이터만 추출하고 분리해서 사용해야겠지만 서블릿을 이용해서 http데이터들을 손쉽게 사용할 수 있게 되었다.
HTTP와 HTTP메세지에 대한 내용을 더 자세히 알고싶다면 아래링크에 정리가 되어있으니 참고하면 좋을것이다.
2022.03.10 - [네트워크] - HTTP 알아보기
HTTP 알아보기
지금 시대에는 인터넷을 사용하지 않는 사람이 없다고 해도 무방할정도로 전 세계의 많은 사람들이 인터넷을 이용해서 통신을 하고있다. 이 통신에서 사용되는 프로토콜중 하나가 바로 HTTP이다
solidbasics.tistory.com
모든 내용은 인프런의 김영한님의 강의를 참고하여 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의
웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -
www.inflearn.com
사용된 전체 코드는 깃허브에서 보실 수 있습니다.
https://github.com/ssung0810/spring_study/tree/main/spring_mvc_study
GitHub - ssung0810/spring_study
Contribute to ssung0810/spring_study development by creating an account on GitHub.
github.com
'Spring > MVC' 카테고리의 다른 글
스프링 MVC 밑바닥부터 만들어보기5 - 서블릿 종속성 제거, Model분리 (0) | 2022.04.20 |
---|---|
스프링 MVC 밑바닥부터 만들어보기4 - 프론트 컨트롤러와 view의 분리 (0) | 2022.04.14 |
스프링 MVC 밑바닥부터 만들어보기3 - MVC패턴의 시작 (0) | 2022.04.14 |
스프링 MVC 밑바닥부터 만들어보기2 - 서블릿과 JSP (0) | 2022.04.11 |
스프링 MVC 여러 종류의 요청매핑 사용하는 방법 (0) | 2022.02.22 |
댓글
이 글 공유하기
다른 글
-
스프링 MVC 밑바닥부터 만들어보기4 - 프론트 컨트롤러와 view의 분리
스프링 MVC 밑바닥부터 만들어보기4 - 프론트 컨트롤러와 view의 분리
2022.04.14 -
스프링 MVC 밑바닥부터 만들어보기3 - MVC패턴의 시작
스프링 MVC 밑바닥부터 만들어보기3 - MVC패턴의 시작
2022.04.14 -
스프링 MVC 밑바닥부터 만들어보기2 - 서블릿과 JSP
스프링 MVC 밑바닥부터 만들어보기2 - 서블릿과 JSP
2022.04.11 -
스프링 MVC 여러 종류의 요청매핑 사용하는 방법
스프링 MVC 여러 종류의 요청매핑 사용하는 방법
2022.02.22