Ⅰ. Web Server
📚 HTTP 기반으로 동작, 정적 리소스(HTML, CSS, JS, 이미지 등) 제공
📌 Web Server 구조

Ⅱ. WAS(Web Application Server)
📚 웹 서버 기능 포함. 코드를 실행하여 Application 로직 수행 및 DB와 상호작용, 동적 컨텐츠 생성
📌 WAS 구조
📌 Web Server와 WAS의 차이
Ⅲ. Web System 구성
📌 WAS만 사용하는 경우

📌 실제 웹 시스템 구성

📌 실제 웹 시스템 구성의 장점

📚 HTTP 프로토콜 기반 요청 및 응답처리에 사용. JAVA에서는 HttpServlet 클래스를 상속받아 구현
Ⅰ. Servlet의 역할
HTTP POST 요청으로 HTML Form 데이터를 전송하는 상황
ex) 회원가입 : POST + localhost:8080/api/users
HTTP Request Message 예시
POST /api/users HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded
userId=아이디&pssword=비밀번호
HTTP Response Message 예시
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>
...
</body>
</html>
📌 서버에서 처리해야 하는 작업

Ⅱ. 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
}
}
📌 Servlet 동작순서

📌 개발자가 하는 일
Ⅲ. Servlet Container
📚 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가 하는 일
싱글톤으로 관리Multi Thread 지원💡 싱글톤 : 객체를 하나만 생성하여 생성된 인스턴스를 공유하여 사용하는것
특정 클래스의 인스턴스가 여러개 생성되지 않도록 하여 자원낭비 방지 및 인스턴스 공유로 일관된 상태유지
❗ 공유 변수 사용 주의
📚 애플리케이션 코드를 하나하나 순차적으로 실행하는 것, Java에서 main method 실행시 main Thread가 실행되며 한번에 하나의 코드 라인만 수행. 동시 처리 필요시 Thread 추가 생성 해야함
단일 요청 : Single Thread
동시 요청 : Single Thread
첫번째 요청 작업 지연이나 Error 발생시 → 모든 요청이 Time out 오류 발생
📚 Single Thread 사용중 동시 요청을 할때 하나라도 지연되거나 서버문제 발생시 나머지 요청들에도 영향을 끼치는 문제 → 여러개의 Thread를 생성해서 사용 / WAS는 Multi Thread 지원
👉 Multi Thread로 동시요청을 처리하는 방법
Context Switching 비용 발생
⭐ 멀티 태스킹의 진실과 Context Switching
📌 CPU(프로세서)는 한순간에 하나의 프로세스만 실행 가능

📚 서버에서 동적으로 HTML을 만들어 클라이언트에게 제공하는 기술 JSP, Thymeleaf
SSR 동작 흐름

장점
SEO에 유리ex) 전자상거래 사이트, 뉴스 사이트단점
SEO(Search Engine Optimization) : 검색 엔진에서 상위에 노출되도록 최적화하는 과정
📚 웹 브라우저에서 자바스크립트를 사용해 동적으로 HTML을 생성해서 적용하는 기술.
웹을 앱 처럼 부분 변경 가능하게 함 React, Vue
CSR 동작 흐름
{
"name": "황원욱",
"job": "developer"
}
장점
ex) Google Map, SNS Application단점
Thread Pool
이것만은 꼭 기억하기