1강 웹과 자바
웹 애플리케이션 (브라우저)
- 웹 브라우저는 웹서버에 요청을 보내고 응답 결과를 출력
웹서버
- 클라이언트의 요청을 처리하도록 프로세스를 관리
-요청을 처리한 결과를 클라이언트에 보냄
웹 애플리케이션 서버( 웹 컨테이너)WAS
-웹 애플리케이션의 실행환경
-JSP프로그램을 실행시키고 결과를 웹서버에 전달


컴파일방식: 컴파일과정을 통해 실행파일이나 바이트코드가 만들어져 사용됨
ex)자바 서블릿,JSP, perl, c, c++ 을 이용한 CGI방식
비컴파일방식 : 매 요청마다 스크립트를 해석하여 실행하는 방식
ex) js는 클라이언트에서 실행되는 스크립트언어
CGI(Common Gateway Interface)
동적으로 웹페이지를 생성하기 위한 방식중 하나
-고급 언어프로그램을 실행시켜 HTML코드를 생성한 후 전달함
클라이언트의 요청이 있으면 해당 프로그램을 실행시키기 위해 개별 프로세스를 생성함
-동일한 CGI를 요청해도 요청의 개수만큼 프로세스를 생성하므로 웹 서버에 부하를 줌


WAS(web application server)
웹애플리케이션을 실행하고 관리하는 별도의 전담 프로그램
-모든 요청에 대해 매번 프로세스를 생성하지 않고 하나의 자바 가상 기계 내에서 수행함
-요청을 처리하기 위해 스레드를 생성함
웹페이지 생성 외에도 많은 기능을 수행함
-API제공, 부하균형, 고장조치 등

웹서버
-클라이언트로부터 요청을 받고 결과를 전달하는 기능
ex) 아파치 http server , IIS, Nginx
HTTP프로토콜을 사용하여 클라이언트와 통신함
HTTP: 클라이언트와 웹서버간 웹문서를 전송하기 위한 통신규약
웹서버를 HTTP서버라고 함
웹서버의 구체적기능
클라이언트가 요청한 웹문서를 찾아 전달
클라이언트 요청에 대한 기본적 사용자인증을 처리
문제가있으면 정해진 코드 값으로 응답
프로그램 실행요청이 있으면 처리후 그 결과를 전달
웹 애플리케이션 서버
서버의 성능을 개선하기위해 웹 서버의 기능을 분리
웹서비스의 처리를 위해 동적 페이지를 만들거나 비즈니스 로직을 처리

JSP 와 웹컨테이너
서블릿 (server+applet의 합성어)
applet: 클라이언트에서 동작하는 자바프로그램
웹페이지를 동적으로 생성하기 위한 서버측 java 클래스
자바로 서버쪽에서 동작하는 웹프로그램을 만들기 위한 규약
자바언어로 서블릿클래스를 만들고, 컴파일된 바이트코드를 서버에 탑재하여 웹서비스를 제공
소스를 수정하면 다시 컴파일하여 서버에 탑재해야함(서블릿)
JSP의 경우 WAS가 자동으로 JSP페이지가 수정되었으면 자동으로 바이트코드를 만들어서 웹서비스 제공
JSP(java server pages)
서블릿 대신에 사용할수있는 스크립트 형식의 언어. HTML페이지 내에 삽입됨
JSP페이지는 서블릿으로 변환됨
- 웹 애플리케이션 서버가 자동으로 JSP페이지를 변환하고 컴파일하여 웹서비스를 제공함
JAVA EE 를 구성하는 기술중의 하나
JSP기술은 플랫폼에 독립적
.net기술은 개발과 운용환경에 제약이 있음

웹 컨테이너
웹 컴포넌트를 저장하고 서블릿의 생명주기를 관리
-클라이언트의 서블릿 요청을 실행시키는 역할
서블릿 컨테이너라고도 한다.
-Java로 구현된 서블릿 엔진(서블릿 실행환경)
-JSP를 서블릿으로 변환하는 기능을 포함
ex)tomcat, wildFly,Weblogic, webSphere, JBoss 등
웹서버에서 서블릿이 실행되기 위한환경
-웹서버
-자바실행환경JDK
-서블릿 컨테이너 ex)tomcat
JSP컨테이너
jsp를 서블릿 프로그램으로 변환하는 프로그램
대부분의 서블릿컨테이너는 JSP컨테이너기능을 포함함
JSP컨테이너 자체가 서블릿으로 구현되어있음 서블릿컨테이너에 의해 실행됨
HTTP프로토콜
웹서버와 클라이언트가 통신하는 규약
TCP프로토콜에 기초한 애플리케이션 계층 프로토콜
Connection oriented& stateless 특성
클라이언트가 요청을 보내려면 서버와 네트워크 접속을 먼저 해야함
한번의 요청에 대해 서버가 응답을 한후 서버는 클라이언트의 상태를 유지하지 않음
웹서버의 부담은 줄어드나 상태 관리를 위해 쿠키나 세션이 필요하다
HTTP 요청과 응답절차
연결 설정, 요청 메시지 전송, 응답 메시지 전송, 연결 끊기
클라이언트가 서버에 네트워크연결(TCP접속)을 먼저 해야함 서버에 어떤 특정포트에대해 연결이 되어야함
그다음 요청메시지를 보낼수 있고 요청에 대해 서버는 클라이언트에 응답메시지를 만들어 보내고 네트워크 연결 끊김
요청메시지구조
요청메세지는 시작라인-요청헤더-요청몸체로구성
GET방식에는 요청몸체는 없음
시작라인(요청라인)
-요청방식,URI,버전번호
ex)
GET /index.html HTTP/1.1
GET: 웹서버에게 요청대상에 대해 처리 방식을 지정
/index.html 서버에 존재하는 파일의 URI
HTTP/1.1 HTTP의 버전
요청헤더
-한라인에 하나씩 헤더정보를 기술
-각 라인은 헤더필드이름:값 형식으로 구성
-요청헤더의 끝에 공백라인을 둠

