1. 웹 서비스
클라이언트 - 서버 모델
웹 (WWW→ World Wide Web) 서버의 TCP 포트 번호 80번으로 지정
URL (Uniform Resource Locator)
웹 서버 지칭
프로토콜, 연결하는 서버의 호스트 이름, 서버 내부의 파일 경로명으로 표현
https://www.korea.co.kr/welcome.html 프로토콜 이름 / 웹 서버 host 이름 / 서버 내부의 파일 경로명
유닉스, 리눅스 시스템에서의 웹 서버 구현
http://www.korea.co.kr/~hong // 로그인 이름 : hong // 홈 디렉토리 : /public_html/index.html
웹 서비스의 동작 원리
- 사용자가 웹 브라우저에 URL 입력
- 클라이언트는 서버 호스트 이름을 DNS 서버에 전송하여 서버의 IP주소를 얻음
- DNS 응답 수신 전까지 인터넷이 안됨
- IP주소와 Well-known 포트 80번을 이용하여 웹 서버와 TCP 연결(3-hand shake)시도
- 해당 목적지 주소로 데이터 패킷을 생성하여 전송
- TCP연결이 설정되고 클라이언트가 서버에게 GET 명령(html, css등)을 전송
- 서버가 클라이언트에게 요청받은 웹 문서 회신
- 둘 사이의 TCP 연결 해제
- 웹 브라우저는 해당 파일의 내용 사용자가 볼 수 있게끔 화면에 표시
APM의 웹 서비스 구조
APM : Apache + PHP + MySQL
- Apache : 웹 서버 프로그램, 계속 80번 포트를 열고 프로세스를 돌림
- PHP
- 동적 문서를 생성하는 프로그래밍 언어
- HTML 언어의 기능을 보완하여 문서 내부에 PHP 코드를 추가하는 형식
- 모든 종류의 운영체제에서 지원(ASP는 Window에서만 작동)
- 공개용 데이터베이스인 MySQL과도 연동이 쉬움
- MySQL : 동적인 부분을 채워줄 데이터베이스
APM 관점에서의 웹 서비스의 동작 원리
웹 브라우저가 Apache에 웹 문서 요청
PHP 코드 처리 필요 시 PHP에게 요청
데이터베이스 처리 필요 시 MySQL에게 요청
데이터베이스 결과 회신
PHP가 실행 결과인 HTML 코드 회신
웹 문서를 웹 브라우저에 회신
PHP 코드의 처리
- HTML 문서 내용의 일부로 작성
- , ?> 구분자 사용
- PHP 코드가 포함된 HTML 문서는 확장자가 .php임
- PHP 코드는 서버에서 실행되고 결과만 회신된다
// 서버에서 작성한 문서
<HTML>
<BODY>
<? $value = 10;?>
출력<br>
<? echo $value;?>
</BODY>
</HTML>
// 클라이언트에서 확인되는 문서
<HTML>
<BODY>
출력<br>
10
</BODY>
</HTML>
2. HTML
HTML이란
- HyperText Markup Language로 웹 문서를 작성하는 언어임
- 어느 위치에 어떤 데이터를 어떤 모양으로 표시할지 tag등으로 나타냄
- HTML 문서는 웹 서버에 보관됨
- 웹 브라우저는 클라이언트에게 HTML 문서를 해석해서 나타냄
HTML 문서의 구조
헤더와 바디로 구성
시작 tag와 끝 tag로 감싸는 형식임
<HTML> <HEAD> <TITLE> HTML의 예 </TITLE> </HEAD> <BODY> HTML 문서의 내용 </BODY> <HTML>
3. HTTP
HTTP란
- HyperText Transfer Protocol
- 웹 문서를 전송하는 프로토콜
- HTTP: TCP 포트 80번 사용
HTTP의 요청과 응답 (RFC 2616으로 발표된 HTTP 1.1 버전)
- 클라이언트의 요청과 서버의 응답에 의해 동작하는 간단한 프로토콜
- 동작 원리
- HTTP 클라이언트가 서버에 요청 전송(요청 메서드, URL, HTTP 버전과 기타 부가 정보 포함)
- HTTP 서버가 요청의 결과인 응답 코드가 포함된 정보를 회신
비상태 연결
- 요청과 응답 이후, 연결이 끊어지므로 비상태 프로토콜
- state-less protocol
- web 문서가 클 경우 복잡하므로 연결 존재에 따른 상태정보를 저장하지 않음
MIME 유사 메시지
- HTTP의 요청 및 응답 메세지는 MIME 유사 구조를 사용해 데이터 전송
- MIME : Multipurpose Internet Message Extensions
- 대용량 binary file, ASCII code encoding 가능 등 다양한 메세지를 지원
요청
요청 메시지 구조
| 요청문(Request Line) | <요청 메서드> <URL> <HTTP 버전> (예 GET /file HTTP/1.1) | 헤더(Header) | <헤더 이름> : <헤더 값> | | 공백 한 줄 | | 바디(Body) |
요청 메서드: 클라이언트가 서버에 실행을 요구하는 명령
요청 메서드의 명령
| GET | 클라이언트가 서버에 URL이 가리키는 웹 문서의 내용을 전송하도록 요구 문서의 내용은 서버가 회신하는 응답 메시지의 바디에 포함 | | HEAD | 문서 내용보다는 특정 문서의 정보를 원할 때 사용 | | POST | 클라이언트가 서버에 정보를 전송 게시판, 방명록과 같이 사용자가 입력한 정보를 서버에 전달하는 용도로 사용 | | PUT | 클라이언트가 서버에 문서를 전달하려고 사용 문서 내용은 바디에 포함 |
응답
응답 메시지 구조
| 상태문( Status Line) | <HTTP 버전> <상태 코드> <상태 이름> | | 헤더 (Header) | | 공백 한 줄 | | 바디 (Body) |
상태 코드
코드 이름 의미 200 OK 요청이 성공적으로 수행 202 Accepted 클라이언트의 요청을 수신하였으나, 즉각 실행되지 않고 있다 400 Bad Request 요청 메시지의 내용에 문법 오류가 존재한다 401 Unauthorized 요청을 실행하는 데 필요한 적절한 권한이 존재하지 않는다 403 Forbidden 서비스 요청이 거부되었다 404 Not Found 원하는 문서를 찾을 수 없다 500 Internal Server Error 서버 내부에 불가피한 오류가 발생하였다 501 Not Implemented 요청 사항을 수행할 수 없다
HTTP의 동작 과정
요청 메시지
GET /index.php HTTP/1.1 # 요청문 Host: uu.ac.kr # 헤더 # 공백 한 줄
응답 메시지
HTTP/1.1 200 OK # 상태문 Date: Thu, 12, Feb 2023 03:45:32 GMT # 헤더 Server: Apache/1.3.29 ~~ ~~ ~~ ~~ # 공백 한 줄 <HTML> # 바디 <HEAD> ~~~~ </HTML>