Spring/[인프런 김영한 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술]

[인프런 김영한 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술] 서블릿

h2boom 2024. 9. 30. 20:07

서블릿

  • 서블릿 : 클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술이다.
    • 스프링 MVC에서는 Controller로 사용된다.

 

  • @ServletComponentScan : 서블릿을 찾아서 자동으로 등록해주는 역할
  • @WebServlet : 서블릿 어노테이션
    • 옵션 - 서블릿 이름 지정하는 name, url 매핑을 위한 urlPattern 등이 있다.
      => name, urlPattern 모두 중복되면 안된다.

 

  • HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 service() 메소드를 실행한다.

 

  • 서블릿을 만들 때는 항상 HttpServlet을 상속받아야 한다.
    • protected service() 메소드를 오버라이딩 해야한다.

 

logging.level.org.apache.coyote.http11=trace
  • application.properties 설정으로 추가
    • HTTP 요청 메시지를 로그로 확인 가능 (성능 저하가 발생할 수 있기에 개발 단계에서만 사용하는 것이 좋음)

 

  • 서블릿 컨테이너 동작 방식
    1. 스프링 부트 실행
    2. 스프링 부트가 내장 톰켓 서버를 생성
    3. 톰켓 서버의 서블릿 컨테이너로 서블릿 생성
    4. HTTP 요청 메시지를 기반으로 request, response 객체 생성
    5. 싱글톤 서블릿 객체를 호출
    6. service() 호출, request, response 객체를 넘겨준다.
    7. 서블릿이 종료될 때 response 객체 정보를 기반으로 HTTP 응답 생성

 

  • Content-Length와 같은 속성은 웹 애플리케이션 서버가 자동으로 생성해준다.

 

  • 기본 URL 입력 시 나오는 화면은 welcome 페이지이다.
    • main/webapp/index.html 파일을 위치시켜두면 기본 url 입력 시 index.html 페이지가 열린다.

HttpServletRequest

  • HttpServletRequest : 서블릿에서 HTTP 요청 메시지를 편리하게 사용할 수 있도록 파싱하고 HttpServletRequest 객체에 담아서 제공한다.

 

//HTTP 요청 메시지
POST /save HTTP/1.1  //START LINE
Host: localhost:8080  //헤더
Content-Type: application/x-www-form-urlencoded   //헤더

username=kim&age=20 //바디
  • HTTP 요청 메시지는 START LINE, 헤더, 바디로 구분된다.
    • START LINE - HTTP 메소드, URL, 쿼리 스트링, 스키마, 프로토콜

 

//저장
request.setAttribute(name, value)

//조회
request.getAttribute(name)

//세션 관리
request.getSession(create: true)
  • HttpServletRequest는 임시 저장소, 세션 관리 기능 등을 제공한다.

HTTP 요청 데이터

  • HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법
    • GET - 쿼리 파라미터
      • ex) /url?username=kim&age=10
      • 검색 필터, 페이징 등에서 많이 사용하는 방식
      • 메시지 바디 없이 URL의 쿼리 파라미터에 데이터를 포함해서 전달한다.
    • POST - HTML Form
      • HTML Form의 경우 content-type은 application/x-www-form-urlencoded
      • 메시지 바디에 쿼리 파라미터 형식으로 전달한다.
    • HTTP message body에 데이터를 직접 담아서 요청
      • HTTP API에서 주로 사용 (JSON, XML, TEXT)
      • 데이터 형식은 주로 JSON 형식

 

  • GET - 쿼리 파라미터 방식
    • 쿼리 파라미터를 보낼 때 URL에 보낼 때 ?로 시작하고 추가 파라미터는 &로 구분한다.
    • username=hello&username=kim과 같이 파라미터 명은 하나인데 값이 중복인 경우
      • getParameterValues()를 사용하면 배열 형태로 데이터를 가져올 수 있다.
      • getParameter()는 단 하나의 값만 있을 때 사용해야 한다. (중복인 경우 첫번째 값을 반환)

 

  • HTTP 요청 데이터 - POST HTML Form
    • 꼭 content-type을 application/x-www-form-urlencoded로 지정해줘야 한다.
    • GET - 쿼리 파라미터 형식과 동일하므로 쿼리 파라미터 조회 메소드를 그대로 사용
      • getParameter()로 메시지 바디의 데이터를 가져올 수 있다.
    • POST 방식만 사용 가능

 

  • getParameter()는 쿼리 파라미터 형식의 데이터를 가져올 때 GET 방식과 POST HTML Form 방식에서 모두 사용할 수 있다.

 

  • HTTP 요청 데이터 - API 메시지 바디 JSON
    • content-type : application/json
    • JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환하려면 Jackson, Gson 같은 JSON 변환 라이브러리가 필요하다.
      • Spring MVC에서 Jackson 라이브러리(ObjectMapper) 제공
ServletInputStream inputStream = request.getInputStream();
String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
  • getInputStream()으로 메시지 바디를 바이트 코드로 가져온 후 copyToString()으로 문자열로 변환하는 작업을 통해 메시지 바디를 가져올 수 있다.

HttpServletResponse

  • HttpServletResponse 역할
    • HTTP 응답 메시지 생성
    • HTTP 응답코드 지정
    • 헤더 생성
    • 바디 생성

 

  • HttpServletResponse가 제공하는 편의 기능
    • Content-Type
    • Cookie
    • Redirect

 

  • HTTP 응답 데이터
    • 단순 테스트 응답
    • HTML 응답
      • content-type: text/html으로 지정
    • HTTP API - MessageBody JSON 응답
      • content-type: application/json으로 지정
      • ObjectMapper.writeValueAsString()으로 객체를 JSON 문자열로 변환

출처 : [인프런 김영한 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술]

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

 

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

김영한 | 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습

www.inflearn.com