웹 애플리케이션 이해
모든 것이 HTTP
- 모든 정보를 HTTP메시지에 담아 주고 받음
- HTML, TEXT
- IMAGE, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
웹 서버(Web Server)
- HTTP기반으로 동작
- 정적 리소스(HTML , CSS , JS) 제공
- EX) NGINX , APACHE
웹 애플리케이션 서버(WAS - Web Application Server)
- HTTP기반으로 동작
- 웹 서버(비즈니스 로직) + 정적 리소스 실행 가능
- 동적 HTML , HTTP API(JSON)
- 서블릿 , JSP , 스프링 MVC
- EX) Tomcat
웹 서버 vs 웹 애플리케이션 서버(WAS)
웹 시스템 구성 - WAS, DB
- 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직
- WAS가 모든 것을 처리할수 있지만 부담이 너무큼
- WAS장애시 오류화면도 노출 불가능
웹 시스템 구성 - WEB, WAS, DB
- 정적 리소스는 웹서버가 처리
- 동적인 처리와 같은 부담이 큰 주요처리는 WAS에 위임
- 정적 리소스 , 동적 리소스 각각의 부담에 따라 서버증설의 유동성 증가
- 웹서버는 잘 죽지 않기때문에 WAS서버가 죽더라도 사용자에게 오류페이지 제공 가능
서블릿
HTML Form 데이터 전송
- POST 전송 - 저장
- 사용자가 다음과 같이 값을 넣어 서버로 전송하면 다음과 같은 HTTP메시지가 전송된다.
서버에서 처리해야 하는 업무
- 서버에서는 사용자가 보낸 정보가 담긴 초록색 박스만이 필요하다! 하지만 초록박스 외의 부분을 모두 파싱(잘라내기)해서 의미있는 부분을 추출하는 작업을 진행해야한다.
- 너무 반복적인 작업으로 생략할 방법 모색!
서버에서 처리해야 하는 업무
- 서블릿을 지원하는 WAS 사용
- 서블릿을 지원하는 WAS를 이용하면 파싱을 모두 자동으로 진행해 준다!
서블릿
서블릿
- urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
- HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
- HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
HTTP 요청, 응답 흐름
- WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출
- 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용
- 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력
- WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 '생명주기' 관리
- 서블릿 객체를 싱글톤으로 관리
- 공유변수 사용주의!!
- JSP도 서블릿으로 변환되어 사용
- 동시요청을 위한 '멀티 쓰레드' 처리 지원
동시 요청 - 멀티 쓰레드
- 사용자가 요청하면 WAS서버에 연결될때 서블릿 객체를 누가 부를까?
- -> 쓰레드가 서블릿 객체를 호출한다!!
쓰레드
- 애플리케이션 코드를 하나하나 순차적으로 실행시켜주는 것을 쓰레드
- 자바 메인 메서드를 처음 실행하면 main이라는 쓰레드가 실행
- 쓰레드가 없으면 실행 불가
- 동시처리가 필요하면 쓰레드를 추가로 생성
단일 요청 - 쓰레드 하나 사용
- 클라이언트1이 요청하면 쓰레드1이 서블릿을 호출하고 코드를 돌게된다.
- 동시에 클라이언트2가 쓰레드를 요청한다면 쓰레드가 1개이기 때문에 대기를 하게 된다
- 이때 만약 클라이언트1의 요청이 지연된다면 서버가 오류나버릴수 있다!
쓰레드 풀
- 미리 쓰레드를 여러개를 생성하여 쓰레드풀에 넣어준다.
- 동시에 요청이 들어올때 쓰레드 풀에서 잔여 쓰레드를 꺼내 사용한다
- 만약 쓰레드풀에 쓰레드가 비게 되면 그때는 대기하게한다.
- 때문에 적정 튜닝이 중요하다!!

HTML, HTTP API, CSR, SSR
정적 리소스
- 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공
HTML 페이지
- 동적으로 필요한 HTML 파일을 생성해서 전달
HTTP API
- HTML이 아니라 데이터를 전달
- 주로 JSON 형식 사용
- 다양한 시스템에서 호출
참고 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard
728x90
'Spring' 카테고리의 다른 글
[스프링 MVC 1편] - 서블릿 HttpServletRequest(startLine, header) (0) | 2023.01.02 |
---|---|
[스프링 MVC 1편] - 서블릿 (0) | 2023.01.02 |
[spring] 게시판 CRUD 만들기 (0) | 2022.12.30 |
JPA Auditing기능이란? (0) | 2022.12.29 |
스프링 핵심 원리[기본편] - 의존관계 자동 주입 (0) | 2022.12.28 |