Spring/Spring MVC

Hello!! Servlet

민철킹 2021. 4. 3. 13:26

start.spring.io/

먼저 프로젝트부터 생성하자.

서블릿을 사용할 것이지만 스프링을 사용하는 이유는 스프링 부트내부에 톰캣 서버도 내장하고있고 설정이 편리한 부분도 있기 때문에 스프링 프로젝트를 만들고 그 안에서 서블릿을 사용

 

Packaging은 War로 설정해야 JSP를 사용할 수 있음.

 

라이브러리 설정과 환경 설정부분은 생략하겠음.

 

www.postman.com/downloads/

 

Download Postman | Try Postman for Free

Try Postman for free! Join 13 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

postman이라고 api를 테스트하는 툴인데, 서버개발을 할때 매우 편리한 기능들을 포함하고 있다.


JSP를 통해 강의평가 웹사이트를 만들어 본 적이있었는데 그때는 직접 톰캣을 설치하고 그 위에 서블릿 코드를 빌드하여 올린후, 서버를 실행하는 매우 번거로운 과정을 통해 개발을 했었다.

서블릿과 스프링 부트는 관련이 없지만, 스프링 부트는 톰캣 서버를 내장하고 있으므로 앞선 번거로운 과정없이 서블릿 코드를 스프링 부트 프로젝트 안에서 편리하게 실행할 수 있음.

 

스프링 부트 서블릿 환경 구성

스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan을 지원한다.

  • 스프링이 자동으로 현재 패키지를 포함해서 하위 패키지 안에 있는 서블릿 코드를 모두 찾아서 실행시켜준다.

이제 실제 동작하는 서블릿 코드를 만들자

@WebServlet 서블릿 애노테이션

  • name: 서블릿 이름
  • urlPatterns: URL 매핑

서블릿의 이름은 helloServlet이고 /hello로 접속하면 아래의 service로직이 실행된다.

서블릿은 HttpServlet을 상속받아야함. 즉 우리가 localhost:8080/hello 주소로 접속하면 콘솔창에 해당 출력문이 출력될 것이다.

service가 잘 동작하고 있는 것을 확인할 수 있다.

 

서블릿은 query parameter를 굉장히 편리하게 읽는 기능을 제공한다.

해당 url로 접속한다고 생각해보자. url에서 query parameter는 username=kim이라는 부분이다. 이를 어떻게 처리할 수 있을까?

이와 같이 getParameter메소드를 사용하여 필드명을 지정해주면 request를 통해 들어온 값을 읽어올 수 있다. 이는 앞에서 서블릿에 대해 배울 때 봤던 http 메시지와 연관되어 있는데, http 메시지를 서블릿이 읽어오는 형태로 진행된다.

서버를 구동하고 해당 url로 접속해보면 username을 받아와서 출력한 것을 확인할 수 있다.

 

이번에는 request를 처리하고 response를 클라이언트로 보내보자.

setContentType과 setCharacterEncoding을 통해 반환되는 값을 설정해주는데 이는 HTTP 메시지의 헤더부분에 들어간다. getWriter를 통해 실제 body부분에 출력될 값을 작성해주는 것이다.

이제 localhost:8080/hello?username=kim으로 접속하면 request가 들어와 파라미터로 들어온

username이 콘솔 창에 입력되고 반환되는 respone로 hello kim이라는 메시지가 html body부분에 작성되어 화면에 나타날 것이다.

개발자 도구의 Network탭으로 가서 더 자세히 살펴보면

현재 응답 url과 GET / POST 중 어떤 것인지 또한 우리가 앞서 설정한 Content-Type정보도 확인할 수 있다. Query String Parameters로 username은 kim이라는 값이 들어온 것도 확인 가능

 

HTTP 요청 메시지 로그로 확인

application.properties에 위와 같이 코드를 추가하면 요청을 받았을 때 콘솔 창에 HTTP 요청 메시지를 출력할 수 있다. 다시 해당 url로 접속해보면

위와 같이 메시지 정보들이 로그로 남는 것을 확인할 수 있다.

하지만 운영서버에 이렇게 모든 요청 정보를 다 남기면 성능저하가 발생할 수 있으므로, 개발 단계에서만 적용하자.

 


서블릿 컨테이너 동작 방식

내장 톰캣 서버 생성

Content-Length와 같은 부가적인 정보는 WAS가 자동으로 생성해줌

 

welcome page인 index.html은 main안에 webapp이란 폴더를 만들고 그안에 생성한다.

 

반응형

'Spring > Spring MVC' 카테고리의 다른 글

HTTP 요청 데이터 GET / POST  (0) 2021.04.04
HTTPServletRequest  (0) 2021.04.04
자바 백엔드 웹 기술 역사  (0) 2021.04.03
HTML, HTTP API, CSR, SSR  (0) 2021.04.02
동시 요청 - Multi Thread  (0) 2021.04.02