내배캠 TIL 22일차

오병택·2025년 3월 19일

내배캠

목록 보기
44/73

학습 요약

Spring 입문 강의

Spring 입문 1주차

실제 웹 시스템 구성


웹 서버에서 정적 리소스를 담당, WAS에서 DB와 로직 담당

장점

  • 효율적으로 리소스를 관리
    자원이 많으면 Web Server와 WAS 모두 scale-out하면 됨.
  • 오류 화면을 제공o
    Web Server는 오류가 발생할 확률이 아주 낮아서 WAS가 오류 발생하면 오류 화면을 제공해줄 수 있음

Web Application 2강

Servlet

HTTP 프로토콜 기반 요청 및 응답을 처리하는데 사용

Servlet을 지원하는 WAS 사용x

  1. 서버와 TCP/IP 연결

  2. HTTP Request Message 필요한 형태로 변환하여 읽기

    1. HTTP Method 및 URL 분석
    2. HTTP Header 분석
    3. HTTP Message Body 읽기 및 변환
  3. 분석한 결과를 통해 프로세스 실행

  4. 비즈니스 로직 실행

  5. HTTP Response Message 생성

    1. HTTP Start Line 생성
    2. Header 생성
    3. HTTP Message Body에 응답 데이터를 요청한 형식에 맞춰 응답
    4. 처리가 불가하다면 예외처리
  6. 응답 전달

  7. 연결 종료

Servlet을 지원하는 WAS 사용O

  1. 비즈니스 로직 실행

Servlet을 사용하게 되면 위처럼 비즈니스 로직 실행 빼고는 다 담당해주므로 간단해짐.

Servlet 동작 순서

localhost:8080/example HTTP API를 호출하면 일어나는 일

  • Servlet 예시코드
    • URL (/example)이 호출되면 service() 메서드가 실행
@WebServlet(name="ExampleServlet", urlPatterns = "/exmaple")
public class ExampleServlet extends HttpServlet { // HttpServlet을 상속받아 구현한다.
	
	@Override
	protected void service(
		HttpServletRequest request,  // HTTP 요청 정보를 쉽게 사용할 수 있게 만드는 Servlet
		HttpServletResponse response // HTTP 응답 정보를 쉽게 제공할 수 있게 만드는 Servlet
	) {
		// application logic
	}
}


1. WAS는 HTTP 요청 메세지를 기반으로 새로운 Request, Response 객체 생성
2. WAS는 만들어진 Request, Response 객체를 서블릿 컨테이너에 넘겨주며 ExampleServlet 객체 호출
3. ExampleServlet에서 비지니스 로직 처리
4. 응답에 필요한 정보를 개발자가 입력
5. WAS는 Response 객체 정보(개발자가 입력한 정보)로 HTTP 응답 메세지 생성

- 개발자가 하는 일

  1. Request 객체에 담겨져있는 HTTP 요청 정보를 꺼내서 사용
    - 요청 정보(URL, Method, Message Body)를 통해 필요한 기능(비지니스 로직)을 수행
  2. 생성된 Response 객체에 HTTP 응답 정보를 입력

Servlet Container

Servlet을 지원하는 WAS 내부에는 서블릿 컨테이너가 있음. 서블릿 컨테이너는 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행

- Servlet의 생명주기

  • Servlet은 서블릿 컨테이너가 생성 및 관리
  • WAS(서블릿 컨테이너 포함)가 종료될 때 Servlet도 함께 종료

- Servlet 객체 생성시점

  • 개발자가 직접 인스턴스화 하여 사용하는것이 아닌, 코드만 작성하면 서블릿 컨테이너가 생성

서블릿 예시 코드

@WebServlet(name="ExampleServlet", urlPatterns = "/example")
public class ExampleServlet extends HttpServlet { // HttpServlet을 상속받아 구현한다.
	
	@Override
	protected void service(
		HttpServletRequest request,  // HTTP 요청 정보를 쉽게 사용할 수 있게 만드는 Servlet
		HttpServletResponse response // HTTP 응답 정보를 쉽게 제공할 수 있게 만드는 Servlet
	) {
		// application logic
	}

}
@WebServlet(name="Example2Servlet", urlPatterns = "/example2")
// 위와 같은 코드

@WebServlet(name="Example3Servlet", urlPatterns = "/example3")
// 위와 같은 코드

@WebServlet(name="Example4Servlet", urlPatterns = "/example4")
// 위와 같은 코드

- Servlet Container가 하는 일

  1. 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행
    - Servlet 객체를 싱글톤으로 관리

  2. 동시 요청에 대한 처리를 위해 Multi Thread를 지원