요청메시지의 몸체
-POST요청방식에서만 의미있음
HTML폼에서 작성한 데이터를 POST방식으로 전송할때 사용됨
응답메시지


웹서버와 WAS의 차이
웹 서버(Web Server)와 웹 애플리케이션 서버(WAS, Web Application Server)는 모두 클라이언트의 요청을 처리하는 서버이지만, 이 두 서버는 처리하는 범위와 역할에서 차이가 있습니다.
웹 서버(Web Server)
웹 서버는 주로 클라이언트(주로 웹 브라우저)로부터 들어오는 정적 콘텐츠(HTML, CSS, JavaScript, 이미지 등)를 제공하는 서버입니다. 클라이언트가 요청한 파일을 찾아서 그대로 전달하는 역할을 합니다.
- 역할: 정적인 웹 페이지 및 리소스 파일(예: 이미지, 스타일 시트, 스크립트 등)을 제공.
- 주요 기능:
- HTTP 요청을 받아들여 해당 파일을 찾아 응답으로 전달.
- 정적 리소스 캐싱을 통해 빠른 응답 제공.
- 리버스 프록시 및 로드 밸런싱 기능을 제공하기도 함.
- 대표적인 웹 서버: Apache HTTP Server, Nginx, Microsoft IIS 등이 있습니다.
웹 애플리케이션 서버(WAS, Web Application Server)
웹 애플리케이션 서버는 동적 콘텐츠를 처리하는 서버입니다. 동적인 웹 페이지를 생성하기 위해 비즈니스 로직을 처리하고, 데이터베이스와 상호작용하거나 프로그램 코드를 실행하는 등의 역할을 합니다. WAS는 보통 웹 서버와 함께 작동하여 클라이언트 요청을 처리하고, 서블릿(Servlet), JSP(JavaServer Pages), EJB(Enterprise JavaBeans) 등의 서버 측 기술을 사용하여 동적 웹 애플리케이션을 구현합니다.
- 역할: 비즈니스 로직을 처리하고 동적인 웹 콘텐츠를 생성.
- 주요 기능:
- 동적 웹 페이지 생성(예: 사용자 요청에 따라 다른 결과 제공).
- 데이터베이스와 상호작용하여 데이터를 조회하거나 저장.
- 다양한 비즈니스 로직 수행(예: 사용자 인증, 트랜잭션 관리, 세션 관리 등).
- 주로 서블릿/JSP 같은 동적 콘텐츠 처리.
- 대표적인 WAS: Tomcat, JBoss, WebSphere, WebLogic 등이 있습니다.
주요 차이점
- 주요 역할:
- 웹 서버는 정적인 콘텐츠를 처리하는 것이 주된 역할입니다.
- WAS는 동적인 콘텐츠를 처리하고 비즈니스 로직을 수행하는 것이 주된 역할입니다.
- 처리하는 콘텐츠:
- 웹 서버는 HTML, CSS, 이미지, JavaScript와 같은 정적 리소스를 클라이언트에게 전달합니다.
- WAS는 서블릿, JSP, PHP, ASP.NET 등의 동적인 웹 페이지와 애플리케이션을 처리합니다.
- 위치:
- 웹 서버는 클라이언트와 WAS 사이에서 위치하여 클라이언트의 요청을 받아 정적 리소스를 처리하거나, 동적 요청은 WAS로 전달하는 역할을 합니다.
- WAS는 웹 서버로부터 받은 요청을 처리하고 비즈니스 로직을 수행한 후 그 결과를 웹 서버에 전달합니다.
웹 서버와 WAS의 협력
웹 애플리케이션에서는 일반적으로 웹 서버와 WAS가 협력하여 작동합니다. 예를 들어:
- 웹 서버가 클라이언트의 요청을 받아 정적 리소스를 제공할 수 있는 경우는 직접 처리합니다.
- 동적 리소스가 필요할 때는 웹 서버가 WAS로 요청을 전달하고, WAS는 비즈니스 로직을 처리하여 응답을 생성한 후 웹 서버를 통해 클라이언트로 전달합니다.
이렇게 웹 서버와 WAS는 각각의 역할을 나누어 웹 애플리케이션을 효율적으로 처리합니다.