질문1) WAS 는 무엇인가?
1. WAS
가. WAS 정의
웹과 기업의 기간 시스템 사이에 위치하면서, 웹 기반 분산 시스템 개발을 쉽게 도와주고 안정적인 트랜잭션 처리를 보장해 주는 일종의 미들웨어소프트웨어 서버. 3계층 웹 컴퓨팅 환경에서 기존 클라이언트/서버환경의 애플리케이션 서버와 같은 역할을 하며, 클라이언트와 서버 환경에서 트랜잭션 처리 및 관리와 다른 기종 시스템 간의 애플리케이션 연동 등을 주된 기능으로 하고 있다.
WAS는 웹이 탄생한 이래, 주로 데이터베이스 조회나 일반적인 비즈니스 로직에 대한 처리를 위해 다양한 언어로 개발된 인터넷/인트라넷환경의 소프트웨어를 지칭한다. 자바스크립트나 JSP등과 같은 스크립트및 서비스들은 대개 최신의 데이터를 검색하기 위해 데이터베이스에 접근하고, 브라우저 또는 클라이언트 프로그램을 통해 사용자들에게 검색 결과를 제공한다.
WAS를 비롯한 애플리케이션 서버들은, 웹서버 즉 HTTP서버와 같은 컴퓨터를 공유할 수도 있지만, 별개의 컴퓨터를 독립적으로 사용하는 경우도 많다. 대규모 사이트에서는, 오히려 WAS와 웹서버등을 위해 여러 대의 컴퓨터가 동원되기도 한다. 넷스케이프의 Netscape Application Server, BEA의 Weblogic Enterprise, 볼랜드의 AppServer, 그리고 IBM의 Websphere Application Server 등이 WAS의 대표적인 제품들이다.
Open source 진영은 아파치 재단의 Tomcat 이 대중화 되어 있다.
웹 서버(Web Server)
- 클라이언트의 요청을 받아 HTML이나 오브젝트를 HTTP 프로토콜을 이용해 전송하는 것.
사용자가 클라이언트로 요청을 보내오면 그 명령에 대한 처리를 실행하고 다시 사용자에게 답변을 보내준다.
- 사용자가 요청한 것들 중에 웹 서버 자체적으로 처리할 수 없는 것들을 톰캣과 같은 컨테이너나 PHP 모듈과 같이 처리할 수 있는 곳으로 넘겨 처리 결과를 받아와서 사용자에게 넘겨주는 역할도 수행한다.
- 웹 서버만 구축된 서버는 웹 페이지, 이미지 등 정적인 페이지를 생성하지만, JSP 컨테이너가 탑재되어 있는 WAS는 JSP 페이지를 컴파일 해 동적인 페이지를 생성한다.
- 웹 서버는 웹 문서를, WAS는 JSP 페이지 등을 양분하여 서버 부담을 줄이는 것이 가능하다.
- Apache, IIS(Internet Information Server), WebtoB 등
웹 어플리케이션 서버(Web Application Server / WAS)
- 웹 서버 + 웹 컨테이너.
- 웹상에서 사용하는 컴포넌트들을 올려놓고 사용하게 되는 서버
- EJB와 같은 빈들이 올라가게 되며, 서버에 따라 웹에 필요한 많은 기능들을 포함하고 있다.
- J2EE 스펙을 구현한 서버(JSP / Servlet Container와 EJB Container 로서의 기능)
- 가장 많이 사용하는 WAS는 BEA사의 Web Logic, IBM사의 Web Sphere, T-max사의 Jeus, Tomcat, Redhot사의 JBoss 등이 있다.)
- Tomcat은 JSP / Servlet Container의 기능을 구현했으나 EJB Container로서의 기능은 없다. 따라서 Tomcat은 WAS가 아니라는 사람들도 있다.
컨테이너(Containner)
- JSP와 서블릿을 이용하는 웹 응용 프로그램은 자바 언어를 이용해서 작성할 수 있는데, JSP와 서블릿을 실행시킬 수 있는 소프트웨어를 웹 컨테이너(Web Container) 혹은 서블릿 컨테이너(Servlet Container)라고 한다.
- Servlet 컨테이너, JSP 컨테이너, EJB 컨테이너 등의 종류가 있으며, 대표적인 웹 컨테이너로는 자카르타 톰캣(JSP), RESIN, Web Logic, WebtoB 등이 있다.
- 웹 서버에서 JSP를 요청하면 톰캣에서는 JSP 파일을 서블릿으로 변환하여 컴파일을 수행하고, 서블릿의 수행결과를 웹 서버에서 전달하게 된다.
웹 서버와 WAS의 차이점
- 웹 서버와 WAS를 구별 짓는 것은 동적 서버 콘텐츠를 수행하는가? 만약 수행한다면 WAS로 보면 된다.
- 웹 서버 : 정적인 HTML이나 이미지를 제공하는 서버.
WAS : 동적인 처리를 담당하는 서버.
웹 서버와 WAS의 일반적인 구성
- 사용자가 브라우저에서 요청을 하게 되면 다음과 같이 웹 서버와 WAS 서버를 거쳐 응답이 돌아오게 된다.
사용자 요청(웹 브라우저) -> 웹 서버 -> WAS(동적 처리) -> 웹 서버 -> 사용자 응답 메세지(웹 브라우저)
나. 등장 배경, 필요성
2. WEB server & WAS 차이점 및 기술표준 및 기능
가.WEB server & WAS 차이점
구분 | 웹서버 | WAS |
설명 | 웹브라우저(Web Client)에게 컨텐츠를 제공하는 서버이다. 즉 정적인 HTML이나 jpeg, gif같은 이미지를 HTTP 프로토콜을 통해 웹 브라우저에 제공한다. 최근에는 웹서버에서도 내부 애플리케이션을 동작시킬 수 있는 컨테이너를 내장하고 있다. | 서버단에서 애플리케이션을 동작할 수 있도록 지원한다. 일반적으로 컨테이너라는 용어로 쓰인다. 초창기에는 CGI, 그 이 후에는 Servlet, ASP, JSP, ASP, PHP등의 프로그램으로 사용되고 있다. |
나. 기술 표준
- J2EE : Java 기반의 분산객체 아키텍쳐
- WAS는 J2EE 아키텍처를 구현한 플랫폼 솔루션
다. WAS 일반적인 기능
-Web 환경을 위한 n-tier Architecture 플랫폼
-Presentation(GUI)과 Business Logic의 분리 운영
-Thread 관리
-부하조절(Load Balancing) 기능 지원
-장애대책(Fail-Over) 기능 지원
-Transaction 처리 자동화
-Web Service 플랫폼으로서의 역할
3. WAS 서버 종류
-Was Server 종류 : tomcat, tMax jeus, BEA Web Logic, IBM Web Spere, JBOSS,
Bluestone, Gemstone, Inprise, Oracle, PowerTier, Apptivity, SilverStream
-Web Server 종류 : IIS, apache, tMax WebtoB
Tomcat
톰캣은 아파치소프트웨어 재단의 애플리케이션 서버로서, 자바서블릿을 실행시키고 JSP코드가 포함되어 있는 웹페이지를 만들어준다. 자바 서블릿과 JSP 규격의 '참조용 구현'으로 평가되고 있는 톰캣은, 개발자들의 개방적 협력 작업의 산물로 바이너리버전과 소스코드버전 둘 모두를 아파치 웹사이트에서 얻을 수 있다. 톰캣은 자체적으로 보유하고 있는 내부 웹서버와 함께 독립적으로 사용될 수도 있지만 아파치나 넷스케이프엔터프라이즈 서버, IIS, 마이크로소프트의 PWS등 다른 웹서버와 함께 사용될 수도 있다. 톰캣을 실행시키기 위해서는 JRE1.1 이상에 부합되는 자바 런타임 환경이 필요하다.
4. WAS 도입효과
-안정된 시스템 구성 : 안정적 서비스 보장, 자동적인 애플리케이션 복구기능 제공, 업무 로직이 중간 어플리케이션 서버에 존재, 쉽고 빠르게 구축할 수 있다.
-DB 성능 보장 : WAS서버가 DB서버와의 최적 사용을 조절화, DB connection pool을 통해 DB connection 관리 및 트랜잭션 처리
-비용절감 : 서버 리소스의 원활한 사용
질문2) WAS 에서 많이 사용하는 JSP 는 무엇인가?
1.JSP
가.JSP의 개념
JSP즉 JavaServer Pages의 약자로 ' 동적(dynamic) 인 웹 콘텐츠를 생성하기 위한 ' 자바 기반의 스크립트 언어
- Servlet을 기본바탕으로 하고 있음
- ASP처럼 쉽고 빠르게 웹 응용프로그램을 만들수있게 해주는 기술
- 소프트웨어를 재사용할수있는 컴포넌트 모델을 지원( JavaBeans)
1) Servlet의 개념
"자바를 이용해서 작성한 CGI프로그램"
자바로 구현
JVM(자바가상머신)이라는 환경하에서 클라이언트의 요청에 따라 Multi Thread방식으로 동작
CGI개념
Common Gateway Interface
웹서버와 외부 프로그램 사이를 연결하는 규약
동적으로 웹페이지를 만들어주는 프로그램을 의미함
C, C++, Perl 등 다양한 프로그래밍 언어로 작성 가능하며 요즘은 PHP, JSP, ASP를 많이 사용함
웹서버와 각 언어별 지원 라이브러리 환경 설정이 별도로 필요함
참고 사이트
http://javaking75.blog.me/140174066323
http://javaking75.blog.me/140174075033
나. JSP 라이프 사이클
- 웹 client -------> JSP 요청 -----> 웹서버 ------> JSP요청
-----> 웹 컨테이너 -> 처리결과 ----> 웹서버 -----> 처리결과 ------>웹 client
"요청과 응답 매커니즘"
1) client 요청이 웹서버에 전달되고 웹서버는 JSP요청이 들어온것을 확인하고
2) 바로 웹컨테이너인 JSP 엔진에게로 요청을 넘긴다.
JSP엔진은 3) 요청한 JSP페이지에 해당하는 Servlet이 있는지 확인하고, 없다면
4) Servlet코드를 생성하며 5) 자바 컴파일러에 의해 컴파일 과정을 거쳐 Servlet class가 만들어진다.
정상적으로 Servlet class가 만들어지면 6)웹 컨테이너는 메모리에 클래스 로딩 즉, 객체 생성과정을 거치고 내부적으로 callback 메소드가 수행되며 필요하다면 JavaBeans클래스도 메모리에 올려 사용한다. 7) callback 메소드인 서비스 메소드가 완료되면 웹 컨테이너는 결과값을 웹 서버에게 넘겨주고 8) 웹서버는 웹 Client에게 응답을 주고 나면 이 연결은 끊어진다.
- .jsp 파일은 웹컨테이너에서 .java형태로 코드 변환 -> 컴파일 -> 메모리 로드 -> 서비스
- JSP에 해당하는 서블릿이 존재하지 않을 경우 JSP페이지를 컴파일하여 서블릿을 생성후, 생성된 서블릿을 사용하여 클라이언트의 요청을 처리
- JSP에 해당하는 서블릿이 존재하는 경우, 곧바로 서블릿을 사용하여 클라이언트의 요청을 처리
즉 , JSP페이지를 요청할때에는 JSP를 직접 실행하는 것이 아니라 JSP를 자바소스코드로 변환한뒤 컴파일해서 생성된 서블릿을 실행하는것이다.
JSP페이지를 자바코드로 변경하는 단계를 변환(translation) 단계" 라고함
자바코드를 서블릿 클래스로 변경하는 단계를 "컴파일(compile) 단계" 라고함.
- 웹서버가 직접 JSP요청을 처리 할수없는 이유? 웹서버는 JVM을 모름
다.JSP API
1 ----------> | 2 --------------> | 3 ---------> |
Servlet Class -> 객체 생성 -> jspInit() call | jspService() call | jspDestroy() call |
서비스 되기 위한 준비 과정 | 클라이언트의 요청이 있을때마다 _jspService()가 멀티 스레드방식으로 수행 (경우에 따라서는 반드시 동기화문제를 해결해야함) | 서비스 객체가 메모리에서 제거되기 바로직전에 호출됨 |
질문: WAS 설치 및 실행은 어떻게 하는가?
계속 update 중..
질문: WAS 관련 용어 의미는 무엇인가?
[ WAS 관련 용어 정의 ]
1. 자바 서블릿(Java Servlet)
자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 “서블릿”이라고 한다.
자바 서블릿은 Java EE사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.
비슷한 기술로는 펄 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 쓰레드로써 응답하므로 보다 가볍다. 또한 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.
2. 엔터프라이즈 자바빈즈(Enterprise JavaBeans, EJB)
EJB는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB사양은 Java EE의 자바 API중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리한다.
EJB의 종류는 세션 빈(Session Bean), 엔티티 빈(Entity Bean), 메시지 구동 빈(Message-driven Bean)이 있다.
3. 자바 메시지 서비스(Java Message Service, JMS)
JMS는 자바 프로그램이 네트워크를 통해 데이터를 송수신하는 자바 API이다.
4. 자바 가상 머신(Java Virtual Machine, JVM)
JVM은 자바 바이트코드를 수행할 수 있는 환경이다. 자바 바이트코드는 주로 자바를 컴파일하여 생성하지만, 다른 언어의 컴파일러에서도 생성할 수 있다. 자바 가상 머신은 자바 플랫폼의 기반을 이루며 다양한 하드웨어 기반 플랫폼에 포팅된다. JVM은 자바 플랫폼의 중요한 부분이며 마이크로소프트 윈도(95/98/NT), 리눅스, 유닉스, 맥 오에스 텐 등 대부분의 운영체제는 물론, 인터넷 익스플로러와 넷스케이프 등과 같은 웹 브라우저 등 여러 가지 플랫폼에 설치되어 사용될 수 있으며, 휴대전화나 가전기기에도 설치할 수 있다. 따라서 자바 플랫폼은 여러 플랫폼을 지원하여 미들웨어로서의 역할과 플랫폼 스스로의 역할을 동시에 수행할 수 있다. 사용자는 자바 바이트코드로 컴파일된 자바 프로그램을 실행시키기 위해서 이 자바 가상머신을 이용하면 된다.
원 개발사인 썬 마이크로시스템즈에서 자바 가상 머신의 기준이 되는 표준판(Java SE) 과 표준판을 핸드폰이나 PDA 등 임베디드 기기용인 축소판(Java ME) 으로 구분하여 가상 머신을 배포하고 있다. 기업판(Java EE)의 경우에는 표준판의 자바 가상 머신을 기반으로 확장된 라이브러리 집합을 정의한 것이기 때문에 자바 가상 머신의 종류로 분류하기 애매하다. 썬 마이크로시스템즈에서 제공하는 자바 가상 머신 말고도 각 운영체제 개발사가 제공하는 자바 가상 머신이 있으며, GNU의 GCJ나 아파치 소프트웨어 재단(ASF: Apache Software Foundation)의 하모니(Harmony)와 같은 오픈 소스 자바 가상 머신도 존재한다. 이러한 공개 소프트웨어 단체의 움직임에 따라 썬 마이크로시스템즈에서도 자사의 자바 가상 머신 및 개발 도구 킷을 오픈 소스 정책에 맞추어 공개한 상황이다.
5. 힙 메모리(heap memory)
프로그램을 사용할 수 있는 자유 메모리. 프로그램 실행 시에 함수로 보내는 데이터 등을 일시적으로 보관해 두는 소량의 메모리와 필요시 언제나 사용할 수 있는 대량의 메모리가 있다. 이때, 소량의 메모리를 ‘스택’이라 하고 대량의 메모리를 ‘힙’이라 한다. 이 ‘힙’이 없어지면 메모리 부족으로 ‘이상 종료’하게 된다.
6. 자바 서버 페이지(JavaServer Pages, JSP)
HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어이다. Java EE 스펙 중 일부로 웹 애플리케이션 서버에서 동작한다. 자바 서버 페이지는 실행시에는 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다. 하지만, 서블릿과는 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다. 이와 비슷한 구조인 것인 PHP, ASP, ASP.NET 등도 있다. 아파치 스트럿츠나 자카르타 프로젝트의 JSTL 등의 JSP 태그 라이브러리를 사용하는 경우에는 자바 코딩없이 태그만으로 간략히 기술이 가능하므로 생산성을 높일 수 있다.
클라이언트에서 서비스가 요청되면, JSP의 실행을 요구하고, JSP는 웹 애플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환된다. 그 후에 서블릿 원시코드는 바로 컴파일된 후 실행되어 결과를 HTML 형태로 클라이언트에 돌려준다.
7. Java Database Connectivity(JDBC)
자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다. JDBC는 Java로 작성된 프로그램을, 일반 데이터베이스에 연결하기 위한 응용프로그램 인터페이스 규격입니다. 이 응용프로그램 인터페이스는 데이터베이스 관리 시스템에 넘겨질 SQL 형태의 데이터베이스 접근요구 문장을, 각 시스템에 맞도록 바꾸어준다. API는 동적으로 올바른 Java 패키지를 로드하고, JDBC 드라이버 매니저에 등록하기 위한 메커니즘을 제공합니다. 드라이버 매니저가, JDBC connection을 생성하기 위한 connection factory로서 사용됩니다.
8. Java Management eXtensions(JMX)
응용 프로그램 소프트웨어/객체/장치 (프린터 등) 및 서비스 지향 네트워크 등을 감시 관리를 위한 도구를 제공하기 위한 자바 API이다. 이러한 리소스는 MBean(Managed Bean)이라는 객체로 표현된다.
9. Java Naming and Directory Interface(JNDI)
디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API이다.