응용 계층(Application Layer) 하부에 있는 계층들의 기본 역할은 신뢰성 있는 데이터 전송을 보장하는 것이다. 그리고 응용 계층의 역할은 이들 하부 계층을 이용해 사용자에게 편리한 응용 환경을 제공하는 것이다. 따라서 응용 계층의 구현은 사용자 프로그램 환경에서 이루어지며, 일반적으로 운영체제에서 제공되는 계층 4의 인터페이스를 사용해 통신 기능을 구현한다. 필요하면 세션 계층이나 표현 계층의 기능도 포함한다.
클라이언트-서버 모델
- 인터넷 환경에서 응용 계층의 연결은 세션 계층에서 설명한 방식을 그대로 사용한다.
- 하나의 서버 프로그램이 다수의 클라이언트에 응용 서비스를 제공하는 클라이언트-서버 모델은 인터넷 응용 환경에서 보편화된 연결 설정 방식이다.
- 클라이언트와 서버는 비교적 간단한 절차로 동작한다. 둘 사이의 연결 설정 과정에서 서버가 먼저 통신 대기 상태에 있는데, 이러한 비대칭 구조는 클라이언트와 서버의 연동을 단순화 시키는 장점이 있다.
- 일반적으로 서버 프로세스는 클라이언트보다 먼저 실행되어 대기 상태에 있기 때문에 클라이언트의 연결 요청에 항상 응답할 수 있다. 서버 프로세스는 일단 시작하면 영원히 종료되지 않고 실행되며, 다수의 클라이언트 요청을 반복적으로 수행한다. 클라이언트와 서버 사이의 네트워크 연결은 전송 계층의 포트 연결로 구현된다.
연결형 비연결형 서비스
- 클라이언트-서버 모델을 구현할 때 먼저 고려할 사항은 비연결형과 연결형 중에서 어떤 연결 방식을 사용할지를 결정하는 것이다. UDP에서 제공하는 비연결형 서비스는 빠른 통신을 보장하지만, 데이터 분실이나 비순서 도착이라는 단점 때문에 응용 프로그래머의 부담이 커진다. 반면, TCP 가 제공하는 연결형 서비스는 신뢰성이 높지만 UDP보다 속도가 떨어진다.
- 속도의 차이는 프로그래밍 과정에 직접 영향을 미치지는 않지만, UDP가 지닌 신뢰성 문제는 응용 프로그램을 작성하는데 적지 않은 부담을 준다. 따라서 비연결형 서비스는 응용 프로그램의 속도 문제가 특별히 중요한 경우에 사용한다.
- UDP는 연결 설정에 따른 클라이언트와 서버 사이의 상태 문제를 해결하기 곤란한 응용 환경에서 주로 사용한다. 네트워크 파일 공유 프로그램이 이에 해당한다. 그러나 대부분의 응용 프로그램은 연결형 서비스를 이용해 구현된다.
상태 정보
- 연결형 서비스는 클라이언트와 서버 사이의 연결로 인해 둘 사이의 현재 상태라는 개념이 존재한다. 일반적으로 가장 단순한 상태 정보는 연결 설정과 관련된 정보이다. 기타 정보는 내부적으로 클라이언트와 서버가 논리적으로 하나의 단위로 처리해야 하는 동작을 산순간에 처리하지 못하고 여러 단계로 나누어 처리하는 경우에 발생한다.
- 상태 정보는 정상적으로 처리될 때는 문제 없지만, 한쪽 시스템이 다운되는 등의 현상에 의해 상태 정보를 잃어버렸을 때는 다운되기 직전 상태로 복구해야 하는 문제가 남는다.
- 클라이언트에 원격 파일 서비스를 제공하는 파일 서버는 비상태 서비스의 대표적인 예이다. 클라이언트가 서버에 파일 서비스를 요청하면 서버가 결과를 응답하는 절차가 하나의 단위로 완결된다. 이러한 요청과 응답 절차로 이루어진 한 쌍의 동작은 다음 혹은 이전 절차와 연계된 상태를 갖지 않는다.
- 원격 파일 서비스를 상태 서비스로 구현하는 경우는 이전 절차에서 수신한 정보를 서버가 내부적으로 보관하는 경우이다.
- ex) 서버가 클라이언트에 큰 파일을 송신하는 경우를 가정하면, 전송 과정에서 요청과 응답이 여러 번 발생 한다. 클라이언트가 매 요청마다 전송 파일의 이름을 보내면 서버는 이를 일부러 보관할 필요가 없으므로 비상태 서비스가 된다. 그러나 첫 번째 요청에만 파일 이름을 보내고 이후 요청에는 보내지 않으면 서버가 첫 번째 요정을 받았을 때 파일 이름이라는 상태 정보를 보관해야 한다. 따라서 이 경우는 상태 서비스가 된다.
동시성 제어
- 동시성(Concurrency)은 임의의 동작이 외형상 동시에 진행되는 것처럼 보이는 것이다.
- ex) 일반 컴퓨터 시스템은 CPU가 하나이므로 특정 시간에 프로세스 하나만 실행된다. 그러나 운영체제에서 지원하는 시분할(Time Sharing)방식은 여러 프로세스를 번갈아 가면서 빠르게 스위칭하여 실행하므로, 사용자는 여러 프로세스가 동시에 실행된다고 착각한다.
- 동시성 제어는 여러 동작의 선후 진행 속도에 상관 없이, 동시에 실행되어도 각 실행 결과가 항상 같은 결과를 제공하도록 해준다. 즉, 독립적으로 실행되는 프로세스의 실행 순서가 결과에 영향을 주지 않는다.
- 클라이언트-서버 환경에서 동시성은 서버 하나가 다수의 클라이언트를에 동시에 서비스하는 경우를 의미하기도 한다. 즉, 임의의 클라이언트가 서버와 연결하여 서비스를 받는 동안 다른 클라이언트의 요청을 서버가 지원하면 동시성을 지원한다고 볼 수 있다.
- 반복 서비스 방식은 서버 하나가 다수의 클라이언트를 지원하지만, 특정 시간에는 클라이언트 하나에만 서비스를 제공한다. 따라서 동시성을 지원하지 않으므로 현재 서비스 중인 클라이언트 외의 클라이언트는 대기 상태에 놓인다.
- 동시성 서비스 방식은 클라이언트 요청이 발생할 때마다 서벙와 동일한 하위 서버 프로세스를 생성하여 클라이언트의 요청을 수행한다. 따라서 여러 클라이언트와 요청을 동시에 지원할 수 있다.
Reference
쉽게 배우는 데이터 통신과 컴퓨터 네트워크0
https://soso-hyeon.tistory.com/109
[쉽게 배우는 데이터 통신과 네트워크] CH11. 상위 계층의 이해
01 상위 계층 소개 02 세션 계층응용 환경에서 전송 계층이 제공하는 서비스를 손쉽게 이용하려면 사용자의 논리적 관점을 고려하여 단순한 사용자 인터페이스를 제공해야 한다. 1 세션 계층의
soso-hyeon.tistory.com
'CS > Network' 카테고리의 다른 글
[Chapter 12] 소켓을 이용한 네트워크 프로그래밍 (소켓 시스템 콜) (0) | 2025.02.17 |
---|---|
[Chapter 12] 소켓을 이용한 네트워크 프로그래밍 (소켓의 주소 체계) (0) | 2025.02.17 |
[Chapter 11] 상위 계층의 이해(표현 계층) (0) | 2025.02.17 |
[Chapter 11] 상위 계층의 이해(상위 계층 소개, 세션 계층) (0) | 2025.02.17 |
[Chapter 10] UDP 프로토콜(OSI TP 프로토콜) (0) | 2025.02.17 |