싱클톤이란?
싱글톤은 객체를 하나만 생성하여 생성된 인스턴스를 공유하여 사용하는 것을 의미.
특정 클래스의 인스턴스가 여러개 생성되지 않도록 하여 자원의 낭비를 방지하고, 인스턴스를 공유함으로써 상태를 일관되게 유지하기 위함. 하지만, 공유 변수 사용을 주의🚫


Web Application 3강

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 오류가 발생

Multi Thread

Multi Thread로 동시 요청에 대한 처리를 하는 방법

  1. 요청마다 새로운 Threead 생성
  • 요청 처리가 완료되면 Thread를 종료

장점
- 동시 요청을 처리O
- 하나의 Thread에 지연등의 문제가 발생하여도 나머지 Thread는 정상적으로 동작
단점
- Thread 생성에 제한이 없고 생성 비용이 높음
- 수많은 동시 요청이 발생하면 리소스(Memory, CPU 등)부족으로 서버가 다운됨
- Thread를 사용하면 Context Switching 비용이 발생

Context Switching이란?
실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체될 때, 이전 상태를 저장하고 새로운 프로세스/스레드의 상태를 로딩하는 과정

  1. Thread Pool
    이미 생성된 여러개의 Thread가 수영을 하며 쉬고있는 수영장같은 느낌
  • 요청이 들어오면 Thread Pool에서 Thread를 받아 사용
  • 사용 완료된 Thread는 Thread Pool에 반납
  • Thread Pool의 Thread가 모두 사용중이면 Thread가 생길 때까지 대기하거나 거절할 수 있음.

Web Application 4강

SSR(Server Side Rendering)

서버에서 동적으로 HTML을 만들어 클라이언트에게 제공하는 기술로 백엔드 개발자 영역
ex) 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)란?
검색 엔진에서 상위에 노출될 수 있도록 최적화하는 과정

CSR(Client Side Rendering)

웹 브라우저에서 자바스크립트를 사용해 동적으로 HTML을 생성해서 적용하는 기술로 프론트엔드 개발자 영역
ex) React, Vue

CSR 동작 흐름

  1. HTML을 요청. 비어있는 HTML을 응답받음. JS가 존재하는 주소 링크를 응답
  2. 자바스크립트(클라이언트 로직, 렌더링 포함)를 요청
  3. HTTP API 요청을 하고 화면에 필요한 데이터를 JSON 형태(JSON이 아니어도됨)로 응답받음
{
	"name": "황원욱",
	"job": "developer"
}
  1. 응답받은 JSON 데이터로 HTML을 동적으로 그림

CSR의 장단점

장점
1. 클라이언트 측에서 렌더링하므로 사용자 인터랙션(상호작용)에 빠르게 반응할 수 있음
2. 초기 로딩 후에는 서버와의 통신 없이 빠르게 페이지 간 전환이 가능

ex) Google Map, SNS Application

단점
1. 초기 로딩 시 필요한 모든 자바스크립트 파일을 다운로드하고 실행해야 하므로, 초기 로딩 시간이 김
2. 검색 엔진 크롤러가 자바스크립트를 제대로 실행하지 못하면 SEO에 불리할 수 있음

👀이것만은 꼭 기억하기✨

  1. 네트워크 통신은 HTTP로 이루어진다.
  2. HTTP는 무상태 프로토콜이며 비연결성 특징을 가지고 있다.
  3. HTTP Message 구조
    1. HTTP Method
    2. 상태코드
    3. HTTP Header
  4. HTTP API는 Restful 하게 설계해야 한다. 최소 성숙도레벨 2를 지켜야 한다.
  5. Servlet은 Java에서 Request, Response를 쉽게 다루게 해주는 객체이다.
  6. Servlet Container는 Servlet 객체를 싱글톤으로 관리한다.
  7. WAS는 다중 요청 처리를 위해 Multi Thread를 지원한다.
  8. SSR 방식은 서버에서 동적인 페이지를 완성하여 응답한것을 브라우저에서 화면을 출력한다.
  9. CSR은 HTTP API 통신으로 얻은 결과를 통해 브라우저에서 동적으로 화면을 출력한다.

느낀 점

현재 5주차까지 들었는데 이제 1주차 정리 끝났다. 이게 맞나..? TIL쓰다가 흑화할 것 같다. 강의 듣는 것의 비해 TIL이 늦긴 하지만 복습한다는 느낌으로 해야 겠다. 그래도 다행인 건 이제 이해가 조금씩 되기 시작한다는 것이다. 다 뒤졌다 이제 😠

profile
걱정하지 말고 일단 해봐!

0개의 댓글