Java 기반Web의 역사
UMC3기Server
소프트웨어학과 20 김준기
INDEX
INDEX
1 2 3 4 5
최초의WebServer CGI Servlet Spring Spring Boot
최초의WebServer
정적인 페이지만 제공할 수 있었다!
최초의WebServer의 한계
최초의WebServer의 한계
동적인 페이지도 제공하고 싶다!
최초의WebServer의 한계
CGI (공용 게이트웨이 인터페이스)
- 서버와 애플리케이션 간의 데이터를 주고 받는 방식 또는 컨벤션
- 이런 CGI를 기반으로 C, PHP등으로 구현체를 만듬
- 현재의 WAS 서버의 역할
CGI
구현체
CGI의 단점
Web
Server
Client DB
CGI
구현체
CGI의 단점
Web
Server
CGI
구현체
CGI
구현체
프로세스
프로세스
프로세스
CGI의 단점
Servlet
CGI
구현체
Web
Server
CGI
구현체
CGI
구현체
프로세스
프로세스
프로세스
스레드
Servlet
구현체
Servlet
구현체
Servlet
구현체
스레드
스레드
1
Servlet
Web
Server
프로세스
프로세스
프로세스
스레드
스레드
스레드
Servlet
구현체
1
2
Servlet
Web
Server
프로세스
프로세스
프로세스
스레드
스레드
스레드
Servlet
구현체
Servlet Container
3
Servlet (프로세스 -> 스레드)
Servlet (프로세스 -> 스레드)
손님
Servlet (프로세스 -> 스레드)
손님
Servlet (프로세스 -> 스레드)
손님
Servlet (프로세스 -> 스레드)
손님
Servlet (스레드 풀) -> 흐름과 살짝 다름
Servlet (스레드 풀) -> 흐름과 살짝 다름
손님
Servlet (스레드 풀) -> 흐름과 살짝 다름
손님
Servlet (스레드 풀) -> 흐름과 살짝 다름
손님
Servlet (싱글톤[Singleton]) -> 흐름과 살짝 다름
어플리케이션(프로세스) 안에 객체가 1개만 있는 패턴.
장점: 요청마다 객체를 생성하면 너무 높은 cost 발생
-> 메모리를 아낄 수 있다.
Servlet
Servlet Container Web Container
Servlet
Web Container
Servlet의 생명주기 관리
웹서버와의 통신 지원
Servlet의 구조
Init()
Service()
Destroy()
Servlet
Servlet 구현체 생성
비즈니스 로직 수행
Servlet 구현체 삭제
doGet(),
doPost()
등에 구현
Servlet의 구조
Java 코드로
HTML을 만드는데 한계가 있음
JSP(JavaServer Page)의 등장
JSP(JavaServer Page)의 등장
JSP로는 복잡한 비즈니스 로직
구현이 어려움
Servlet + JSP + MVC 패턴
MVC 패턴: Model, View, Controller
Model
View
Controller
Java Object
JSP
Servlet
Data 전달
화면 렌더링
비즈니스 로직 수행
Servlet + JSP + MVC 패턴
MVC 패턴: Model, View, Controller
Model
View
Controller
Java Object
JSP
Servlet
Data 전달
화면 렌더링
비즈니스 로직 수행
로직이 복잡해질 수록 공통으로
처리해야하는 부분이 많아진다!!
ex) log 출력
프론트 컨트롤러(FrontController)패턴의 등장!
Front
Controller
1번 Controller
2번 Controller
3번 Controller
Client
Client
Client
Spring을 만들자!
객체지향의 장점을 잘 살린 패턴
너도 나도 쓴다!
겹치는 부분이 다수 발생
MVC 패턴을 자동화 시킨
FrameWork들의 등장
@Controller 등의 어노테이션으로
Spring의 압승
Spring
Spring
Client
Dispatcher
Servlet
Controller 맵핑 Controller
어댑터 목록
Controller
어댑터
Controller
viewResolver
View
HTTP요청
Controller
조회
Controller
이름 전달
Controller 어댑터에게
요청 전달
어댑터
이름 전달
Controller 어댑터 조회
Controller 호출
Model과 View 논리적
이름 전달
Model과 View 논리적
이름 전달
View 논리적 이름 전달
View 물리적
이름 전달
Model 전달
Rendering
Spring
Client
Dispatcher
Servlet
Controller 맵핑 Controller
어댑터 목록
Controller
어댑터
Controller
viewResolver
View
HTTP요청
Controller
조회
Controller
이름 전달
Controller 어댑터에게
요청 전달
어댑터
이름 전달
Controller 어댑터 조회
Controller 호출
Model과 View 논리적
이름 전달
Model과 View 논리적
이름 전달
View 논리적 이름 전달
View 물리적
이름 전달
Model 전달
Rendering
Spring
Controller
Spring
Client
Dispatcher
Servlet
Controller 맵핑 Controller
어댑터 목록
Controller
어댑터
Controller
viewResolver
View
HTTP요청
Controller
조회
Controller
이름 전달
Controller 어댑터에게
요청 전달
어댑터
이름 전달
Controller 어댑터 조회
Controller 호출
Model과 View 논리적
이름 전달
Model과 View 논리적
이름 전달
View 논리적 이름 전달
View 물리적
이름 전달
Model 전달
Rendering
Spring
Controller
Spring에게 치명적인
단점이 있었다!!
Spring의 단점
Spring의 단점
톰캣 수동설치
라이브러리 간의 종속성 X
외부 라이브러리 버전 수동 구성
Spring의 단점
톰캣 수동설치
라이브러리 간의 종속성 X
외부 라이브러리 버전 수동 구성
환경설정이 절반인
Spring의 악랄한 설정 환경
Spring Boot
2014
Spring Boot
톰캣 내장
연관된 라이브러리 자동
호출(starter)
스프링과 외부 라이브러리 간의
버전 자동 구성
DB Connection
Spring Boot
Spring Boot
Spring Boot
Commons-dbcp Tomcat-jdbc-pool HikariCP
Spring Boot
HikariCP
Spring Boot
CGI
정리
최초의
WebServer
Servlet
Spring
SpringBoot
감사합니다 Thank You
지금까지 발표를 들어 주셔서 감사합니다 : )

[KAU UMC 컨퍼런스] Java 기반 Web의 역사 - 김준기

Editor's Notes