[CS] JSP (1) - 웹 애플리케이션이란?
Web Application
구성요소 4가지
- 웹 클라이언트
- 웹 브라우저는 웹 서버에 요청을 보내고 응답 결과를 출력한다.
- 우리가 흔히 쓰는 크롬 브라우저를 생각하면 됨
- 웹 서버
- 클라이언트의 요청을 처리하도록 프로세스 관리
- 요청을 처리한 결과인 응답을 클라이언트에 보냄
- 정적 자원 반환
- 웹 애플리케이션 서버 (웹 컨테이너)
- WAS
- 웹 애플리케이션의 실행환경
- JSP 프로그램 / 서블릿을 실행시키고 결과를 웹 서버에 전달
- 비지니스 로직에 따라 동적으로 결과 생성 (웹 컨테이너)
- 동시성 관리, 보안, 부하, 장애 처리까지 포괄적으로 봤을 때 WAS라고 칭함
- 데이터베이스
- 웹 서비스 수행에 필요한 데이터를 저장하고 제공
클라이언트 렌더링
- 웹 문서 자체에 동적 요소를 포함시켜 클라이언트에 전송
- script를 브라우저가 해석해서 페이지를 생성
- dovmfflt, Javascript, 플래시
- 서버 부담을 줄일 수는 있지만 보안 이슈
서버 렌더링
- 클라이언트에게서 받은 요청 메시지를 기반으로 응답 문서를 서버에서 동적으로 생성
- 웹 애플리케이션 서버가 수행한 결과가 웹서버를 통해 브라우저에 전송
- 서블릿, JSP, ASP, PHP, CGI
- 서버에 자원 사용의 부담이 있음
컴파일 방식
- 컴파일 과정을 통해 실행 파일이나 바이트 코드로 만들어져서 사용됨
- 컴파일을 통해 중간 과정 코드가 생성됨, 이후에는 생성된 바이트 코드를 재사용함
- java 서블릿, JSP도 컴파일 방식임
- Perl, C, C++ 을 이용한 CGI 방식
vs. 비컴파일 방식
- 매 요청마다 스크립트를 해석하여 실행하는 방식
- javascript같은 스크립트 언어
CGI가 무엇이죠?
- Common Gateway Interface
- 고급 언어 프로그램을 실행시켜 HTML 코드를 생성한 후 전달함
- 초기에 사용된 기술
- WAS와 비교하여, 클라이언트 요청이 있으면 해당 프로그램을 실행시키기 위해 개별 프로세스를 생성 -> 요청의 개수만큼 프로세스를 생성하기 때문에 요청이 증가할 경우 서버 부하가 발생
WAS
- 웹 애플리케이션을 실행하고 관리하는 별도의 전담 프로그램
- 서버 렌더링으로 문서를 만드는 것은 CGI와 다르지 않지만 모든 요청에 대해 매번 프로세스를 생성하지 않고 하나의 자바 JVM내에서 수행함
- 하나의 프로세스 안에서 스레드를 만들어서 처리함
- 훨씬 실행 효율적
- 웹 페이지 생성 외에도 많은 기능을 수행할 수 있음!
- API 제공, 부하 균형(로드밸런싱), 고장 조치 등
- 자바 기반이지만 .NET 지원하는 것도 있음
- 서버 성능 개선을 위해 웹서버의 기능을 분리한 것이라고 생각하면 됨 (비즈니스 로직에 따른 정적 저리를 웹 서버가 WAS에 일임)
웹 서버와는 무슨 차이?
- 클라이언트로부터 요청을 받고 결과를 전달함
- Apache HTTP Server, lls (MS Window 한정), Nginx 등이 있음
- HTTP 프로토콜을 사용해 클라이언트와 통신하기에 HTTP 서버라고도 함
- 클라이언트가 요청한 웹 문서를 찾아 전달
- 클라이언트 요청에 대한 기본적 사용자 인증을 처리하고 문제가 있으면 정해진 코드 값으로 응답
서블릿
- Server + Applet (클라이언트에서 작동하는 Java 프로그램)
- 웹 페이지를 동적으로 생성하기 위한 서버 단 자바 클래스
- 자바로 서블릿 클래스를 만들고 컴파일 된 바이트 코드(클래스 파일)를 서버에 탑재하여 웹 서비스 제공
- 소스가 수정되면 다시 컴파일 하여 서버에 탑재해야 함
- jsp는 따로 컴파일할 필요가 없고 파일만 교체해두면 자동으로 WAS가 바이트 코드를 만들어 두는 것과는 차이가 있음
웹컨테이너로서의 WAS
- 서블릿 컨테이너라고도 함
- 웹 컴포넌트를 저장하고 서블릿의 생명 주기를 관리함
- 클라이언트의 서블릿 요청을 실행시키는 역할
- JSP를 서블릿으로 변환하는 기능 (이 기능에만 집중해서 JSP 컨테이너라고 부르기도 함)
- Tomcat, WidFly, WebLogic, WebSphere, JBoss
JSP
- 서블릿 대신에 사용할 수 있는 간단한 스크립트 형식의 언어로 HTML 페이지 내에 삽입
- WAS 가 자동으로 JSP 페이지를 서블릿으로 변환(번역)하고 컴파일하여 웹서비스를 제공함
- Java EE (Enterprise Edition) 를 구성하는 기술 중의 하나
특징
- 스크립트 언어
- Java 언어의 특성 활용
- 표현 언어, 표현식, 액션 태그 등 스크립트 적 요소 제공
- 다양한 개발환경이 오픈 소스로 제공됨
- 플랫폼 독립적 (.NET이 윈도우 기반 환경에서만 동작하는 것과 대조됨)
HTTP 프로토콜
- 전송 계층의 프로토콜인 TCP 프로토콜에 기초한 응용 계층 프로토콜
- 웹서버와 클라이언트가 통신하는 규약
- Connection oriented: 연결 설정이 필요함
- Stateless: 응답 후 서버는 클라이언트의 상태를 유지하지 않음. 웹 서버의 부담이 줄어들지만 상태 관리를 위해 쿠키나 세션 기술을 사용
- 요청과 응답 절차: 1.연결 설정 2.요청 메시지 전송 3.응답 메세지 전송 4.연결 끊기
요청 메시지 구조
- 시작라인
- 요청 방식, URI, 버전 번호
- GET /index.html HTTP/1.1
- Request Header
- 한 라인에 하나씩 헤더 정보를 기술
- "헤더필드이름:값" 요청 헤더의 끝에 공백 라인을 둠
- Request Body
- POST 요청 방식에서 사용
- HTML 폼에서 작성한 데이터를 POST 방식으로 전송할 때 사용
응답 메시지 구조
- 시작 라인
- Response Header
- Response Body