본문 바로가기
java

[Java] 개념은 제대로 알고가자 - CGI, 서블릿 컨테이너(WAS)

by jinbro 2017. 9. 14.

[CGI, 서블릿 컨테이너(WAS)]

(1) 웹어플리케이션 서버(WAS)

- 웹서버 : 요청에 대한 정적인 리소스를 응답하는 목적으로 만들어진 서버(프로그램)

- 웹어플리케이션 서버 : 동적인 처리를 하고 데이터를 웹서버로 리턴하는 목적으로 만든 서버

- 동적인 처리가 필요할 떄 웹서버가 웹어플리케이션을 실행시켜 처리 후 결과를 리턴받아 정적인 문서에 붙여서 응답함

=> 그런데! 웹서버와 웹어플리케이션이 서로 다른 언어, 체계로 만들어졌기때문에 데이터 주고 받기가 원활하지않음

=> 그래서 나온게 CGI : 아래로 갑시다!



(2) CGI(Common GateWay Interface)와 CGI 프로그램 그리고 서블릿컨테이너(WAS)

- 웹서버와 웹어플리케이션서버 데이터를 주고받는 규칙 : 구현된 언어와 체계가 각각 다르기때문에 이를 맞춰줄 하나의 규약 

=> 동적인 처리를 목적으로 만든 어플리케이션 실행, 실행 결과값을 다시 웹서버로 전달해주는 역할할 때 규약이 필요함


- CGI를 따라서 작성한 프로그램을 CGI 프로그램이라 함

- CGI 프로그램 실행 유형에는 2가지 방식이 있음

(1) 인터프리터 

- 소스코드 형태 : .php, .pl, .js, .asp, .py

- 그래서 스크립트 엔진이 필요함 : 웹서버가 스크립트 엔진을 실행하고 스크립트 엔진이 스크립트를 해석 -> 데이터 리턴


(2) 컴파일

- 기계어가 최종본, 웹서버가 바로 실행시킬 수 있음


(3) 자바와 CGI 프로그램

- 자바의 웹어플리케이션은 .class(서블릿)으로 되어있음 : .class는 바이트코드(중간 단계, jvm에 의해 기계어로 번역됨)

- 당연히 웹서버는 웹어플리케이션을 실행시킬 수 없음 : .class 파일이 jvm에 의해 번역되고 실행되어야하기때문에

- 그러면 웹서버가 jvm을? : 당연히 안됨, jvm은 운영체제에 종속적

- 그렇다면? jvm이 실행되고 그 위에서 자바 프로그램 관리 서버(CGI 규칙 지킨 프로그램)를 만들고 실행하면 되겠다!

- 아래 그림처럼 됨

1) 클라이언트로부터 웹서버가 요청을 받으면 자바 프로그램 관리서버(WAS)를 실행

2) 자바 프로그램 관리 서버는 자바 프로그램(.class, 서블릿, 웹어플리케이션)을 호출(실행)

3) 리턴받은 값을 자바 프로그램 관리 서버가 결과값을 웹서버로 : 데이터를 전달해주는 역할(서버)


- 서블릿 컨테이너

1) 자바 프로그램 관리 서버의 이름

2) 자바 프로그램을 서블릿이라 함 : .class, 웹어플리케이션

3) 요청이 오면 호출(생성, 실행)할 뿐만 아니라 소멸까지 관리 : 라이프사이클 관리 - 컨테이너라 함
=> 스크립트의 경우 OOO엔진이라 함


4) 여러 요청이 올 때 : 하나의 프로세스에서 멀티 쓰레드 처리 등 어플리케이션 관리 기능까지

5) 대표적으로 톰캣, 제우스, 웹로직 등이 있음 

6) WAS라고 함 : 웹서버로부터 요청을 전달받고 웹어플리케이션(서블릿)을 실행시키고 얻은 결과값을 웹서버로 전달해주는 역할




댓글