스프링 MVC 1편 - 웹 애플리케이션 이해

hyuk·2023년 11월 1일
0
post-thumbnail

📌 웹 애플리케이션 이해

웹 서버

  • HTTP 기반으로 동작

  • 정적 리소스 제공, 기타 부가기능

  • 정적(파일) HTML, CSS, JS, 이미지, 영상

❗ 웹 서버도 프로그램을 실행하는 기능을 포함하기도 한다.

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

  • 서버 기능 포함+ (정적 리소스 제공 가능)

  • 프로그램 코드를 실행해서 애플리케이션 로직 수행

    • 동적 HTML, HTTP APL(JSON)
    • 서블릿, JSP, 스프링 MVC
  • ex) 톰캣(Tomcat) Jetty, Undertow


📌 웹 시스템 구성

아래 사진과 같이 정적 리소스는 웹 서버가 처리하고, 애플리케이션 로직같은 동적인 처리는 WAS가 처리하여 효율적으로 웹 시스템을 구성할 수 있다.

이 시스템 구성은 효율적인 리소스 관리가 가능하다.

  • 만약, 정적 리소스 처리가 많을 경우? ➜ Web 서버 증설

  • 만약, 애플리케이션 리소스 처리가 많을 경우? ➜ WAS 증설

❗ WAS 혹은 DB 장애 시, WEB 서버에서 오류 화면 제공 가능


📌 서블릿

서블릿의 경우, 초록색 박스 안 과정들을 제외한 나머지 과정을 처리해줌으로 개발자는 HTTP 스펙을 매우 편리하게 사용이 가능하다.


@WebServlet(name="helloServlet", urlPatterns="/hello")
public classs HelloServlet extends HttpServlet {
		
	@Override
	protected void service(HttpsServletRequest req, HttpServletResponse res) {
			//  애플리케이션 로직
    }
}
  • urlPatterns의 URL이 호출되면 서블릿 코드가 실행

  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest

  • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse

서블릿 - HTTP 요청, 응답 흐름

HTTP 요청시

  1. WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
  2. 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
  3. 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
  4. WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성

서블릿 컨테이너

  • 톰캣처럼 서블릿을 지원하는 WAS = 서블릿 컨테이너

  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리

  • 서블릿 객체는 싱글톤으로 관리
    -고객의 요청이 올 때마다 계속 객체를 생성하는 건 비효율
    -최초 로딩 시점에서 서블릿 객체를 미리 만들어두고 재활용
    -모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근
    -공유 변수 사용 주의
    -서블릿 컨테이너 종료시 함께 종료

  • JSP도 서블릿으로 변환 돼서 사용

  • 동시 요청을 위한 멀티 쓰레드 처리 지원⭐️⭐️⭐️


📌 동시 요청 - 멀티 쓰레드

쓰레드

  • 애플리케이션 코드를 순차적으로 실행하는 것은 쓰레드로, 한 번에 하나의 코드 라인만 수행

  • 쓰레드가 없다면 자바 애플리케이션 실행이 불가능

  • 동시 처리가 필요하면 쓰레드를 추가로 생성

쓰레드 풀

동시 요청의 경우, 요청이 올 때마다 쓰레드를 생성하면 쓰레드가 너무 많이 생성되면 리소스가 임계점을 넘어 서버가 죽을 수도 있고, 컨텍스트 스위칭 비용이 발생하여 비효율적이다.

그래서 쓰레드를 최대치를 설정해놓고 쓰레드 풀 에 보관하고 관리

만약에 최대 쓰레드가 모두 사용중이어서 쓰레드 풀에 쓰레드가 없다면 ?
➜ 기다리는 요청은 거절하거나 특정 숫자만큼만 대기하도록 설정하여 해결 !

🖐️ 참고하면 좋을 실무팁 🖐️

  • 동시 요청이 많은 상황에서 최대 쓰레드(max thread) 너무 낮게 설정하면?
    ➜ 서버 리소스는 여유롭지만, 클라이언트는 금방 응답 지연

  • 동시 요청이 많은 상황에서 최대 쓰레드(max thread) 너무 높게 설정하면?
    ➜ 동시 요청이 많으면, CPU, 메모리 리소스 임계점 초과로 서버 다운

- 쓰레드 풀의 장점

  1. 쓰레드를 생성하고 종료하는 비용(CPU)이 절약되고, 응답 시간이 빠름.

  2. 생성 가능한 쓰레드의 최대치가 있어, 많은 요청이 있어도 기존 요청은 안전하게 처리 가능

❗ WAS의 멀티 쓰레드 지원으로 개발자는 싱글 쓰레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발 가능하지만, 싱글톤 객체(서블릿, 스프링 빈)는 주의해서 사용


📌 본 포스트는 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 통해 학습한 내용을 요약 및 정리한 것입니다.

profile
차곡차곡쌓아가는학습노트

1개의 댓글

comment-user-thumbnail
2024년 12월 5일

우 was ㅋ 씨

답글 달기