✅ 웹 - 서버 이해
1. 클라이언트(사용자) 서버에 요청
2. 서버에서 다시 클라이언트에게 응답
웹 서버
- Web Server
- HTTP 기반으로 동작
- 정적 리소스 제공
- 정적파일, HTML, CSS, JS, 이미지, 영상 등
EX) APACHE (아파치)
웹 애플리케이션 서버
- Web Application Server
- HTTP 기반으로 동작
- 웹 서버 기능 포함 + (정적 리소스 제공)
- 프로그램 코드를 실행해서 애플리케이션 로직 수행
- 동적 HTML, HTTP API(JSON)
- 서블릿, JSP, 스프링 MVC
EX) Tomcat(톰캣)
- 정적 리소스는
웹서버
가 처리함
- 웹서버는 애플리케이션 로직같은 동적인 처리가 필요하면
웹 어플리케이션 서버
에 요청을 위임
- 웹 어플리케이션 서버는 중요한 애플리케이션 로직 처리 전담
서블릿
: 동적 웹페이지를 만들 때 사용되는 자바 기반의 웹 프로그래밍 기술
-> 쉽게 말해서 웹 요청과 응답을 간단한 메서드로 다룰 수 있는 기술
-> Sapring MVC는 서블릿
기반으로 동작함
사용 순서
- HTTP 요청시 서블릿 객체 호출
Request
객체에서 Http 요청 정보 꺼냄
Response
객체에서 Http 응답 정보를 저장하고 생성함
서블릿 컨테이너
- 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
- 서블릿 객체는 싱글톤으로 관리 (모든 요청은 동일한 서블릿 객체 인스턴스에 접근)
- 동시 요청을 위한 멀티 쓰레드 처리 지원
-> 개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 됨
쓰레드
- 애플리케이션 코드를 하나씩 순차적으로 실행하는 것
- 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행됨
- 쓰레드가 없으면 자바 어플리케이션 실행 불가능
- 쓰레드는 한번에 하나의 코드 라인만 수행
- 동시 처리가 필요하면 쓰레드를 추가로 생성
💡 그러나 쓰레드 생성 비용이 비쌈
쓰레드 풀
기본적으로 톰캣은 최대 200개로 쓰레드가 기본 설정되어있음(변경 가능)
하나의 요청당 하나의 쓰레드가 필요
쓰레드 풀에 남은 쓰레드가 없으면 추가 요청들은 거절 or 대기 하도록 설정
요청이 끝난 쓰레드는 다시 쓰레드 풀로 반납
✅ 쓰레드 실무 팁
- 최대 쓰레드의 수를 적절하게 맞추기 ->
성능 테스트
수행
- 너무 낮게 할 경우 -> 동시요청이 많을 경우, 클라이언트가 금방 응답 지연
10개의 쓰레드로 설정한 사이트에서 100명이 동시접속하면 나머지 90명은 대기하거나 거절됨
- 너무 높게 할 경우 -> 동시 요청이 많을 경우, 메모리 리소스 임계점 초과로 서버 다운
100명의 쓰레드를 버티지 못하는 환경에서 설정할 경우 100명 이상 동시접속시 서버 다운
기본적으로 서버에 HTML파일을 생성해서 요청하고
응답받을 때, HTML을 해석한다
하지만 HTTP API는 HTML파일이 아닌 데이터를 전달한다
HTTP API
- 웹 브라우저에서 자바스크립트를 통해서 HTTP API 호출함
- HTML이 아니라 데이터를 전달
- 주로 JSON 형식 사용
SSR
- 서버 사이드 렌더링
- 서버에서 최종 HTML을 생성해서 클라이언트에 전달
- HTML(화면)을 만드는 과정을 서버에서 다 끝내고 클라이언트는 생성된 HTML을 보여주는 것
- 관련 기술 : JSP, 타임리프 (주로 백엔드 개발자)
CSR
- 클라이언트 사이드 렌더링
- 클라이언트 쪽에서 HTML의 모양을 만든다는 뜻
- HTML의 결과를 자바스크립트를 사용해서 웹 브라우저에서 동적으로 생성해서 적용
- 주로 동적인 화면에 사용, 웹 환경의 필요한 부분들을 변경 할 수 있음
- 관련 기술 : Reactm, Vue.js (주로 웹 프론드엔드 개발자)
EX) 네이버 지도에서 마우스휠로 지도 크기 축소 및 확대