Web Server와 WAS의 차이점
- 실제로는 Web Server도 Application 로직을 포함할 수 있다.
- WASsms App 코드를 실행하는 것에 더욱 특화되어 있다.
- Java에서는 Servlet Container 기능을 제공하면 WAS다.
Servlet
http 프로토콜 기반 request 및 response을 처리하는데 사용된다.
Java에서 Servlet은 HttpServlet 클래스를 상속받아 구현되며, Web app 개발의 핵심 기술이다.
동작 로직
- 서버와 TCP/IP 연결
클라이언트와 서버가 통신하기 위해 3way handshake를 통해 연결.
- Http request Message 필요한 형태로 변환하여 읽기
1) http Method 및 url 분석
2) http Header 분석
3) http message body 읽기 및 변환
- 분석한 결과를 통해 프로세스 실행
- 비즈니스 로직 실행 (예:user 회원가입)
- Http response message 생성
1) http start line 생성
2) header 생성
3) http message body에 응답 데이터를 요청한 형식에 맞춰 응답
4) 처리가 불가하다면 예외처리
- 응답 전달
- 연결 종료
Servlet Container
Servlet을 지원하는 WAS 내부에는 서블릿 컨테이너가 있다.
서블릿 컨테이너는 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행한다.
Servlet Container 역할
- 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할 수행
- 동시 요청에 대한 처리를 위해 Multi Thread를 지원
싱글톤이란?
-> 싱글톤은 객체를 하나만 생성하여 생성된 인스턴스를 공유하여 사용하는 것이다.
인스턴스가 여러 개 생성되지 않도록 하여 자원 낭비를 방지, 인스턴스를 공유함으로써 상태를 일관되게 유지하기 위함입니다. But 공유 변수 사용을 주의해야합니다.
MVC 패턴
mvc 패턴이 왜 나왔으며, 왜 사용해야 하는 것일까 ?
-> Servlet이나 JSP만으로 비즈니스 로직과 View Rendering까지 모두 처리하면 너무 많은 역할을 하게되고 유지보수가 굉장히 어려워져서(책임이 너무 많음) 고안된 패턴이다.
또한, Web Application은 일반적으로 MVC 패턴을 사용한다.
하나의 Servlet이나 JSP로 처리하던 것들을 Model, View, Controller 영역으로 나눈 것이다.
제일 핵심 내용은, 비즈니스 로직과 View의 완전한 독립적인 분리.
Controller
Servlet에 해당하는 영역이다.
파라미터를 검증하며, 비즈니스 로직을 실행한다.
-
비즈니스 로직을 Controller에 포함하게되면 Controller가 너무 많은 역할을 담당하게 되어 일반적으로 Service Layer를 별도로 만들어서 처리한다.
-
Databse와 상호작용하는 Layer를 따로 구분하여 Repository Layer를 추가로 구성한다.
-
레이어드 아키텍쳐를 통해 자세히 알 수 있다.
-
Controller도 비즈니스 로직을 포함할 수 있지만 일반적으로 Service layer를 호출하는 역할을 담당한다.
-
view에 전달할 결과를 조회하여 Model 객체에 임시로 저장한다.
Model
- View에 출력할 Data를 저장하는 객체
- (책임분리)View는 비즈니스 로직이나 Data 접근을 몰라도 되고 View Randering에만 집중하면 된다.
View
Model 객체에 담겨져 있는 Data를 사용하여 화면을 Rendering한다.
정리
- Servlet 사용
- 비즈니스 로직을 처리하는 코드와 화면을 그리는 View 코드가 함께 존재하는 문제
- JSP
- View에 해당하는 코드를 분리 했지만, 여전히 비즈니스 로직을 JSP에 포함하는 문제
- MVC 패턴 사용
- 공통 로직을 처리하는 것에 코드가 중복되는 문제
- 프론트 컨트롤러 패턴 사용
- 공통 로직을 하나의 입구에서 처리하기 위해 프론트 컨트롤러 패턴 적용
- 각각의 핸들러 호출 후 응답을 프론트 컨트롤러에 맞게 변형시켜야 하는 문제'
- Spring MVC 사용
- 프론트 컨트롤러 패턴, 어댑터 패턴이 모두 적용된 현재
- 우리가 사용하는 Spring을 이용한 Web App 개발 방식에 사용됨
- Spring은 MVC패턴에 프론트 컨트롤러 패턴, 어댑터 패턴이 적용돼 있다.