2022. 11. 30. 11:34ㆍ리눅스(Linux)
Web Server의 이해
- Web Server로 요청한 클라이언트가 Web Browser 를 통하여 접속을 요청하면, 요청한 데이터를 클라이언트 Web Browser로 전송하는 역할을 하는 Server를 말한다.
$ Web Server 동작 과정
1. 클라이언트 Web Browser에서 Web Server로 데이터 요청
2. 클라이언트는 IP주소가 아닌 Web Server의 Domain Name 처리를 진행하므로 DNS서버를 통해 Web Server의 Domain Name을 Web Server의 IP주소로 변환
3. 변환한 IP주소를 이용하여 Web Server 80번 포트를 이용하여 TCP연결을 진행 (세션연결 : TCP 3way - handshaking)
4. 세션 연결 완료 후 Web Server는 DocumentRoot로 정의된 디렉터리에 저장되어 있는 Main Page(Code형태)를 Client에게 전송
5. 클라이언트는 서버로부터 전송 받은 Main Page(Code형태)를 Web Browser가 이를 해석하여 클라이언트 화면에 출력
$ 웹 프로그래밍
- HTTP 프로토콜로 통신하는 클라이언트 프로그램 또는 서버 프로그램을 개발하는 것을 말한다.
- 일반적으로 사용자의 웹 브라우저를 통해 사용 할 수 있는 웹 프로그램을 개발하는 것을 의미한다.
- 웹 프로그래밍의 영역으로는 Client Side영역(Front-End)과 Server Side영역(Back-End)으로 구분 된다.
- Front-End 영역에서는 웹페이지를 사용하는 사용자의 User Interface 등을 구현한다. ( 웹페이지 디자인, 이벤트 처리 등 )
- Back-End 영역에서는 사용자 요청에 따른 데이터 처리 및 응답 데이터 생성등의 작업을 수행한다. ( 내부 데이터 처리 작업 )
$ HTTP ( HyperText Transfer Protocol )
- 인터넷상에서 데이터를 송수신하기 위한 통신규약 ( Client & Server Model Protocol )
- HTTP는 TCP/IP 기반의 통신을 진행하며, 기본 포트번호로 TCP/80번을 사용한다.
- HTTP는 어떤한 종류의 데이터든지 전송할 수 있도록 구현되어있다. ( 텍스트, 이미지, 비디오, 오디오 등 )
- HTTP Version : 0.9 ( 읽기전용 ) / 1.0 ( 클라이언트에서 서버로의 데이터 전송가능 ) / 1.1 ( 1.0 + 데이터 변경 삭제 )
- WEB Client : 웹 브라우저 ( 크롬, 엣지, 사파리, 웨일 등 ) / 데이터 요청을 진행하고, 서버의 응답을 해석하는 역할
- WEB Server : 웹 서버 서비스 ( Apache, Nginx, IIS 등 ) / 데이터 요청을 받아들여 해당 요청에 맞는 데이터를 만들어 응답하는 역할
Request & Response
$ HTTP Request
- 웹 클라이언트에서 웹 서버로 자원을 요청 (URL)
- 다양한 메서드 방식을 지원하며, 역할이 다르다
Method | 설명 | CRUD 역할 |
GET | 정보 요청 | Read |
POST | 데이터 전송 | Create |
PUT | 데이터 변경 요청 | Update |
DELETE | 데이터 삭제 | Delete |
OPTIONS | 지원하는 Method 정보 요청 | - |
$ HTTP Response
- 웹 클라이언트의 Request에 대한 처리를 진행하고, 해당 결과를 응답
- 응답 코드에 따라 웹 클라이언트에서 요청에 대한 결과를 보여준다
CODE | 의미 | 설명 |
1XX | Information | 임시응답, 지속적인 통신진행 |
2XX | Success | 클라이언트의 요청이 성공적으로 처리 되었음 (200 OK) |
3XX | Redirection | 요청을 처리 할 문서가 이동되었음을 알림 (301 Object Moved) |
4XX | Client Error | 클라이언트가 서버에 존재하지 않는 페이지를 요청 (404 Page Not Found) |
5XX | Server Error | 서버에서 요청을 처리하는 중 오류가 발생 (500 Internal Server Error) |
$ HTTP Message Format
Start Line ( 요청라인 / 상태라인 )
- 요청라인 : 메서드 방식 및 요청 URL 정보 / 버전 정보
- 상태라인 : 응답 코드 / 버전 정보
HTTP Header
- 요청에 필요한 데이터들이 포함되는 영역
- 이름 : 값 형식의 표현방식을 사용
- EX : Content-Type: application/pkix-crl
CRLF ( Blank Line “\r\n” )
- 빈 줄 ( \r\n ) : Carrige Return
- HTTP Header와 HTTP Body를 구분하는 역할을 한다.
HTTP Body
- 서버와 클라이언트가 주고받는 데이터를 포함하는 영역
- 클라이언트가 서버로 요청 시 넘겨주는 POST 데이터를 포함
- 서버가 클라이언트로 응답하는 HTML Code 데이터
Uniform Resource Locator
$ URL ( Uniform Resource Locator )
- 클라이언트가 서버에 요청하는 웹 문서의 경로 ( 서버에 저장되어있는 자원의 위치정보를 명세 )
- URI ( Uniform Resource Identifier ) : 자원의 위치 정보 및 쿼리정보등을 포함하는 주소 ( URI의 하위 요소 : URL, URN )
- URI는 서버내의 존재하는 특정 자원의 고유한 주소값을 의미한다. ( EX : 게시판 3페이지의 5번째 게시글 )
URL | 의미 |
http | URL을 사용 할 프로토콜의 종류 |
www.example.com | FADN (Host Name + Domain Name) |
80 | 서비스 요청 포트번호 (일반 WEB TCP/80번 포트 사용) |
/service | 요청 할 리소스가 존재하는 서버 경로 디렉터리명 |
cate=2&kind=test | 요청 시 필요한 정보전달 (이름=값 & 이름=값) |
#n10 | HTML 앵커 조작에 사용 |
$ 간편 URL ( Elegant Uniform Resource Locator )
- 기존 복잡하고 길게 표현되던 형식의 URL구조를 갂편하게 표현하는 방식을 의미한다.
- Python Django Framwork에서도 지원되며, 기존 URL구조를 좀 더 직관적이고 간단하게 표현한다.
- Python Django Framwork에서는 정규표현식을 통해 유연하게 URL을 표현 할 수 있는 기능 또한 제공된다
Static Page & Web Server
$ Static Page ( 정적 페이지 )
- 클라이언트의 요청에 항상 동일한 응답을 하는 페이지
- HTML, JavaScript, CSS, 이미지 등으로 이루어진 페이지
- 하이퍼 링크를 통해 문서를 연결하고 보여주는 것이 목적
- 게시판이나 회원가입 기능 등이 없는 단순한 홈페이지
- 웹 사이트의 가장 기초적인 형태.
$ WEB Server ( 웹 서버 )
- 웹 클라이언트의 요청을 받아 처리하는 서버
- 주로 HTML, JavaScript, CSS, 이미지 등의 정적 페이지를 처리
- ASP, JSP, PHP 등의 동적 페이지 처리는 WAS로 처리를 넘김
- 대표적인 WEB Server의 종류 : Apache, Nginx, IIS
Dynamic Page & Was Server
$ Dynamic Page ( 동적 페이지 )
- 클라이언트의 요청이 있을 때 마다 다른 응답을 주는 페이지
- 누가, 언제, 어떻게 요청을 했는지에 따라 응답결과가 달라진다.
- Client의 다양한 요청에 따라 상황에 맞는 적절한 처리가 가능하다.
- 회원가입, 로그인, 게시판 기능이 있는 홈페이지
- 서버측에서 데이터 처리를 담당하는 서버가 추가로 요구 된다.
$ WAS Server ( 웹 어플리케이션 서버 )
- 동적 페이지처리 요청을 받아 처리하고 결과를 WEB으로 반환
- Dynamic Page 구성 ( 특정 사용자의 데이터를 불러와 표시 )
- DB와 연동하여 데이터 조회, 생성, 수정, 삭제 등의 기능을 수행
- 대표적인 WAS Server의 종류 : Tomcat, JBoss, Jeus, Jetty
Web Server 기술변화 과정
$ WEB Server 기술변화 과정
- 초창기 웹 서비스는 정적인 처리만을 진행하였으며, 웹 서버만을 이용하여 사용자의 모든 요청을 처리하였다.
- 이후 사용자의 다양한 요청에 따른 동적처리가 점차 필요해졌으며, 동적처리를 위한 프로그램을 별도로 제작하여 사용하게 된다.
- 동적처리를 위한 프로그램을 웹 서버와 연결하기위해 CGI 기술이 사용되었으며, CGI를 이용하여 연결 된 프로그램에서 동적처리를 수행하였다.
- 하지만 현재는 CGI의 단점에의해 웹 서버 내부모듈을 사용하거나, 별도의 WAS 서버를 이용한 동적처리를 진행하는 형태로 발전되었다
$ CGI ( Common Gateway Interface )
- 웹서버와 독립적인 프로그램 사이에 정보를 주고받을 수 있는 인터페이스를 제공하는 역할을 수행한다.
- 어떠한 언어든 규격에 맞는 CGI 프로그램을 개발 할 수 있다.
- CGI 프로그램은 데이터베이스와 연동하여 데이터를 가져와 동적인 페이지 처리를 할 때 사용된다.
- CGI 프로그램은 요청마다 별도의 프로세스를 따로 생성 후 처리작업을 진행하여, 요청이 많아질 경우 웹 서버의 부하도가 증가한다.
- CGI 대안기술1 : 웹 서버 내부에 클라이언트의 요청을 처리 할 내부 모듈을 탑재하는 방식 ( mod_perl, mod_php, mod_python, mod_wsgi )
- CGI 대안기술2 : 애플리케이션 처리 전용 서비스 환경 구축 및 사용 ( 현재의 WAS Server의 형태 )
WEB Server
- Apache, Nginx, IIS 등의 서비스를 운영
WAS Server
- Tomcat, JBoss, Jeus, Jetty 등의 서비스를 운영
Database Server
- Oracle, MySQL, MS-SQL 등의 서비스를 운영
'리눅스(Linux)' 카테고리의 다른 글
암호화 기초 알고리즘[ 대칭 키(비밀 키), 비대칭 키(공개 키), 키 교환, 해시 ] (0) | 2022.12.01 |
---|---|
[Centos 7] Apache 서버 구동 (httpd 패키지) (0) | 2022.12.01 |
[Centos 7] DNS ( Domain Name System ) (0) | 2022.11.29 |
[Centos 7] PAM (Pluggable Authentication Modules) 실습 (0) | 2022.11.29 |
[Centos 7] Linux Authentication Module - PAM (Pluggable Authentication Modules) (0) | 2022.11.29 |