Programming-[Backend]/Spring

[스프링 웹MVC] 2. 프로젝트 생성과 웹서블릿 기본 개념

컴퓨터 탐험가 찰리 2021. 7. 18. 11:10
728x90
반응형


1. 프로젝트 세팅


프로젝트 생성을 위해 스프링부트 initializer 사이트(start.spring.io)로 이동하여 다음과 같이 프로젝트를 GENERATE한다.


IntelliJ에서 초기 세팅은 이전 작성글과 같이 해주면된다.
https://whitepro.tistory.com/298

다만 여기서는 lombok을 기본으로 전제로 프로그램을 작성할 것이기 때문에, 사진과 같이 환경설정에서 AnnotationProcessor를 enabled로 변경해주도록 한다.


혹시라도 lombok 관련 오류가 발생한다면, Settings > Plugins > Lombok이 설치되어 있는지 확인한다.

 



2. 프로젝트 생성



쓰레드를 실행하는 ServletApplication(main method가 있는 파일)에서 @ServletComponentScan 어노테이션을 추가해준다. 이렇게 하면 해당 패키지의 하위 패키지에 있는 서블릿들을 자동으로 스캔해준다. @ComponentScan으로 해당 패키지의 하위 패키지들에 있는 스프링 빈들을 스캔할 수 있는 것과 같은 방식이라고 이해하면 된다.

다음으로 Servlet을 직접 만들어보자.
@WebServlet 어노테이션은 마치 스프링의 @Bean과 같이 해당 객체가 웹 서블릿 객체임을 선언하는 의미이다. name을 지정하는 것은 빈과 같고, 웹을 위한 객체이기 때문에 urlPatterns 속성을 추가로 입력해준다. 유의할 점은 빈이 중복되는 경우 @Qualifier, @Primary 등으로 중복 처리를 한 것과 다르게, name, urlPatterns 속성은 중복되면 안된다. 추가로 urlPatterns 속성을 입력할 때, String 앞에 슬래시 "/"를 넣어주어야 한다는 것도 기억하자.

HttpServlet 클래스를 상속받으면, 대표적으로 사용할 수 있는 service 메서드를 Override할 수 있다. 매핑된 url로 HTTP 요청이 오면, service 메서드가 실행된다. service 메서드의 파라미터들은 앞서 1. 웹 애플리케이션의 이해 글에서 본 것처럼, HttpServletRequest와 HttpServletResponse이다. 즉 브라우저의 요청에 관한 정보는 request 파라미터에 담고, 응답에 대한 정보는 response 파라미터에 담아서 활용한다.

※ [Ctrl + O]를 입력하여 service method를 Override 할 때, protected로 작성된 service 메서드를 불러와야 한다. public으로 된 service 메서드를 불러오면 안된다.(아마 다른곳에서 service 메서드를 못쓰게 막는게 아닐까 싶다..)

 

 

java/hello/servlet/basic/HelloServlet.java

 

1
2
3
4
5
6
7
8
9
10
11
12
@WebServlet(name = "webServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
  @Override
  protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String username = request.getParameter("username");
    System.out.println("username = " + username);
 
    response.setContentType("text/plain");
    response.setCharacterEncoding("utf-8");
    response.getWriter().write("username = " + username + " 입니다.");
  }
}
cs

 

 

서블릿이 HTTP request와 response에 담겨져있는 정보들을 자동으로 파싱하고 만들어주어서 편하게 활용할 수 있게 된다. 예시로 서버를 실행한 뒤, 브라우저에서 url상 쿼리파라미터로 username=charlie라고 전송해보면, request.getParameter 메서드를 통해 해당 파라미터의 value값이 잘 출력되는 것을 확인할 수 있다.

 

브라우저 요청 url에 username=charlie 쿼리파라미터 입력
콘솔창 출력 결과

 

response에도 HTTP 응답 신호의 Header, Body 정보를 담아서 보낼 수 있다. setContentType, setCharacterEncoding를 통해 Header 정보를 담고, getWriter().write()를 통해서 body에 들어갈 정보를 담았다.

 

 

브라우저 출력 화면

 

 

개발자 도구의 Header 정보
개발자 도구 Response 정보. HTML이나 Javascript 코드 등이 아니라 단순 text가 body에 담겨서 전송된 것을 확인할 수 있다.

 

 


HTTP 요청 정보 한번에 보기


HTTP의 요청 정보를 한번에 보고 싶다면, 스프링부트의 Logger 기능을 사용하면 된다. resources -> application.properties에 들어가서 아래와 같이 입력한다.

logging.level.org.apache.coyote.http11=debug


서버를 재시작후 브라우저로 요청을 보내보면 요청 정보가 콘솔에 출력된다. 실제 운영 서버에 적용하면 과부하가 걸릴 수 있으므로 개발 시에만 활용한다.

 




 

3. Welcome Page 만들기

 

 

브라우저에서 요청이 오면 기본 페이지를 보여주도록 하자. 브라우저는 서버의 index.html 파일을 가장 우선적으로 읽도록 되어있다.

 

 


main 패키지 아래에 webapp 디렉토리를 만들고, index.html 파일, basic.html 파일을 만든다. 강의자료의 html 파일을 붙여넣고 서버 실행 후 localhost:8080으로 요청을 보내면, 아래와 같은 화면이 잘 출력되는 것을 확인할 수 있다.

 


참조

1. 인프런_스프링 MVC 1편 - 백엔드 웹개발 핵심 기술_김영한 님 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1

728x90
반응형