카테고리 없음

[Chapter 13] 웹 WWW(클라이언트-서버 모델)

devrabbit22 2025. 2. 18. 09:16

전 세계적으로 웹(World Wide Web) 서버의 TCP 포트는 0번으로 지정되어있다. 클라이언트에 해당하는 웹 브라우저는 이 포트 번호를 이용해 서버와 연결을 시도한다. 웹 서버와 연결이 설정되면, 클라이언트의 정보 요구에 대해 서버가 웹 문서를 회신하는 방식으로 응답한다. 서버가 전송한 문서 내용은 클라이언트의 웹 브라우저를 통해 사용자 화면에 표시된다.

클라이언트와 서버 사이의 연결은 사용자의 정보 요구가 발생할 때마다 새로운 연결을 설정하고 해제하는 과정을 반복한다. 즉, 서버가 제공하는 정보의 전송은 TCP 연결에 의해 이루어지지만, 웹 문서의 전송이 완료되어 사용자가 웹 브라우저로 보는 시점에는 TCP 연결이 이미 해제된 상태이다.

클라이언트-서버 모델

클라이언트와 서버의 연결 설정 해제 과정은 사용자가 URL 주소를 새로 입력할 때마다 반복된다. 이 과정에서 화면에 표시하려는 내용 중 사진 같은 멀티미디어 데이터가 존재하면 클라이언트는 해당 사진을 보관하는 서버와 추가로 TCP 연결을 한다.

클라이언트가 웹 서버를 지칭할 때 사용하는 주소를 URL(Uniform Resource Locator)이라 한다. URL 주소는 사용하는 프로토콜, 연결하고자 하는 서버의 호스트 이름, 서버 내부의 파일 경로명이라는 세 부분으로 표현한다. 

ex) 다음 URL 주소는 http라는 프로토콜을 사용하여 www,.korea.co.kr이라는 웹 서버에 존재하는 welcome.html파일을 요청한다

http://www.korea.co.kr/welcome.html

웹 서버가 유닉스나 리눅스 시스템에 구현되엇을 때, 일반 사용자가 홈페이지를 만들면 홈 디렉토리 밑에 public_html 디렉토리를 만들어 index.html이라는 파일을 기본 웹 문서로 작성한다.

ex) 로그인 이름이 hong이면 hong 사용자의 홈 디렉토리에 위치한 public_html/index.html 문서는 다음과 같은 URL 주소를입력하여 볼 수 있다. 여기서 HTTP(HyperText Transfer Protocol)는 클라이언트의 요청과 서버의 응답 정보를 전송하기 위한 목적으로 구현된 프로토콜이다.

http://www.korea.co.kr/~hong

클라이언트와 서버 사이의 데이터 전송 과정 요약

사용자가 http://www.korea.co.kr/welcome.html 형식의 URL 주소를 입력하면, 서버의 호스트 이름인 www.korea.co.kr을 DNS 서버에 전송하여 IP 주소를 얻어낸다. 이후 IP주소와 Well-Known 포트인 80번을 사용해 웹 서버 프로그램과 TCP 연결을 시도한다.

TCP 연결이 설정되고 클라이언트가 welcome.html 문서의 내용을 요청하면, 서버가 이를 클라이언트에 회신 후 둘 사이의 TCP 연결을 해제한다. 클라이언트는 수신한 정보를 사용자가 볼 수 있게 웹 브라우저 화면에 표시한다. 따라서 사용자가 화면을 보는 시점에는 클라이언트와 서버 사이에 어떠한 전송 계층의 연결도 존재하지 않는다.

웹 서비스의 동작 원리

  1. 사용자가 웹 브라우저에 URL 주소를 입력하면(1)
  2. 클라이언트(웹브라우저)는 서버의 호스트 이름을 DNS 서버에 전송하여 웹 서버의 IP 주소를 얻어낸다(2)
  3. 이후 웹 브라우저는 DNS 서버로부터 받은 IP 주소와 Well-Known 포트인 80번을 사용하여 웹 서버와 TCP 연결을 시도한다(3)
  4. TCP 연결이 설정되고 클라이언트가 서버에 최초 화면 내용을 얻기 위해 Get 명령을 전송하면(4)
  5. 서버가 요청한 웹 문서를 웹 브라우저에 회신한 후(5)
  6. 둘 사이의 TCP 연결을 해제한다(6)
  7. 웹 브라우저는 해당 파일의 내용을 사용자가 볼 수 있게 화면에 표시한다(7)

