Spring MVC Core

DeadWhale·2022년 10월 31일
0

Spring-MVC-Core

목록 보기
1/6
post-thumbnail

개요 , WebServer , WAS

2022 . 10 . 30 핵심 기술 강의 시작

  • 핵심 기술
    • 웹 애플리케이션의 이해
    • 서블릿 , JSP , MVC 패턴
    • MVC 프레임 워크
      • 웹개발
      • 기본 기능
      • 핵심 구조
  • 활용 기술
    • 공통 기능
    • 확장 포인트
    • 활용
    • 쿠키,세션
    • 필터 , 인터셉터
    • 예외처리
    • 타임리프
    • 메시지 , 국제화
    • 검증

모든 것이 HTTP

  1. HTML , TEXT
  2. IMAGE , 음성 , 영상 ,파일
  3. JSON , XML ( API 요청 )

Web Server

  • HTTP 기반
  • 정적 리소스 제공
  • 정적 HTML , CSS , JS
  • NGINX , APACHE 등이 있다. ( 아파치자

WAS - Web Application Server

  • HTTP 기반
  • 웹서버의 모든 기능들을 포함
  • 프로그램 코드를 수행해 애플리케이션의 로직을 수행
    • 동적 HTML , HTTP API
    • 서블릿 , JSP , 스프링 MVC
  • Tomcat , Jetty , Undertow
❕ Web 과 WAS의 차이는 굉장히 모호하다.
  • 자바의 경우에는 서블릿 컨테이너 기능을 제공하면 WAS
    • ( 서블릿 없이 자바 코드를 실행하는 서버 프레임 워크도 있다 )
  • WAS는 애플리케이션 코드를 실행하는 것이 특화

WAS , DB만으로도 시스템 구성이 충분히 가능하다.

하지만 가장 비용이 비싼 애플리케이션 로직이 정적리소스들 때문에 수행에 방해될 수 가 있다.

  • WAS 장애시에는 오류화면도 노출이 안된다.
  • WAS는 생각보다 죽는 경우가 허다하다.

  • 이런 식으로 HTML , CSS , JS , 이미지 같은 요청을 우선 처리하고
    동적인 처리가 필요할 경우 WAS에 요청을 위함하는 식으로 구성한다.

  • WAS는 애플리케이션 로직 담당.

  • 각각의 필요성에 따라 서버를 추가하기 편하다.

  • 정적 리소스 배포는 서버가 죽을일이 거의 없다.

  • 데이터만 주고받는 API 서버 개발 같은 경우 구지 웹서버가 없어도 된다.


서블릿 Servlet

  • 실제 구현해야하는 비지니스 로직을 제외하고 모든 규칙성 업무를 처리해준다.

요청 정보 : HttpServletRequest

응답 정보 : HttpServletResponse

  1. 웹브라우저 요청
  2. was 서버에서 요청 정보를 기반으로 Request , Response 객체를 생성
  3. 비지니스 로직 수행
  4. 생성했던 Response를 기반으로 HTTP 응답을 생성한다.
  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
  • 서블릿 객체는 싱글톤으로 관리
    • 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율
    • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
    • 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근공유
    • 변수 사용 주의
  • JSP도 서블릿으로 변환 되어서 사용
  • 동시 요청을 위한 멀티 쓰레드 처리 지원

동시 요청 - 멀티쓰레드

쓰레드

  • 코드를 하나하나 순처적으로 실행하는 것
  • 자바에서는 main이라는 이름의 메서드를 쓰레드가 실행
  • 쓰레드가 없다면 자바 애플리케이션 실행이 불가능
  • 쓰레드하나에 하나의 코드 라인맨 수행
  • 동시 처리가 필요하면 쓰레드를 추가로 생성

단일 요청 : 요청이 들어오면 쓰레드를 할당한다. 응답이 마무리 되면 쓰레드가 반환된다

다중 요청 : 이미 처리중인 쓰레드가 있다면 처리가 지연된다.

요청마다 쓰레드 생성

장점

  • 동시 요청 처리가능
  • 리소스 한도내에서 전부 허용
  • 다른 쓰레드의 지연과 상관이 없다

단점

  • 쓰레드 생성 비용이 매우 비싸다 :: 응답 속도 저하
  • 컨텍스트 스위칭 비용이 발생한다
  • 생성에 제한이 없다
    • 고객의 요청이 많이 오면 CPU 와 메모리가 임계점을 못버티고 셧다운 되버린다.

쓰레드 풀

쓰레드를 미리 만들어두는 방식.

톰캣은 최대 200개가 기본 설정 ( 변경 가능 )

  • 요청 시 만들어져있는 쓰레드풀에서 하나를 가져온다
  • 응답 후 다시 쓰레드풀에 반납한다.
  • 쓰레드를 생성 , 파괴가 아니라 만들어둔 상황만 다룬다
  • 200개를 만들어뒀을 때 201번 요청이 들어올 경우 반환 혹은 대기 시킬 수 있다.
❕ 실무 팁
  • WAS의 주요 튜닝 포인트는 최대 쓰레드이다
  • 값이 낮을 경우
    • 동시 요청이 많으면 서버 리소스는 여유롭지만 사용자가 불편하다.
  • 많을 경우
    • 동시 요청이 많으면 CPU , 메모리 리소스 임계점 초과로 서버 다운
    • 요청마다 쓰레드 생성과 비슷한 수준

장애 발생 시

  • 클라우드면 일단 서버 늘리고 나중에 튜닝
  • 아니면 열심히 튜닝

적정 수는?

  • 로직의 복잡도 , CPU , 메모리 , IO 리소스 상황에 따라 모두 다르다.
  • 성능 테스트를 통해 유추
    - 최대한 서비스와 유사하게 성능 테스트 시도
    - 아파치 AB , 제이미터 ,nGrinder

WAS의 멀티 쓰레드 지원

[핵심]

  • 멀티쓰레드에 대한 부분은 WAS가 처리
  • 개발자가 멀티쓰레드 코드를 신경쓰지 않아도됨.
  • 개발자는 싱글쓰레드 프로그래밍 하듯이 편하게 소스 코드를 개발
  • 멀티쓰레드 환경이므로 싱글톤 객체( 서블릿 , 스프링 빈) 은 주의해서 사용하자.

0개의 댓글