본문 바로가기
스파르타 내일배움캠프/TIL(Today I learned)

25.03.31 TIL - Web Application(2)

by pandastic 2025. 3. 31.
반응형

 

 

 

 

Web Application

1. Thread

    - 애플리케이션 코드를 하나하나 순차적으로 실행하는 것.

    - Java에서 main method를 실행하면 main 이라는 이름을 가진 Thread가 실행됨.

    - 하나의 Thread는 한 번에 하나의 코드 라인만 수행함.

    - 동시 처리가 필요하다면 Thread를 추가적으로 생성해야함.

 

  • Servlet 객체의 호출
    • 클라이언트에서 Request가 전달되면 Thread가 Servlet 객체를 호출.
  • 단일 요청 - Single Thread
    1. 클라이언트 요청 및 TCP/ IP 연결
    2. Thread 할당 후 Servlet 호출.
    3. 응답 후 Thread 반환.
  • 동시 요청 - Single Thread
    1. 첫번째 요청의 작업을 Single Thread가 수행중.
    2. 두번째, 세번째 요청이 들어오고 연결을 완료함.
    3. Thread를 사용하기 위해 작업이 끝날 때까지 대기함.
    4. 요청이 모두 사라질 때까지(대기 → 작업 수행 → 스레드 반환) 작업을 반복.
  • 만약, 첫번째 요청의 작업이 지연되거나 Error가 발생한다면?
    • 모든 요청이 Time Out 오류가 발생.

 

2. Multi Thread

    - 하나의 프로세스 안에 여러 개의 스레드가 있는 것.

    - 하나의 프로그램에서 두 가지 이상의 동작을 동시에 처리할 수 있음.

 

 

  • Multi Thread로 동시 요청에 대한 처리를 하는 방법
    1. 요청마다 새로운 Thread 생성.
      • 요청이 들어올 때마다 Thread 생성.
      • 요청 처리가 완료되면 Thread 종료.
      • 장점
        • 동시 요청을 처리할 수 있음.
        • 하나의 Thread에 지연 등의 문제가 발생하여도 나머지 Thread는 정상적으로 동작.
      • 단점
        • Thread 생성에 제한이 없고 생성 비용이 높음.
          • 수많은 동시 요청이 발생하면 리소스(Memory, CPU 등) 부족으로 서버가 다운됨.
          • Thread를 사용하면 Context Switching 비용 발생.
        • Context Switching
          • CPU/ 코어에서 실행 중이던 프로세스/ 스레드가 다른 프로세스/ 스레드로 교체되는 것.
    2. Thread Pool
      • 이미 생성된 여러 개의 Thread가 수영을 하며 쉬고 있는 수영장과 같음.
      • 요청이 들어오면 Thread Pool에서 Thread를 받아 사용.
      • 사용 완료된 Thread는 Thread Pool에 반납.

 

[정리]

더보기
  1. WAS는 Multi Thread를 지원.
    • 개발자가 Multi Thread 관련 코드는 고려하지 않아도 된다.
    • Multi Thread 환경이므로 싱글톤 객체(Servlet, Spring Bean)는 주의해서 사용해야함.
    → 공유변수 사용 조심 또 조심!
  2. Thread Pool
    • Thread는 Thread Pool에 보관 및 관리.
    • Thread Pool에 생성 가능한 Thread 최대치를 관리.
    • Tomcat은 최대 200개 기본 설정.(변경 가능)
      • 성능테스트를 통해 적정 Thread 수를 찾으면 됨.
    • 장점
      1. 요청 마다 Thread를 생성하는 단점을 보완.
      2. Thread가 미리 생성되어 있어서 Thread를 생성, 종료하는 비용이 절약. → 응답이 빠름
      3. 생성 가능한 Thread 최대치가 제한되어 있어 많은 요청이 들어와도 안전하게 처리가능.
    • 단점
      1. Thread Pool의 최대 Thread 수를 낮게 설정한다면 응답이 지연됨.
      2. 최대 Thread 수가 너무 높으면 즉, 요청이 많아지면 리소스 부족으로 서버가 다운됨.

 

 

3. SSR(Server Side Rendering)

    - 서버에서 동적으로 HTML을 만들어 클라이언트에게 제공하는 기술.

    - 백엔드 개발자 영역에 속하며 Java에서는 JSP, Thymeleaf가 대표적으로 사용됨.

 

  • SSR 동작 흐름
    1. 서버(WAS)에 HTML을 요청.
    2. 서버(WAS)에서 로직을 거친 후 DB를 조회.
    3. 조회 결과를 기반으로 HTML을 동적으로 생성.
    4. 생성된 HTML을 응답
  • SSR의 장단점
    • 장점
      1. 초기 페이지 로드 시 서버에서 완전히 렌더링된 HTML을 반환하여 첫 페이지 로딩이 빠름.
      2. 검색 엔진 크롤러가 완전한 HTML을 즉시 수집할 수 있어 SEO에 유리함.
      ex) 전자상거래 사이트, 뉴스 사이트
    • 단점
      1. 모든 요청에 대해 서버가 페이지를 렌더링해야 하므로, 높은 트래픽 상황에서 서버의 부하가 크게 증가할 수 있음.
      2. 초기 페이지 이외의 페이지들도 렌더링 후 반환되기 때문에 속도가 느림.
    • SEO(Search Engine Optimization)
      • 검색 엔진에서 상위에 노출될 수 있도록 최적화하는 과정.

 

4. CSR(Client Side Rendering)

     - 웹 브라우저에서 자바스크립트를 사용해 동적으로 HTML을 생성해서 적용하는 기술.

     - 웹을 모바일 앱 처럼 부분 부분 변경할 수 있게 해줌.

     - 프론트엔드 개발자 영역에 속하는 React, Vue가 대표적으로 사용됨.

 

  • CSR 동작 흐름
    1. HTML을 요청한다. 비어있는 HTML을 응답받는다. JS가 존재하는 주소 링크를 응답함.
    2. 자바스크립트(클라이언트 로직, 렌더링 포함)를 요청함.
    3. HTTP API 요청을 하고 화면에 필요한 데이터를 JSON 형태(JSON이 아니어도됨)로 응답받음.
    4. 응답받은 JSON 데이터로 HTML을 동적으로 그림.
  • CSR의 장단점
    •  장점
      1. 클라이언트 측에서 렌더링하므로 사용자 인터랙션(상호작용)에 빠르게 반응 가능.
      2. 초기 로딩 후에는 서버와의 통신 없이 빠르게 페이지 간 전환 가능.
      ex) Google Map, SNS Application
    •  단점
      1. 초기 로딩 시 필요한 모든 자바스크립트 파일을 다운로드하고 실행해야 하므로, 초기 로딩 시간이 긺.
      2. 검색 엔진 크롤러가 자바스크립트를 제대로 실행하지 못하면 SEO에 불리할 수 있음.

 

 

 

 

 

 

 

 

반응형