[Spring] MVC1

손시연·2022년 5월 13일
0

spring-boot

목록 보기
6/10

WAS

웹 서버 VS 웹 애플리케이션 서버(WAS)

  • 공통점 : HTTP 기반 동작
  • 차이점 :
    • Web server -> 정적 리소스(파일 - HTML, CSS, JS 등)
    • WAS -> 애플리케이션 로직(HTTP API, 서블릿, JSP, 스프링 MVC 등)
    • 사실 둘의 용어도 경계가 모호함
    • 결론 : WAS는 애플리케이션 코드를 실행하는데 더 특화

웹 시스템 구성 - WEB, WAS, DB

  • 정적 리소스가 많이 사용되면 Web 서버 증설
  • 애플리케이션 리소스가 많이 사용되면 WAS 증설

서블릿

  • 개발자는 HTTP 스펙을 매우 편리하게 사용 가능
  • HTTP 요청시
    • WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
    • 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
    • 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
    • WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성
  • 서블릿 컨테이너
    • 톰캣처럼 서블릿을 지원하는 WAS
    • 싱글톤으로 관리 -> 공유 변수 사용 주의
    • 동시 요청을 위한 멀티 쓰레드 처리 지원

[동시요청 - 멀티 쓰레드]

  • 쓰레드 : 애플리케이션 코드를 하나하나 순차적으로 실행하는 것
    • application > process > thread
    • 동시 처리가 필요하면 쓰레드를 추가로 생성
  • 쓰레드 풀 : 필요한 쓰레드를 쓰레드 풀에 보관하고 관리
    • 모두 사용시? => 거절, 대기 가능
    • CPU 절약, 속도 향상
  • WAS의 주요 튜닝 포인트는 최대 쓰레드(max thread) 수이다.
  • 결론
    • 멀티 쓰레드에 대한 부분은 WAS가 처리
    • 개발자는 싱글 쓰레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발
    • 멀티 쓰레드 환경이므로 싱글톤 객체(서블릿, 스프링 빈)는 주의해서 사용

데이터 전송 방식

  • 정적 리소스
  • HTML 페이지(동적)
  • HTTP API
    • JSON 형식의 데이터 전달
    • 데이터만 주고 받음. UI 화면이 필요하면, 클라이언트가 별도 처리
    • 서버to서버, 앱클라이언트to서버, 웹클라이언트to서버

SSR(서버 사이드 렌더링), CSR(클라이언트 사이드 렌더링)

  • SSR
    • HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달
    • 주로 정적인 화면에 사용
    • 관련 기술 : JSP, 타임리프 -> 백엔드 개발자
  • CSR
    • HTHML 결과를 JS를 사용해 웹 브라이저에서 동적으로 생성해서 적용
    • 주로 동적인 화면에 사용, 웹 환경을 마치 앱처럼 필요한 부분부분 변경할 수 있음
    • 관련 기술 : React, Vue.js -> 웹 프론트엔드 개발자

HttpServletRequest

  • 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HTTPServletRequest 객체에 담아서 제공한다
  • 임시 저장소 기능
    • 저장 : request.setAttribute(name, value)
    • 조회 : request.getAttribute(name)
  • 세션 관리 기능
    • request.getSession(create: true)

HTTP 요청 데이터

  1. GET - 쿼리 파라미터
  • /url?username=hello&age=20
  • 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달
  • 검색, 필터, 페이징 등에서 많이 사용되는 방식
  1. POST - HTML Form
  • content-type: application/x-www-form-urlencoded
  • 예) 회원 가입, 상품 주문, HTML Form 사용
  1. HTTP message body에 데이터를 직접 담아서 요청
  • HTTP API에서 주로 사용, JSON, XML, TEXT
  • 데이터 형식은 주로 JSON 사용 -> POST, PUT, PATCH
  • JSON 결과를 파싱해서 사용할 수 있는 자바 객체로 변환 -

HTTPServletResponse

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

HTTP 응답 데이터

  • 단순 텍스트 응답 : writer.println("ok");
  • HTML 응답 : writer.println("<html>");
    HTTP 응답으로 HTML을 반환할 때는 content-typetext/html로 지정해야 한다.
  • HTTP API - MessageBody JSON 응답
    HTTP 응답으로 JSON을 반환할 때는 content-type을 application/json으로 지정해야 한다. Jackson 라이브러리가 제공하는 objectMapper.writeValueAsString()을 사용하면 객체를 JSON 문자로 변경할 수 있다.
profile
Server Engineer

0개의 댓글