웹 어플리케이션 ㅡ> 웹을 기반으로 실행되는 어플리케이션을 의미.
우리는 웹 브라우저에 www.naver.com 과 같은 문장을 주소로 입력함으로써
웹 어플리케이션에 기능을 요청하고, 요청을 받은 웹 어플리케이션은 요청한 기능에 알맞은 결과 화면을
생성해서 웹 브라우저에 전송한다.
<이런식>
웹 브라우저 ㅡ> 웹서버 ㅡ> 어플리케이션 서버 ㅡ> 데이터베이스 ㅡ> 어플리케이션 서버 ㅡ> 웹서버 ㅡ> 웹 브라우저
구성 요소 |
역 할 |
주요 제품 |
웹 서버 |
웹 브라우저의 요청을 받아서 알맞은 결과를 웹 브라우저에 전송한다. 만약 프로그램 처릭 필요하다면 어플리케이션 서버를 사용하거나 프로그램을 직접 호출하여 결과를 생성한다. 주로 정적인 HTML, 이미지,CSS, 자바 스크립트를 웹 브라우저에 제공할 때 웹 서버가 사용된다.
결국, 웹 브라우저에서 정적인 페이지를 요청했을땐 웹 서버에서 바로 제공을 하는것이고, 프로그램 처리가 필요한 동적인 페이지를 요청했을땐 웹 어플리케이션 서버로 넘기는 것이다. |
아파치 |
어플리케이션 서버 |
게시글 목록, 로그인 처리와 같은 기능을 실행(처리)하고, 그 결과를 응답으로 웹 서버에 전달한다. |
톰캣, 웹로직, JBoss 등. |
데이터베이스 |
웹 어플리케이션이 필요로 하는 데이터를 저장한다. 예를 들어, 회원 정보, 게시판 글 데이터 등을 저장한다. |
오라클, MySQL, MS-SQL등 |
웹 브라우저 |
웹 서버에 서비스 실행을 요청하며, 웹 서버의 처리 결과를 사용자에게 보여준다. |
인터넷 익스플로러, 파이어폭스 크롬 |
어플리케이션 서버도 웹 서버와 마찬가지로 정적인 HTML이나 CSS, 이미지 등을 제공할 수 있는데,
웹 서버에서 정적인 HTML과 이미지 등을 제공하고 어플리케이션 서버가 프로그램(기능)을 제공하는 이유는
성능 때문이다. 일반적으로 아파치와 같은 웹 서버는 정적인 HTML과 CSS를 제공하는 데 초점이 맞춰져 있고,
톰캣이나 웹로직과 같은 어플리케이션 서버는 JSP, 서블릿과 같은 프로그램을 실행하여 결과를 제공하는 데
초점이 맞춰져 있다.
cf. ) 톰캣 ㅡ> JSP페이지를 웹 서버에 요청을 하면 이 페이지를 해석하고 실행하는 역할을 하는 것.
---------------------------------------------------------------------------------------------------
CGI 방식과 어플리케이션 서버 방식
웹 브라우저 ㅡ> 웹서버 ㅡ>웹 어플리케이션 ㅡ> 웹서버 ㅡ>웹브라우저
(요청) (처리) (응답)
이처럼 웹 어플리케이션이 실행되는 과정은 '요청 - 처리 - 응답'의 3단계 과정으로 정리할 수 있는데,
웹 서버가 웹 어플리케이션 프로그램을 실행하는 방식에 따라서 CGI 방식과 웹 어플리케이션 동작 방식을 구분 할 수 있다.
자 다시 말하면, CGI 방식과 어플리케이션 서버 방식 간의 차이점은 웹 서버가 직접 프로그램을 호출하는지의
여부에 있다.
CGI방식은 웹 서버에서 바로 펄 프로그램이라든지 C프로그램을 직접 실행하고,
┖> 요청 ㅡ> 웹 서버 ㅡ> 프로그램
어플리케이션 서버 방식은 웹 서버가 직접 프로그램을 실행하지 않고, 어플리케이션 서버를 통하여
프로그램들을 실행시킨다.
┖>요청 ㅡ> 웹 서버 ㅡ> 어플리케이션 서버 ㅡ> 프로그램
접속자가 많은 서비스의 경우 CGI 방식보다 어플리케이션 서버 방식의 성능(처리량)이 더 좋게 나타난다.
예를들어, 동시에 5개의 웹 브라우저가 동일한 프로그램을 요청했다고 해보자.
CGI 방식의 경우 요청 개수만큼 프로그램이 메모리에 로딩된다. 같은 프로그램을 실행하는 경우라 하더라도
요청이 발새할 때마다 매번 메모리에 프로그램이 로딩되기 때문에, 동시에 접속하는 웹 브라우저의 요청 개수가
많아질수록 이에 비례해서 프로그램을 실행하기 위해 필요한 메모리도 증가하게된다.
따라서 속도가 느려져서 전체적으로 성능 저하 현상이 발생한다.
반면, 어플리케이션 서버 방식은 동시에 여러 웹 브라우저가 동일한 프로그램을 요청하더라도 한 개에 해당하는 메모리만 사용하기 때문에 CGI방식에 비해 전체적으로 메모리 사용량이 적다.
----------------------------------------보충설명---------------------------------------------
CGI 방식 (실행코드방식)
: 웹서버가 어플리케이션 프로그램을 직접 호출하는 구조.
ㄱ. 사용자가 5명이 웹브라우저에서 KIM프로그램을 요청했다.
ㄴ. 각각의 요청을 받은 웹서버가 각각에 해당되는 프로세스를 만들어 직접 프로그램을 직접호출한다.
ㄷ. 프로세스는 실행중인 프로그램인데, 사용자 마다 프로세스를 만들어준다면 과부하가 걸리며 시스템상 좋지 못하다.
2. 웹 어플리케이션 서버 방식(포털사이트, 스크립트 코드방식)
: 어플리케이션 서버 방식은 웹서버가 직접 어플리케이션프로그램을 처리하는게 아니라, 웹어플리케이션 서버에게 처리를
넘겨주고, 어플리케이션 서버가 어플리케이션 프로그램을 처리한다. 어플리케이션 서버방식은 여러명의 사용자가 동일한
페이지를 요청하여 같은 어플리케이션프로그램을 처리할때 오직 한개의 프로세스만을 할당하면서, 사용자의요청을 쓰레드 방식으로 처리.
쓰레드란? 프로스세 내에 잇는 명령어 블록, 하나의 프로세스 역할을 수행할 수 있다. 다중 쓰레드가 가능
하기 때문에, 하나의 프로세스에 여러개의 쓰레드를 만들어 사용한다면, CGI와 같은 일을 처리하더라도, 프로세스가 하나
이기에, 상당히 시스템상 효율적이다. 당연히 더 많은 사용자에게 서비스를 제공할 수 있다.
----------------------------------------보충설명---------------------------------------------
스크립트 방식과 실행 코드 방식
웹 어플리케이션 프로그래밍은 구현하는 방식에 따라 실행 코드 방식과 스크립트 방식으로 구분할 수 있다.
비교 항목 |
실행 코드 방식 |
스크립트 방식 |
코드 형태 |
컴파일 된 실행 프로그램 |
컴파일 되지 않은 스크립트 코드 |
실행 방식 |
컴파일 된 기계어 코드 직접 실행 |
스크립트 코드를 해석한 뒤 실행 |
코드 변경 |
소스 코드를 다시 컴파일 해야 함 |
스크립트 코드만 고치면 됨 |
종류 |
C 기반 CGI 프로그램 |
JSP, ASP, net, PHP, Ruby 등 |
실행 코드 방식의 경우
웹 브라우저 요청 전송 ㅡ> 웹 서버 요청 받음 ㅡ> 프로그램 실행
스크립트 방식의 경우
웹 브라우저 요청 전송 ㅡ> 웹 서버 요청 받음 ㅡ> 스크립트 코드 번역 ㅡ> 번역된 코드 실행.
위에 만 보았을 땐 실행 코드 방식이 더 빠른거 같은데 다음과 같은 이유 때문에 스크립트 코드 방식의 속도가 더 빠르다.
1.스크립트 코드 번역은 최초 요청에 대해서 한 번만 발생하며, 이후의 요청에 대해서는 번역 과정 없이 앞서 번역된 코드를 실행하도록 함으로써 번역 횟수를 최소화 하고 있다.
2. 실행 코드 방식의 경우 일반적으로 CGI 방식이고, 스크립트 코드 방식인 JSP나 ASP는 어플리케이션 서버 방식이기 때문에 전체 처리량에서는 JSP/ASP 기반의 스크립트 코드 방식이 앞선다.
3. 기술의 발달로 스크립트 언어를 번역한 코드가 일반 프로그램과 동일한 수준의 성능을 제공하고 있다.
---------------------------------------------------------------------------------------------------------
프로토콜(Protocol) - 컴퓨터와 컴퓨터 사이, 또는 한 장치와 다른 장치 사이에서
데이터를 원활히 주고받기 위하여 약속한 여러 가지 규약(規約).
이 규약에는 신호 송신의 순서, 데이터의 표현법, 오류 검출법 따위가 있다.
프로토콜에는 http, ftp 등이 있는데, 웹 브라우저와 웹 서버는 http나 https 프로토콜을 이용하여 통신하게 된다.
가장 대표적인 프로토콜은 TCP/IP 이다.
TCP/IP ㅡ> TCP/IP란 네크워크 전송 프로토콜로 서로 다른 운영체제를 쓰는 컴퓨터 간에도 데이터를
전송할 수 있어 인터넷에서 정보전송을 위한 표준 프로토콜로 쓰이고 있다.
TCP는 전송 데이터를 일정 단위로 나누고 포장하는 것에 대한 규약이고,
IP는 직접 데이터를 주고 받는 것에 대한 규약이다.
인터넷에 물려 있는 모든 컴퓨터는 인터넷 표준 위원회에서 제정한 규약을 따르고 있는데,
인터넷 표준 프로토콜이 TCP/IP이다.
프로토콜이란 쉽게 말해 한 컴퓨터에서 다른 컴퓨터로 데이터를 완전하게 보내기 위한 장치이다.
TCP/IP에서 먼저 IP는 출발과 도착 주소를 가지는 헤더를 참조해 네트워크를 통해 데이터를 목적지에 전달한다. 그러나 이 과정에서 데이터가 잘못 전달되거나 파손될 수도 있고, 보내진 순서대로 데이터를 전송하지
못할 수도 있다. 이러한 단점을 보완하는 것이 TCP이다.
즉 IP가 데이터 패킷을 분실하거나 파손하면 TCP는 문제가 발생했다는 것을 알리고 데이터를 알맞게 재전송하는 임무를 갖는다.
TCP가 에러를 복구하는 과정에서 데이터를 수신하는 호스트에서는 언제나 에러 없이 순서대로 데이터를 전송 받는다.
-----------------------------------------------------------------------------------------------------
쿼리문자열은 주소 뒤에 추가로 붙는 정보로서 '파라미터(parameter)'라고 불리는 데이터를 웹 어플리케이션에
전달할 때 사용된다. 쿼리문자열은 물음표를 이용하여 경로 부분과 구분되며 다음과 같이 1개 이상의 파라미터
이름과 값을 갖는다.
?이름1=값1&이름2=값2&....
이처럼 각각의 파라미터는 '&' 을 이용하여 구분하며, 파라미터의 이름과 값은 등호 부호(=)를 이용하여 구분한다.
ex) http://www.google.com/search?hl=en&q=jsp&aq=f&oq=
-----------------------------------------------------------------------------------------------------
서블릿과 JSP
자바 언어를 개발한 Sun Microsystems에서 웹 개발을 위해 만든 표준이 서블릿(Servlet)이다.
서블릿 규약에 따라 만든 클래스를 서블릿이라고 부른다. 서블릿을 만들기 위해서는 자바 코드를 작성하고,
코드를 컴파일 해서 클래스 파일을 만들게 된다.
즉, 서블릿은 실행 코드 방식에 속한다. 따라서 서블릿을 이용하여 웹 어플리케이션을 개발할 경우
화면에 출력되는 데이터를 조금만 바꾸고 싶어도 코드를 수정하고 컴파일하고 클래스를 알맞은 곳에 복사해주는 작업을 반복해 주어야 했다. 이런 반복 작업은 개발 효율성을 떨어 뜨리는 요인이 되었다.
이후, Sun은 서블릿의 단점을 보완하기 위해 스크립트 방식의 표준인 JSP를 만들었다. JSP는 코드를 수정하면
바로 변경 내역이 반영되었기 때문에 웹 어플리케이션을 개발하는 데 사용되는 주요 기술로 자리 잡기 시작했다.
JSP표준은 서블릿 표준을 기반으로 만들어졌다. 내부적으로 JSP파일이 번역되며 최종 결과물로
서블릿이 만들어진다. 따라서 이 두 표준은 쌍으로 발전하고 있다.
-------------------------------------------------------------------------------------------------------
JSP란 무엇인가.
JSP, 즉 JavaServer Page는 스크립트 언어이며, 다음과 같은 특징을 갖고 있다.
1.자바 언어를 기반으로 하는 스크립트 언어로서 자바가 제공하는 기능을 그대로 사용할 수 있다.
2.HTTP와 같은 프로토콜에 따라 클라이언트의 요청을 처리하고 응답한다.
3.HTML, XML 등 클라이언트가 요청한 문서를 생성하는데 주로 사용된다.
4.서블릿/EJB 등의 엔터프라이즈 기술들과 잘 융합된다.
5.표현 언어, 표현식, 스크립트릿 등 다양한 스크립트 요소와 액션 태그 등을 제공함으로써 보다 쉽게
웹 어플리케이션을 프로그래밍 할 수 있도록 도와준다.
JSP는 HTTP 프로토콜을 알마게 처리할 수 있도록 설계 되었다. 예를 들어 , JSP는 웹 브라우저가 전송한 데이터를 읽어오고 생성한 데이터를 웹 브라우저에 전송하는 것처럼 웹 어플리케이션을 개발하는 데 필요한
기능들을 스크립트 차원에서 제공하고 있다. 또한, 사용자의 세션을 쉽게 관리할 수 있도록 자체적으로 세션 기능을 제공하고 있다.(세션 관리는 사용자의 로그인/로그아웃을 구현하는 데 필수적인 요소인데, JSP가 제공하는 세션 기능을 사용하면 쉽게 로그인/로그아웃 기능을 구현할 수 있다.)
JSP는 주로 웹 브라우저의 요청에 따라 알맞은 HTML 결과 화면을 생성하기 위해 사용된다.
하지만, HTML 뿐만 아니라 XML 문서, PDF 문서 등 다양한 문서를 생성하는 데에도 JSP를 사용할 수 있다.
최근에는 사이트의 정보를 XML 문서로 전송해 주는 서비스를 제공하는 곳이 늘언고 있는 추세인데,
JSP를 사용해서 쉽게 XML 문서를 생성할 수 있기 때문에 이러한 추세를 쉽게 반영할 수 있다.
서블릿과 JSP 그리고 JSTL은 웹 요청을 처리하고 결과를 생성하는 데 사용되는 웹 영역의 기술이다.
--------------------------------------------------------------------------------------------------
웹 컨테이너는 이름 그대로 웹 어플리케이션을 실행할 수 있는 컨테이너이다.
자바에서 웹 어플리케이션은 JSP와 서블렛으로 구현되므로 자바에서의 웹 컨테이너는
JSP + 서블릿 으로 구성된다고 볼 수 있다.
웹 컨테이너는 JSP와 서블릿을 실행시켜 주는 컨테이너로 톰캣, 제티, ClassFish 등이 있다.
(웹 컨테이너의 한 종류인 갑다 톰캣이)
JSP를 사용하는 이유
1.자바 언어를 기바느로 하고 있기 때문에 플랫폼에 상관없이 사용할 수 있다.
2.대규모 어플리케이션을 구현할 때 사용되는 스프링이나 스트럿츠와 같은 프레임워크와 완벽하게
연동되며, 금융권에서 많이 사용되는 EJB 기술과도 완벽하게 연동된다.