일반적으로 웹 브라우저, 웹 서버, DNS 서버는 모두 다른 호스트에서 실행된다. 그리고 DNS 서버를 이용해 서버의 IP주소를 얻는 작업은 모든 네트워크 응용 환경에서 클라이언트가 가장 먼저 실행한다.

APM의 웹 서비스 구조

PHP는 유닉스나 리눅스 환경에서 주로 사용되며, 웹 서버 프로그램인 아파치와 데이터베이스 기능을 지원하는 MySQL이 서로 연동해 동작한다. 이 세 가지를 통칭하여 APM 이라 부른다.

PHP는 HTML 언어의 기능을 보완하는 역할을 하여 HTML 문서 내부에 PHP 코드를 추가하는 형식으로 사용한다 클라이언트가 웹 문서를 요청하면, 서버는 웹 문서에 포함된 PHP 코드를 먼저 실행한 후에 그 결과를 웹 문서에 반영하여 클라이언트에 회신한다.

PHP와 비슷한 기능을 수행하는 ASP(Active Server Page)는 MS 윈도우즈 서버에서 제공하는 다양한 컴포넌트를 활용할 수 있다는 장점이 있다. 대부분의 일반 사용자는 윈도우즈 운영체제에 익숙하기 때문에 ASP를 사용하기 편리하지만, 유닉스나 리눅스 등의 운영체제에서 사용할 수 없다는 단점이 있다. 그에 비해 PHP는 모든 종류의 운영체제에서 지원하며, 공개용 데이터베이스인 MySQL과도 연동하기 쉽다.

APM의 동작 원리

  • 클라이언트 기능을 수행하는 웹 브라우저는 웹 서버 기능을 수행하는 아파치 연결을 설정하여 필요한 웹 문서를 요청한다(1)
  • 문서 내용이 HTML만으로 구성되었으면 PHP, MySQL과의 연동 과정을 생략하고, 아파치 서버가 바로 웹 브라우저에 문서 내용을 회신한다(6)
  • 웹 문서에 PHP와 MySQL 기능을 사용하는 코드가 있으면 PHP에 해당 코드를 전송하여 처리하도록 요청한다.(2)
  • MySQL 데이터베이스에 저장된 데이터와 접속이 필요하면 해당 질의어를 MySQL에 보내(3)
  • 원하는 데이터를 받아야 한다(4)
  • PHP가 아파치 서버에 정보를 회신할 때는(5)
  • 모든 정보가 HTML로 변역되므로 PHP코드, MySQL 처리를 위한 질의어 등이 웹 브라우저에 회신되지 않는다(6)

이는 PHP코드를 웹 브라우저에게 회신하지 않음으로써, 어렵게 개발한 PHP 코드가 공개적으로 노출되는 것을 방지하는 장점이 있다.

PHP코드의 처리

PHP 코드는 HTML 문서 내용의 일부로 작성되며, '<?'와'?>'구분자를 사용하여 HTML 코드와 구분한다.

ex)웹 문서의 내용이 다음과 같으면 별색으로 표시한 부분이 PHP 코드이고, 나머지는 HMTL 코드이다. MySQL 데이터베이스 관련 코드는 사용하지 않았다.

<HTML>
	<BODY>
		<? $value = 10; ?>
		츨력<br>
		<? echo $value; ?>
	</BODY>
</HTML>

위 문서 내용을 보관하는 웹 서버의 주소가 www.korea.co.kr이고, hong이라는 사용자의 public_html 디렉토리 밑에 index.php라는 파일 이름으로 저장되어있다고 가정하면 php 코드가 포함된 html 문서는 확장자가 php이다.

<HTML>
	<BODY>
		출력<br>
		10
	</BODY>
</HTML>

클라이언트의 웹 브라우저 주소에 http://www.korea.co.kr/~hong을 입력하면 웹 서버에서는 위의 절차에 따라 서버에 해당 문서를 요청한다. 2와 5의 과정을 통해 아파치에 회신하는 문서 내용에서 PHP 코드는 PHP 번역기에 의해 번역되었음으로 위와 같이 수정된다. 

  • 결과적으로 클라이언트에 회신되는 문서에는 PHP코드가 존재하지 않는다.
  • 이를 수신한 웹 브라우저는 HTML 태그를 해석하여 출력하고, 웹 서버와의 연결을 종료한다.
  • 클라이언트에서 소스 보기 등의 기능을 사용해도 웹 서버에 보관된 PHP 코드의 원본을 확인할 수 없다.

Reference

쉽게 배우는 데이터 통신과 컴퓨터 네트워크