ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [스프링 MVC 1] 2. 서블릿
    INFLEARN/스프링 MVC 1편 2021. 10. 16. 23:40

    2. 서블릿

     

    [강의 정리] 김영한님 :: 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

     

     

     

    1. 프로젝트 생성

     

    # IntelliJ 세팅

    • Build Tools : Gradle -> IntelliJ IDEA
    • Lombok plugin 설치
    • Annotation Processors > Enable annotation processing

     

    2. Hello 서블릿

     

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

    • 서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설정하고 해야할 작업들이 많아, 이 강의에서는 톰캣 서버를 내장하고 있는 스프링 부트를 사용하여 서블릿 코드를 실행 
    • @ServletComponentScan : 스프링 부트에서 지원하는 서블릿 자동 등록 애노테이션

    # 서블릿 등록하기

    • @WebServlet : 서블릿 애노테이션 (중복 불가)
      • @WebServlet(name="helloServlet", urlPatterns = "/hello")
      • name : 서블릿 이름
      • urlPatterns : URL 매핑
    • HTTP 요청을 통해 매핑된 URL이 호출되면 서블릿 컨테이너는 다음 메서드를 실행 (단축키 ctrl + O)
      • protected void service(HttpServletRequest request, HttpServletResponse response)
    • localhost:8080/hello?username=word 와 같이 쿼리 파라미터까지 넣어서 실행 가능

    # HTTP 요청 메시지 로그 확인

    • application.properties 파일에 logging.level.org.apache.coyote.http11=debug  추가 하면 로그 확인 가능 (개발계에서만 사용)

    # 서블릿 컨테이너 동작 방식

    • 내장 톰캣 서버 생성
      • 스프링 부트 실행 -> 내장 톰캣 서버 실행
      • 톰캣 서버 (서블릿 컨테이너) -> 서블릿 생성
      • 서블릿 컨테이너 내부에 -> helloServlet 생성
    • HTTP 요청, HTTP 응답 메시지
    • 웹 애플리케이션 서버의 요청 응답 구조
      • HTTP 요청 -> request, response 객체 생성
      • helloServlet 호출 (service 메서드 / request,response 객체 전달)
      • response 객체 정보 HTTP로 응답 생성

     

    3. HttpServletRequest - 개요

     

    # HttpServletRequest 제공 기본 기능

    • start line 정보
    • 헤더 정보
    • 헤더 편리한 정보
      • host, accept-language (locale), cookie, content, ..
    • 기타 정보
      • remote, local

    단축키 ctrl + T (extract method)

     

     

    4. HTTP 요청 데이터 - 개요

     

    # GET - 쿼리 파라미터

    • /url?username=hello
    • 메세지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
    • ex) 검색, 필터, 페이징 등 

    #  POST - HTML Form

    • content-type: application/x-www-form-urlencoded
    • 메시지 바디에 쿼리 파라미터 형식으로 전달 ?username=hello
    • ex) 회원 가입, 상품 주문 등의 HTML FROM

    # HTTP message body

    • HTTP API에서 주로 사용 (JSON, XML, TEXT)
    • 데이터 형식은 주로 JSON 사용 (POST, PUT, PATCH)

     

    5. HTTP 요청 데이터 - GET 쿼리 파라미터

     

    #  URL 쿼리 파라미터 사용해서 데이터 전달

    • username=hello, age=20
      • http://localhost:8080/request-param?username=hello&age=20
    • 전체 파라미터 조회
      • request.getParameterNames().asIterator().forEachRemaining(paramName -> System.out.println(paramName + " = "+ request.getParameter(paramName)));
    • 단일 파라미터 조회 (request.getParameter())
      • String username = request.getParameter("username");
        String age = request.getParameter("age");
    • 복수 파라미터 조회 (request.getParamterValues() / 거의 안씀)
      • String[] usernames = request.getParameterValues("username");

     

    6. HTTP 요청 데이터 - POST HTML FORM

     

    #  메세지 바디에 쿼리 파라미터 형식으로 데이터 전달

    • username=hello&age=20
      • 요청 URL : http://localhost:8080/request-param
      • content-type: application/x-www-form-urlencoded
      • meesage body : username=hello&age=20
    • application/x-www-form-urlencoded 형식은 GET 쿼리 파라미터 형식과 같음
      • 클라이언트(웹 브라우저) 입장에서는 GET, POST 차이가 있지만, 서버 입장에서는 같은 형식이므로 request.getParamter()로 구분없이 사용 가능

     

    +) content-type은 HTTP 메시지 바디 형식 제공

    • GET : URL 쿼리 파라미터 형식, 메시지 바디 X -> content-type 없음
    • POST : HTTP 메시지 바디 사용 ->. content-type 지정 필수 

     

    7. HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트

     

    #  HTTP message body에 데이터 직접 담아서 요청

    • 데이터 형식은 주로 JSON (XML : 레거시..)
    • POST, PUT, PATCH
    • InputStream (bytecode) -> StreamUtils (to String) 
    • 문자 전송 
      • POST : http://localhost:8080/request-body-string
      • content-type: text/plain
      • message body: hello
      • 결과 messageBody = hello

     

    8. HTTP 요청 데이터 - API 메시지 바디 - JSON

     

    #  JSON 형식 전송

    • JSON 형식 전송
      • POST : http://localhost:8080/request-body-json
      • content-type: application/json
      • message body : {"username" : "hello", "age" : 20}
      • 결과 messageBody = {"username" : "hello", "age" : 20} 
    •  JSON 결과 파싱해서 자바 객체로 변환 하려면 JSON 라이브러리 Jackson 사용 (ObjectMapper)

     

    9. HttpServletResponse - 기본 사용법

     

    #  HttpServletResponse 역할 - HTTP 응답 메시지 생성

    • HTTP 응답코드 지정
    • 헤더 생성
    • 바디 생성
    • 편의 기능 제공
      • Content-Type, 쿠키, Redirect

     

    10. HTTP 응답 데이터 - 단순 텍스트, HTML

     

    #  단순 텍스트, HTML

    • 단순 텍스트 응답
      • wirter.println("ok")
    • HTML 응답
    • Content-type : text/html

     

    11. HTTP 응답 데이터 - API JSON

     

    #  API JSON

    • Content-type : application/json
    • Jackson 라이브러리의 objectMapper.writeValueAsString() (객체 -> JSON 문자)

    댓글

Programming Diary