네트워크 응용은 주변에서 흔히 찾아볼 수 있다. 웹을 검색하고, 이메일을 보내고, 온라인 게임을 하는 등이 네트워크 응용을 사용하고 있는 것이다. 흥미로운 것은 모든 네트워크 응용들은 동일한 기본적인 프로그래밍 모델에 기초하고 있으며, 비슷한 논리 구조를 가지며, 동일한 프로그래밍 인터페이스를 사용한다는 점이다.
The Client-Server Programming Model
모든 네트워크 응용 프로그램은 Client-Server 모델에 기초하고 있다. 이 모델을 사용해서 응용 프로그램은 한 개의 서버 프로세스와 한 개 이상의 클라이언트 프로세스로 구성된다. 서버는 일부 리소스를 관리하고, 이 리소스를 조작해서 클라이언트를 위한 서비스를 제공한다. 예를 들어 웹 서버는 디스크 파일들을 관리하고, 클라이언트를 대신해서 이들을 가져오고 실행한다. FTP 서버는 클라이언트를 위해 저장하고 읽어오는 디스크 파일들을 관리한다. 비슷하게, 이메일 서버는 클라이언트를 위해서 읽고 갱신하는 스풀 파일을 관리한다.
A Client-Server Transaction
Client-Server 모델에서 근본적인 연산은 Transaction이다. Client-Server Transaction은 네 단계로 구성된다.
- 클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청을 서버에 보내는 것으로 Transaction을 시작한다.
ex) 웹 브라우저가 파일을 필요로 할 때, 웹 서버로 요청을 보낸다. - 서버는 요청을 받고, 해석하고, 자신의 리소스들을 적절한 방법으로 조작한다.
ex) 웹 서버가 브라우저로부터 요청을 받을 때, 디스크 파일을 읽는다. - 서버는 응답(response)을 클라이언트로 보내고, 그 후에 다음 요청을 기다린다.
ex) 웹 서버는 이 파일을 다시 클라이언트로 돌려보낸다. - 클라이언트는 응답을 받고 처리한다.
ex) 웹 브라우저가 서버로부터 페이지를 한 개 받은 후, 이것을 스크린에 디스플레이한다.
클라이언트와 서버는 프로세스이며, 이 컨텍스트에서 머신이나 호스트는 아니라는 것이 중요하다. 한 개의 호스트는 서로 다른 많은 클라이언트와 서버를 동시에 실행할 수 있으며, 클라이언트와 서버 Transaction은 동일하거나 다른 호스트에 존재할 수 있다. Client-Server 모델은 클라이언트와 서버의 호스트로의 매핑에 관계없이 동일하다.