Application Layer 집중탐구
주요구성 요소
Web Server : 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 정적 웹 페이지를 반환하는 SW/HW를 총칭
WAS(Web Application Server) : Java EE 명세를 만족하는 JAVA 구현체로 크게 두 가지로 구분할 수 있다. Java EE 명세를 대부분 지원하고, 다양한 형태의 모듈로 배포가 가능한 고가의 WAS와 웹 모듈의 배포만 가능한 경량 WAS 또는 서블릿/JSP 컨테이너다. 경량 WAS의 대표적인 예로 Tomcat이 있다.
※ Java EE 주요 명세(Specification)를 잠깐 보고 넘어가자!
Servlet : HTTP를 사용해 JAVA로 웹 서비스를 제공하기 위한 표준
JSP(Java Server Pages): JAVA 코드에 HTML 태그를 삽입하는 Servlet 방식의 문제점을 개선하기 위해 HTML태그에 Java 코드를 삽입할 수 있는 표준으로 JSP가 처음 실행될 때 Servlet/JSP 컨테이너가 JSP를 Servlet으로 컴파일시켜서 내부적으로는 Servlet으로 동작합니다
EJB(Enterprise Java Beans) : Java에서 제공하는 분산 컴포넌트 기술로 비즈니스 로직이나 데이터, 메시지를 처리할 수 있습니다
Remote Method Invocation(RMI): 프록시를 써서 원격에 있는 Java 객체의 메소드를 실행시키기 위한기술입니다
Java Naming Directory Interface (JNDI): 자바 기술로 만들어진 객체에 이름을 붙여 찾을 수 있도록 단일한인터페이스를 제공
Java Database Connector(JDBC): 여러 종류의 데이터베이스 시스템에 접근하는 단일한 인터페이스를 제공합니다. 각각의 데이터베이스에 맞는 JDBC 드라이버가 있어야 합니다
Java Connector Architecture(JCA): 이기종 플랫폼을 통합할 수 있도록 플랫폼 독립적인 인터페이스를 제공합니다
Java Message Service (JMS): 여러 가지 메시징 시스템에 대한 플랫폼 독립적인 인터페이스를 제공합니다
경량 WAS의 핵심 기술 서블릿과 서블릿 컨테이너
▶ Servlet(서블릿)
JAVA로 웹 서비스를 구현하기 위한 SUN사의 표준 스펙
독립적으로 실행되지 않으므로 main 메소드가 존재하지 않는다
서블릿 컨테이너에 의해 생성(init), 호출(service), 소멸(destory) 즉, 서블릿 컨테이너가 서블릿의 상태를 변경하면서 서블릿 인터페이스에 정의된 각 메소드를 호출
▶ 서블릿 컨테이너
Client의 HTTP 요청을 받고 분석하여 Servlet을 실행시키는 역할을 수행
네트워크 통신, 서블릿의 생명주기 관리, 스레드 기반의 병렬처리
웹 애플리케이션과 배치(Deployment)
▶ 웹 애플리케이션
일반적으로 WEB-INF 디렉토리를 가지며, 최상위 디렉토리는 해당 웹 컨텍스트의 최상위 문서 루트가 되고, WEB-INF 디렉토리 아래 web.xml에 서블릿 설정 파일이 존재하며, 독립적인 클래스 로더를 공유하는 웹 프로그램의 모임
▶ 배치(Deployment)
위에서도 설명했지만 배치(Deploy)는 웹 애플리케이션을 서블릿 컨테이너가 인식할 수 있도록 컨테이너 내부로 끌어들이는 과정을 말한다.
위에서 배운 지식을 활용하여 HTTP요청이 Servlet에 전달되는 과정을 보면
▶ Servlet 상속구조 관점에서 HTTP 요청 처리과정
[그림1]
Client 호출 URL 분석
① 서버와 통신을 위한 Protocol 선언(http, https, ftp 등)
② HOST 정보(목적지 IP주소(도메인))
③ N/W 서비스나 특정 프로세스 식별을 위한 논리 단위
④ 컨텍스트명(서블릿 컨테이너에 배치된 웹 애플리케이션명)
⑤ 서블릿 매핑 URL
⑥ 쿼리 스트링(Client가 입력 또는 선택한 정보)
Servlet 상속구조 관점에서 HTTP 요청 처리과정
① 서블릿 컨테이너는 먼저 Client의 HTTP 요청 URL을 해석하여/testServlet이란 컨텍스명으로 매핑된 웹 애플리케이션을 찾습니다. 그리고 Servlet에게 넘겨줄 HttpServletRequest와 HttpServletResponse 객체를 생성합니다.
② 웹 애플리케이션 하위 디렉토리의 WEB-INF/web.xml을 참조하여 url-patter에 일치하는 servlet-name 및 servlet-clas를 찾습니다.
③ 서블릿 관리자에게 해당 서블릿 클래스명을 넘겨주면 서블릿 관리자는 해당 서블릿의 인스턴스를 캐시에서 찾아
service(ServletRequest, ServeltResponse) 메서드를 호출한다. 캐시에서 없을 경우 인스턴스를 생성하고 캐시에 저장
web.xml
12345678910 web.xml 파일의 서블릿 설정 부분<servlet><servlet-name>myServlet</servlet-name><servlet-class>MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>myServlet.do</url-pattern></servlet-mapping>
▶ 웹 애플리케이션 구조 관점에서 HTTP 요청 처리과정
[그림2]
'아키텍처' 카테고리의 다른 글
소프트웨어 아키텍처 평가기법 (0) | 2017.04.14 |
---|---|
웹 환경의 이해(1/2) (0) | 2017.01.18 |