웹 관련 기본용어
* 웹의 의미
- 팀 버너스 리가 제안
- 인터넷 기반의 정보 공유 서비스
ㄴ World Wide Web, WWW 또는 W3라고도 함
ㄴ 인터넷 상에 분산되어 존재하는 다양한 정보를
통일된 방법으로 찾아볼 수 있게 하는 정보 서비스
* 인터넷 기반의 전 세계적 정보 공유 공간
- 분산된 웹 서버에 존재하는 하이퍼텍스트(hypertext) 문서들이
서로 연결된 시스템.
* 하이퍼텍스트 (hypertext)
- 웹 상에 존재하는 문서 형태로서,
텍스트 외에 이미지, 동영상 등의 멀티미디어 요소를 포함.
- 하이퍼링크(hyperlink)를 통해 다른 하이퍼텍스트와 연결된다.
ㄴ 문서와 문서가 연결된 구조.
- 웹 브라우저를 이용해서 하이퍼텍스트를 볼 수 있다.
- HTML로 표현되며, HTTP 프로토콜을 사용하여 전송된다.
* W3C
- World Wide Web Consortium의 약자.
- 국제 웹 표준화 기구.
ㄴHTML, HTTP, XML 등의 웹 관련 기술을 관리함.
* 정적 웹 문서
- 정적인 텍스트. 문서의 내용 바뀌지 X.
- 클라이언트가 서버에게 정적 웹 문서를 요청하면,
서버는 해당 문서를 찾아서 전달함.
- 정적 웹 문서를 요청하면 항상 동일한 결과가 전달됨.
- ex) 아래와 같은 HTML
<HTML>
<HEAD>
<title>쑤의 웹 스터디 노트 :)</title>
</HEAD>
<BODY>
<h1>방문을 환영합니다</h1>
</BODY>
</HTML>
* 동적 웹 문서
- 동적 웹 문서를 사용하여 최종 결과가 동적으로 만들어짐.
ㄴ 클라이언트 측 처리와 서버 측 처리 방식이 있음.
ㄴ 클라이언트 측 처리)
: 웹서버가 동적인 요소를 결과 문서로 전달할 때,
그 문서 안에 포함시켜 클라이언트에 전달.
클라이언트는 이 동적인 요소를 받아서 브라우저 상에서 실행해서 결과를 만든다.
즉, 클라이언트가 동적인 요소를 받아서 브라우저 상에서 실행, 결과를 만든다.
ㄴ 서버 측 처리)
: 서버 쪽에서 동적인 프로그래밍 요소를
서버 쪽에서 다 실행시키고, 결과를 다 만들어서
최종 결과를 클라이언트에게 보낸다.
- JSP는 동적 웹 문서를 작성하는 기술임.
ㄴ JSP는 서버 측 처리 동적 웹문서이다.
- ex) 아래의 JSP
<%@ page language="java" contentType="text/html; charset=euc-kr"%>
<HTML>
<HEAD>
<title> 안녕하세요! :) </title>
</HEAD>
<BODY>
<p>지금 시간은 :
<% out.print(new java.util.Date()); %>
입니다.
</p>
</BODY>
</HTML>
ㄴ 이 JSP 요소들이, 서버 쪽에서 실행되고 결과가 만들어져서, 그 결과를 클라이언트에게 전송한다.
웹 애플리케이션의 실행과 구성 요소
* 웹 애플리케이션
- 웹에서 실행되는 응용 프로그램
* 웹 애플리케이션의 구분
- 클라이언트 측 실행/서버 측 실행
- 컴파일 방식/비컴파일 방식
ㄴ 비컴파일 방식 : '인터프리터 방식'이라고도 한다.
웹 서비스의 제공과 구성 요소
1. 웹 클라이언트
- 웹 브라우저는 웹 서버에 요청을 보내고 응답 결과를 출력.
2. 웹 서버
- 클라이언트의 요청을 처리하도록 프로세스를 관리.
- 요청을 처리한 결과를 클라이언트에 보냄.
- 정적 웹문서 : 클라이언트가 웹 문서를 요청하면 웹 서버는 그것을 찾아서 보내줌. 그럼 끝.
ㄴ 클라이언트 요청 ---> 웹서버 : 정적 웹문서 찾아서 보냄 --> 클라이언트.
- 동적 웹문서 : WAS를 거친 후에 웹 서버로 가고, 클라이언트로 간다.
ㄴ 클라이언트 요청 ---> WAS ---> 웹 서버 ---> 클라이언트.
ㄴ 1) 클라이언트측 처리
2) 서버측 처리
3. WAS (= 웹 애플리케이션 서버 ⊃ 웹 컨테이너)
- 웹 애플리케이션의 실행 환경
- 동적인 웹 서비스를 전담하는 서버.
- JSP 프로그램을 실행시키고 결과를 웹 서버에 전달
ㄴ WAS는 JSP나 서블릿의 실행을 관리한다.
- 주기능 : 웹 애플리케이션을 처리해서 동적으로 결과를 만듦.(비즈니스 로직 처리)
- 부기능 : 동시성 관리, 보안 제어, 부하 관리 (로드 밸런싱), 장애 처리 등... (포괄적 의미...)
- 주기능만 --> 웹 컨테이너.
- 주기능 + 부기능 --> WAS.
- 이 강의에서는 그냥 WAS랑 웹 컨테이너를 혼용해서 쓰겠다 :)
4. 데이터 베이스
- 웹 서비스 수행에 필요한 데이터를 저장하고 제공
* 웹 애플리케이션과 실행 위치
클라이언트 측 실행 | 서버 측 실행 |
- 웹 문서에 동적 요소를 포함시켜 클라이언트에 전송 - 웹 브라우저가 해석하여 페이지를 생성 - 애플릿, JavaScript, 플래시, Ajax, CSS - 보안에 문제 있음 |
- 서버에서 실행되어 응답 문서를 동적으로 생성 - 웹 애플리케이션 서버가 수행한 결과가 브라우저에 전달됨 - 서블릿, JSP, ASP, PHP, CGI 방식 - 서버에 부담이 감 ( ∵ 프로그램이 서버에서 실행되니까...) |
* 웹 애플리케이션의 구현 방식
컴파일 방식 | 비컴파일 방식 |
- 컴파일 과정을 통해 실행 파일이나 바이트 코드가 만들어져 사용됨 - Java, 서블릿, JSP - Perl, C, C++을 이용한 CGI 방식 - 응답 속도가 빠르다 : 서버 자원을 효율적으로 활용할 수 있기 때문. |
- 매 요청마다 스크립트를 해석/실행 (중간 코드 만들어지지 X) - JavaScript는 클라이언트에서 실행되는 스크립트 언어 |
컴파일 방식
- ex) JSP --> 서블릿 --> 바이트 코드...
<CGI와 WAS>
- 둘 다 동적 웹 서비스를 담당하는데, 방식이 다르다
- 요새는 CGI는 사용X. WAS 사용한다.
* CGI
- Common Gateway Interface
- CGI : 웹 서버가 응용 프로그램을 직접 호출
---> 클라이언트의 요청이 많아지면 급격히 성능이 저하됨.
1) 동적으로 웹 페이지를 실행하기 위한 방식 중 하나.
- 고급 언어 프로그램(C, C++ 등)을 실행시켜 HTML 코드를 생성한 후 클라이언트에 전달함
- 초기에 많이 사용되었던 기술.
- CGI : 웹 서버와 최종 결과를 만들기 위한 프로그램 사이에 정보를 주고 받는 인터페이스 또는 그 규약.
--> 그러한 표준에 맞춰 프로그램이 작성됐을 때 그것을 'CGI 스크립트'라고 한다.
--> 고급 프로그래밍 언어 사용 가능.
2) 클라이언트의 요청이 있으면 해당 프로그램을 실행시키기 위해서 매번 개별 프로세스를 생성해서 처리한다.
--> 동일한 CGI를 요청해도, 요청의 개수만큼 프로세스를 생성한다
--> (클라이언트의 요청이 많아지면) 웹 서버에 부하를 준다
--> 성능저하.
- 이러한 문제점 때문에 요즘에는 CGI 쓰지 않고 WAS 쓴다.
3) CGI 스크립트 예시)
printf("<html>\n\n<head><title> CGI 문서 </title></head/\n\n");
printf("<body>\n");
printf("<h2> 제 블로그를 방문해 주셔서 감사합니다. </h2>");
...
printf("</body>\n\n</html>");
4) 기타
- CGI 스크립트는 옛날에 쓰였지만 요즘은 잘 사용되지 않음.
- 보통 .cgi cgi-bin 이라는 디렉토리 아래에 .cgi 라는 확장자를 가진다.
* WAS
- Web Application Server
- WAS : 동적 웹 서비스를 담당하는 서버.
ㄴ 스레드 방식을 사용함.
ㄴ 웹 응용 프로그램을 실행시킬 때, 웹 서버가 처리하지 않고, 별도의 WAS를 두어서
WAS에게 처리를 위임한다.
1) 웹 애플리케이션을 실행하고 관리하는 별도의 전담 프로그램
- CGI와 WAS 둘 다 동적으로 웹 페이지를 만드는 방식이지만,
아래의 이유로 요새는 WAS를 사용한다.
- 모든 요청에 대해 매번 프로세스를 생성하지 않고
하나의 자바 가상 기계(JVM) 내에서 수행.
- 요청을 처리하기 위해 스레드를 생성함
ㄴ 상세설명) 요청을 처리하기 위해서 그 하나의 프로세스 안에서
스레드를 만들어서 처리한다.
즉, 프로세스를 여러개 만드는 게 아니라
하나의 프로세스 안에서,
요청이 들어올 때마다 그 하나의 프로세스 안에서 스레드로 처리한다.
--> CGI에 비해 효율적.
요청이 많아지더라도 성능이 급격히 저하되지 않는다.
2) 웹 페이지 생성 외에도 많은 기능을 수행함.
- API 제공, 부하 균형(load balancing), 고장 조치, 동시성 제어, 보안 제어 등등.
3) 기타
- Java 기술을 이용해서 존재
- 경우에 따라서는 닷넷을 지원하는 WAS도 있다.
* 웹 서버 (≒ HTTP 서버)
1) 클라이언트로부터 요청을 받고 결과를 전달하는 기능
- Apache HTTP Server, IIS, Nginx(엔진엑스)
ㄴ Apache HTTP Server :
ㄴ 보통 줄여서 'Apache'라고 부르는 애의 정식 명칭.
ㄴ 아파치 소프트웨어 재단(ASF)에서 만든 무료 공개 소프트웨어.
ㄴ IIS : MS에서 만들었음. --> Windows에서만 동작함.
ㄴ Nginx :
ㄴ 러시아의 이고르 시쇼브가 만들었음.
ㄴ 최근 각광받고 있음. 얘도 무료 공개 소프트웨어.
2) HTTP 프로토콜을 사용하여 클라이언트와 통신함
---> 웹 서버를 HTTP 서버라고 함.
ㄴ 이 둘이 정확히 같은 개념은 아니지만, 이 강의에서는 '웹서버=HTTP서버' 라고 치자.
- HTTP는 클라이언트와 웹 서버 간 웹 문서를 전송하기 위한 통신 규약임.
3) 웹 서버의 구체적 기능
- 클라이언트가 요청한 웹 문서를 찾아 전달
- 클라이언트 요청에 대한 기본적 사용자 인증을 처리
- 문제가 있으면 정해진 코드 값으로 응답
- 프로그램 실행 요청이 있으면 처리 후 그 결과를 전달
* WAS (웹 애플리케이션 서버)
- 서버의 성능을 개선하기 위해 웹 서버의 기능을 분리
- 웹 서비스의 처리를 위해 동적 페이지를 만들거나 비즈니스 로직을 처리
: 이것만 하면 '웹 컨테이너'임.
부가기능까지 해야 'WAS'임.
하지만 우리는 이 강의에서 '웹 컨테이너'와 'WAS'를 같은 거라고 치겠다.
JSP와 웹 컨테이너
서블릿
1) Server + Applet의 합성어.
ㄴ Applet : 클라이언트에서 동작하는 자바 프로그램을 '애플릿'이라고 한다.
---> 서버 쪽에서 동작하는 자바 프로그램(클래스)을 '서블릿'이라고 하는 것! :)
- 웹 페이지를 동적으로 생성하기 위한 서버 측 Java 클래스
- Java 언어에 기초한 웹 프로그램 개발 기술
ㄴ 정확히는, Java로 서버 쪽에서 동작하는 웹 프로그램을 만들기 위한 규약을 일컫는 것.
ㄴ 그 규약에 따라서 개발한 자바 클래스를 우리가 '서블릿' 또는 '서블릿 클래스'라고 이야기한다.
2) Java 언어로 서블릿 클래스를 만들고, 컴파일된 바이트 코드를 서버에 탑재하여 웹 서비스를 제공.
- 소스를 수정하면 다시 컴파일해서 서버에 탑재해야함.
---> 번거로움 ㅠㅠ
---> JSP의 등장 :
ㄴ JSP는 소스가 수정되면 WAS가 자동으로 컴파일 해준다! :)
(WAS가 자동으로 바이트 코드를 만들어줌)
(개발자가 직접 일일히 컴파일 할 필요 X!)
<---> Servlet :
ㄴ 만약 서블릿으로 코딩했다면, 서블릿 소스가 수정되면
개발자가 직접 컴파일 다시 해야한다.
- 서블릿 클래스(Java) -- 컴파일 ---> 바이트 코드 -- 서버에 탑재 --> WAS ---> 웹 서버 ---> 서비스.
3) Servlet 예시
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServlet Response response)
throws ServletException, IOException{
response.setContentType("text/html; charset=EUC-KR");
java.io.PrintWriter out = response.getWriter();
out.println("<HTML> <HEAD> <TITLE> 로그인 </TITLE> </HEAD>");
out.println("<BODY> <H2> 헬로 서블릿 </H2>");
out.println("오늘의 날짜와 시간은 : " + new java.util.Date());
out.println("</BODY> </HTML>");
}
}
ㄴ HelloServlet 이라는 자바 서블릿 클래스를 작성.
※ JSP 예시 : JSP로 위와 동일한 프로그램을 만들 경우
<%@ page language="java" contentType="text/html; charset=euc-kr"%>
<HTML>
<HEAD>
<title> 헬로 JSP </title>
</HEAD>
<BODY>
<p> 오늘의 날짜와 시간은 :
<% out.print(new java.util.Date()); %>
</p>
</BODY>
</HTML>
JSP
1) 서블릿 대신 사용할 수 있는 스크립트 형식의 언어.
- HTML 내에 삽입됨.
2) JSP는 서블릿으로 변환됨
- WAS가 자동으로 JSP를 변환하고 컴파일하여 웹 서비스를 제공함.
ㄴ JSP --- WAS ---> Servlet
3) Java EE를 구성하는 기술 중의 하나.
- EE(엔터프라이즈 에디션) : SE(스탠다드 에디션)의 확장판.
복잡한 거 구현 시 사용. ex) 전산용, 은행 프로그램 개발 등...
4) 특징
- 스크립트 언어로 HTML에 삽입됨
- Java 언어의 특성을 활용
- 표현 언어, 표현식, 액션 태그 등의 스크립트적 요소를 제공
- 다양한 개발 환경이 오픈 소스로 제공됨
ㄴ JSP는 오픈 소스 형태로 운영되므로 다양한 기술이 지원됨
- JSP 기술은 플랫폼에 독립적
ㄴ 반면에 .NET 기술은 개발과 운용 환경에 제약이 있음 (Windows에서만 사용 가능)
5) JSP의 처리 과정
- ※ 변환 = 번역 = 번안
웹 컨테이너 (≒ 서블렛 컨테이너)
- 이 수업에서는 '웹 컨테이너'와 'WAS'를 혼용해서 쓰겠다.
1) 웹 컴포넌트(ex. JSP, Servlet 등)를 저장하고 서블릿의 생명주기를 관리
- 클라이언트의 서블릿 요청을 실행시키는 역할
2) 서블릿 컨테이너 라고도 함
ㄴ 사실 완전히 똑같은건 아닌데, 이 강의에서는 그냥 같은 거라고 치자.. :)
- Java로 구현된 서블릿 엔진 (서블릿 실행 환경)
- JSP를 서블릿으로 변환하는 기능을 포함 --> JSP 컨테이너 기능을 가진다.
3) Tomcat, WildFly, WebLogic, WebSphere, JBoss 등
4) 웹 서버에서 서블릿이 실행되기 위한 환경
- 웹 서버, 자바 실행 환경(JDK), 서블릿 컨테이너(ex. Tomcat)
5) JSP 컨테이너
- JSP 페이지를 서블릿 프로그램으로 변환
- 대부분의 서블릿 컨테이너는 JSP 컨테이너 기능을 포함함
- JSP 컨테이너 자체가 서블릿으로 구현되어 있음
ㄴ 서블릿 컨테이너에 의해 실행됨
HTTP 프로토콜
HTTP 프로토콜의 이해
1) HTTP 프로토콜의 정의
- 웹 서버와 클라이언트가 통신하는 규약
ㄴ TCP 프로토콜에 기초한 애플리케이션 계층 프로토콜(=응용 계층 프로토콜)
2) Connection oriented & Stateless 특성
- Connection oriented : 클라이언트가 요청을 보내려면 먼저 서버와 네트워크 접속을 해야 한다.
ㄴ 네트워크 접속 : TCP 접속. 정확히는, 서버의 어떤 특정 포트에 대해 그 접속 연결이 처리되어야 한다.
- Stateless : 서버가 응답한 후에 서버는 클라이언트의 상태를 유지하지 X
- 웹 서버의 부담이 줄어들지만, 상태 관리를 위해서 쿠키나 세션이 필요하다.
3) HTTP 요청과 응답 절차
- 연결 설정, 요청 메시지 전송, 응답 메시지 전송, 연결 끊기
HTTP 요청 메시지
구조
1. 시작라인
1) 시작 라인 : 요청방식, URI, 버전 번호
2) 예시
GET /index.html HTTP/1.1 <-- 시작라인 Host: www.example.com <-- 요청 헤더 .... |
- GET : 웹 서버에게 요청 대상에 대해 처리 방식을 지정
- /index.html : 서버에 존재하는 파일의 URI
- HTTP/1.1 : HTTP의 버전
2. 요청 헤더
- 한 라인에 하나씩 헤더 정보를 기술
- 각 라인은 "헤더필드이름:값" 형식으로 구성됨
- 요청 헤더의 끝에 공백 라인을 둠
- 요청 헤더 예시)
- 각각의 헤더필드 이름과 기능 자세히 알 필요X
--> 궁금한면 W3C 사이트 가서 보면 된다.
- 요청헤더 : 클라이언트에서 서버 쪽으로 가는 데이터.
ㄴ 클라이언트(브라우저)가 서버한테 요청을 보내면서 요청 헤더를 보낼 수 있음
3. 요청 메시지의 몸체
- POST 요청 방식에서만 의미 있음
ㄴ GET 방식의 요청일 때는 요청 메시지 몸체가 쓰이지 않는다.
- HTML 폼에서 작성한 데이터를 POST 방식으로 전송할 때 사용됨
HTTP 응답 메시지
구조
1. 시작라인
- 구성 : HTTP 버전, 서버의 응답코드, 설명
- 서버의 응답 코드 및 뜻
200 OK - 클라이언트 요청이 성공적으로 끝남 400 Bad Request - 잘못된 요청 401 Unauthorized - 인증 오류 403 Forbidden - 사용자 허가 모드 오류 404 Not Found - 요청한 문서가 존재하지 않음 405 Method Not Allowed - 요청한 방식을 지원하지 않음 500 Internal Server Error - 서버에서의 실행 오류 503 Server Unavailable - 일시적으로 요청을 처리할 수 없음 |
ㄴ 400번대 : 요청에 문제가 있다.
ㄴ 500번대 : 서버 쪽에 문제가 있다.
2. 응답헤더
- 응답헤더 : 서버에서 클라이언트 쪽으로 가는 데이터.
ㄴ 서버가 어떤 데이터를 클라이언트쪽으로 보내면서,
내가 이런 데이터 정보를 줄 테니까 브라우저가 이 응답 헤더를 가지고
내가 보낸 이 응답 몸체를 브라우저로 화면 출력 시 활용해라.
<--> 요청헤더 : 클라이언트에서 서버 쪽으로 가는 데이터.
ㄴ 클라이언트(브라우저)가 서버한테 요청을 보내면서 요청 헤더를 보낼 수 있음
3. 응답 몸체
- 브라우저가 받아서 화면 상에 출력하는 내용.
4. 응답 메시지 예)
참고글
'Programming > Computer Science Fundamentals' 카테고리의 다른 글
[선형대수] 1. 일차연립방정식 ~ 2. 행렬과 가우스 소거법 (0) | 2021.09.26 |
---|---|
[JSP] 4. JSP 동작 원리 (0) | 2021.09.17 |
[JSP] 3. JSP 개요 (0) | 2021.09.17 |
[JSP] 2. 개발 환경 설정하기 (0) | 2021.09.17 |
[빅데이터의 이해] 6. 빅데이터 기술2 (0) | 2021.09.11 |
[빅데이터의 이해] 5. 빅데이터 기술1 (0) | 2021.09.10 |
[빅데이터의 이해] 4. 빅데이터의 활용2 (0) | 2021.09.10 |
[빅데이터의 이해] 3. 빅데이터의 활용1 (0) | 2021.09.09 |