- WAS란
- 네트워크 연결 (with Socket) 구현
- Servlet Container & Spring Container 구현
- Servlet 구현
- MVC 구현
프로젝트 목적
WAS와 Spring MVC Framework는 자바를 배우고 나서부터 사용해 왔지만 대략적인 구조만 알고 있었다.
구조로 인한 에러를 여러 번 겪다 보니 언젠간 직접 구조를 만들면서 학습해 봐야겠다고 생각했다.
하지만 뭐부터 해야 할지 막막함이 커 시작하기까지 오랜 시간이 걸렸다.
이 학습 프로젝트가 누군가의 막막함을 해소하는 데 작게나마 도움이 되었으면 좋겠다.
WAS란
*잠깐 알아두어야 할 것
웹은 인터넷에 연결된 컴퓨터를 통해 사람들이 데이터를 주고받는 공간이며 HTTP라는 통신 규약을 통해 데이터를 주고받는다.
Web Server
- 클라이언트의 요청에 따라 정적인 자원Resource를 전달한다
- Nginx와 Apache HTTP Server 등의 소프트웨어가 있다
여기서 말하는 정적인 자원들이란 html, css, js, 이미지, 영상 파일 등을 의미한다.
WAS
정적인 게 있으니 동적인 무언가도 있을 거란 추측을 할 수 있다.
- 요청 -> 요청한 파일을 찾아서 전달할 준비 -> 결과 응답
- 요청 -> 코드로 만들어진 작업 실행 -> 결과 응답
"동적인 무언가"는 1번처럼 어딘가에 저장된 파일을 전달하는 게 아니라, 2번처럼 코드로 만들어진 작업을 실행하는 것을 의미한다.
그리고 동적인 처리를 하는 서버가 바로 WAS(Web Application Server)이다.
자바 사용자들에게 가장 친숙한 Tomcat이 바로 WAS의 한 종류이다.
톰캣엔 웹 서버 기능이 포함되어 있어 Tomcat + DB만 있어도 웹 애플리케이션을 만들 수 있다.
다만 고려해야 할 점이 있다.
- 클라이언트 요청이 많을 경우 톰캣에 과부하
- 동적인 처리는 정적 자원 전달 처리에 비해 비용이 비쌈
따라서 서비스 규모가 좀 크다면
- Web Server - Tomcat 구조
웹 서버를 톰캣 앞에다 두어 정적 처리와 동적 처리 역할을 분리하여 트래픽 과부하를 피할 수 있다.
Servlet Container
그렇다면 톰캣은 어떻게 동적 처리를 지원할까?
Servlet을 관리하여 지원한다. 톰캣은 서블릿을 관리하므로 Servlet Container라고도 한다.
Apache Tomcat® 소프트웨어는 자카르타 서블릿(Servlet), 자카르타 서버 페이지(JSP), 자카르타 표현 언어, 자카르타 웹소켓, 자카르타 주석 및 자카르타 인증 사양의 오픈 소스 구현체입니다.
Servlet
*잠깐 알아두어야 할 것
우리가 처음 자바로 무언가를 만들고 기동할 때 맨 처음 main() 메서드가 실행된다.
독립 자바 프로그램에서는 main() 메서드가 Entry Point인 셈이다.
톰캣으로 웹 애플리케이션을 만들어 본 경험이 있다면 main() 메서드가 없어도 프로그램이 실행된다는 걸 알고 있을 것이다.
서블릿 컨테이너로 만든 프로그램에서는 서블릿이 main() 메서드와 같은 엔트리 포인트 역할을 한다.
그렇다면 클라이언트 요청이 들어오면 어떤 일이 일어나길래 서블릿이 그런 역할을 하는 걸까?
- 클라이언트로부터 요청이 들어와 연결이 되면
- 서블릿 컨테이너는 Thread를 생성하고
- 쓰레드는 요청에 매핑된 서블릿을 호출
여기서 중요한 포인트 두 가지가 있다.
- 클라이언트 요청이 동시에 여러 개 들어올 때마다 서블릿을 생성할까?
- 클라이언트 요청이 동시에 여러 개 들어올 때마다 쓰레드를 생성할까?
1 -> 서블릿은 엔트리 포인트의 역할이므로 요청마다 생성할 필요 없이 기능 당 하나만 있으면 된다.
따라서 서블릿은 Singleton으로 관리된다.
2 -> 쓰레드 생성에 제한이 없을 경우 CPU와 메모리에 과부하가 걸릴 수 있다.
또한 컨텍스트 스위칭 비용이 많이 든다.
따라서 쓰레드는 Thread Pool을 이용하여 관리된다.
'Project' 카테고리의 다른 글
3. JAVA로 아주 간단한 WAS와 Spring MVC Framework 만들기 (0) | 2023.01.10 |
---|---|
2. JAVA로 아주 간단한 WAS와 Spring MVC Framework 만들기 (0) | 2023.01.07 |
커피 주문 서비스를 객체 지향으로 설계해보기 with Java (0) | 2022.10.19 |
4. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인 (0) | 2022.03.27 |
3. AWS + Spring Boot + React 프로젝트 근데 이제 배포 자동화를 곁들인 (0) | 2022.03.25 |