WAS란 무엇인가
- Web Application Server의 약자로 국내에서는 통상 java프로그램을 구동시켜주는 application server를 지칭함.
- 대표적인 WAS로는 tomcat이 있으며 tomcat은 java servlet과 jsp 구동을 지원한다. (servlet container 혹은 web container라고 지칭한다.)
- WAS본인 또한 하나의 java프로그램이며 jvm위에서 동작한다. 즉 jdk가 설치되어있지 않으면 동작하지 않는다. 다만 centos같은경우 open-jdk가 기본 설치되어있다.
- WAS는 http요청이 오면 java servlet프로그램을 jvm위에 올려서 실행시켜주며 결과를 받아 http리턴한다.
Webserver와 WAS의 관계
- webServer는 html파일 같은 고정된 리소스를 제공해주는 정적인 역할을 담당. 대표적으로 Apache가 있다.
- WAS는 server application을 구동시켜주는(web container) 플랫폼 역할을 하는데 application이 DB를 연결하여 데이터를 주고받거나 프로그램으로 데이터를 조작하는 등의 동적인 데이터 처리가 필요한 역할을 담당한다.
- Tomcat의 경우 web container역할 외에 webserver 기능도 가지고 있다. 그러나 apache만큼 정적인 문서를 빠르게 처리하지 못하며 안정성도 apache에 비해 떨어진다. 그래서 apache와 tomcat을 연동시켜서 보통 사용한다.
- 사용자 요청은 apache로 받고 내부 프로그램은 was를 통해 처리하는 형태가 보편적임.
- 웹브라우저 - 웹서버 - WAS(servlet container) - java기반 서버사이드 프로그램 구조가 보편적임.
Java Servlet과 jsp는 무엇인가?
- 먼저 CGI프로그램이란 용어를 알아야 한다. 웹 서버에 의해 실행되며 CGI(Common Gateway Interface)규칙에 따라 웹 서버와 데이터를 주고받는 프로그램을 CGI프로그램이라 한다. CGI프로그램은 C,C++, JAVA, PHP, Python 등등으로 작성이 가능하다.
- JAVA기반의 CGI프로그램을 servlet이라고 지칭한다.
- servlet은 servlet container(WAS)를 통해서만 웹서버와 통신한다.
- servlet의 최대 장점은 http요청에 따라 WAS가 servlet을 스레드로 돌리기 때문에 메모리 효율성이 좋다는 것이다.
- jsp(Java Server Page)는 JAVA기반의 서버사이드 스크립트 언어이다. servlet이 java코드 안에 html을 넣은 것이라면 jsp는 html안에 java코드를 넣은 개념이다. jsp로 짜면 html과 java코드의 분리가 가능해지겠지.
- servlet의 경우 결국 .java 파일을 .class파일로 컴파일 한것을 WAS가 jvm위에 올려 구동시켜 주는 형태인데 소스가 변경될 때 마다 매번 .java파일을 컴파일 해야한다. 그것이 번거로우니 jsp를 사용하게 된것. jsp는 스크립트 언어이므로 수정 후 재 컴파일이 필요없다. java소스 변경이 필요한 경우만 컴파일 해주면 되겠지.
그러면 php로 만든 Server Application(CGI 프로그램)은 어떻게 동작하는가?
- php는 php인터프리터에 의해 읽히는 스크립트 언어이다.
- centos에 php를 설치하면 인터프리터가 설치된다.
- apache에 의해 php인터프리터가 구동되어 .php문서를 바로 읽어들여 프로그램화 한다.
즉 Java Servlet처럼 servlet container가 필요없다. 즉 WAS가 필요없다.
그러면 C로 만든 Server Application(CGI프로그램)은 어떻게 동작하는가?
- C로 만든 프로그램은 인터프리터나 jvm이 아닌 운영체제가 직접 실행시켜준다. 따라서 웹서버 외 별도의 도움이 필요없다.
- 다만 웹서바가 C프로그램을 직접 실행시키는 경우 스레드가 아닌 프로세스를 매번 새로 생성하기 때문에 메모리 효율이 극히 떨어진다는 단점이 있어 사용하지 않는다고 한다.
was의 종류
WAS는 BEA사의 Web Logic, IBM사의 Web Sphere, T-max사의 Jeus, Tomcat, Redhot사의 Jboss가 있다.
front-end개발
- HTML, CSS로 화면을 만드는 개발
- 웹서버사이드에서 개발하는 것으로 생각하면 된다.
back-end개발
- php, java, c# 등으로 웹 어플리케이션을 만드는 개발
- CGI프로그램 개발이라고 생각하면 된다.