Network Programming
개요
네트워크 애플리케이션은 컴퓨터 시스템의 많은 개념에 의존한다. 예를 들어, 프로세스(process), 시그널(signal), 바이트 순서(byte ordering), 메모리 매핑(memory mapping), 동적 저장소 할당(dynamic storage allocation) 등이 모두 중요한 역할을 한다. 또한 application layer에서의 개념, 클라이언트-서버(client-server) 구조 등에 대한 개념도 필요하다. 즉, 네트워크 프로그래밍은 네트워크 그 자체는 물론, 컴퓨터 시스템과도 땔려야 떌 수 없는 사이이다. 이 모델에서는, 하나의 애플리케이션이 서버 프로세스(server process)와 하나 이상의 클라이언트 프로세스(client process)로 구성된다.
The Client-Server Programming Model
거의 모든 네트워크 애플리케이션은 클라이언트-서버 모델에 기반한다. 이 모델에서는, 하나의 애플리케이션이 서버 프로세스(server process)와 하나 이상의 클라이언트 프로세스(client process)로 구성된다. 서버는 어떤 자원(resource)을 관리하고, 이 자원을 적절히 다루어서 클라이언트에게 서비스를 제공한다. Figure 1에 나타나 있듯이, 클라이언트-서버 모델에서 기본적인 동작은 트랜잭션(transaction)이다. 이는 다음의 네 단계로 구성된다:

- 클라이언트가 트랜잭션을 시작하기 위해[1] 서버에 요청(request)을 보낸다.
- 예를 들어, 웹 브라우저가 파일을 필요로 할 때, 웹 서버에 요청을 보낸다.
- 서버는 요청을 수신하고(receive), 이를 해석하고(interpret), 적절한 방식으로 자원을 조작(manipulate)한다.
- 예를 들어, 웹 서버가 브라우저로부터 요청을 받으면, 디스크 파일을 읽는다.
- 서버는 클라이언트에게 응답(response)을 보낸 다음, 다음 요청을 기다린다.
- 예를 들어, 웹 서버는 파일을 클라이언트에게 전송한다.
- 클라이언트는 응답을 수신하고, 이를 사용한다.
- 예를 들어, 웹 브라우저가 서버로부터 페이지를 수신한 후, 이를 화면에 표시한다.
이때 주의할 점은, 클라이언트와 서버는 프로세스이지, 호스트(host), 즉 실체적인 기계가 아니라는 것이다. 하나의 호스트는 서로 다른 여러 클라이언트와 서버를 동시에 실행할 수 있으며, 클라이언트와 서버 간의 트랜잭션은 동일한 호스트 내에서 일어날 수도, 서로 다른 호스트에서 일어날 수도 있다.
각주
- ↑ 서비스를 받기 위함이다.