-
[네트워크] 클라이언트 - 서버 모델CS/네트워크 2024. 10. 31. 19:19
아래 내용은 정글 과정에서 클라이언트 - 서버 모델을 제대로 이해했는 지 대한 답변입니다. 틀린 부분이 있습니다. 찾아서 댓글 남겨주시면 감사하겠습니다.
Q1) 소켓으로 에코 클라이언트를 구현할 때 필요한 API는 어떤 것이 있을까?
A1)
에코 클라이언트에서는 클라이언트와 서버 간 데이터 전송을 위해 소켓 API를 활용하게 된다. 에코 클라이언트는 주어진 메시지를 서버에 보내고, 동일한 메시지를 다시 수신하는 간단한 구조이다. 이를 구현하기 위해 주로 사용하는 API 함수는 다음과 같다.
클라이언트 요청
- 클라이언트는 socket() 함수를 사용하여 소캣을 생성합니다.
- connect() 함수를 호출하여 서버의 IP 주소와 포트로 연결을 시도합니다.
- 연결이 성립되면 send() 함수를 사용하여 서버에 요청 메시지를 전송합니다.
- recv() 함수를 통해 서버로 부터 응답을 수신합니다.
- 데이터 송수신이 완료되면 close() 함수를 호출하여 소캣을 종료합니다.
서버 응답
- 서버는 socket() 함수를 사용하여 소캣을 생성합니다.
- bind() 함수를 사용하여 소캣에 IP 주소와 포트를 바인딩합니다.
- listen() 함수를 호출하여 클라이언트의 연결 요청을 대기합니다.
- accept() 함수를 호출하여 클라이언트의 연결 요청을 수락하고, 클라이언트와 통신할 새로운 소캣을 생성합니다.
- recv() 함수를 사용하여 클라이언트로부터 요청을 수신합니다.
- send() 함수를 호출하여 클라이언트에 응답 메시지를 전송합니다.
- 작업이 완료되면 close() 함수를 호출하여 소캣을 종료합니다.
Q2) 소켓으로 통신하는 것을 그림으로 대략적으로 설명하시오.
A2)
+-----------------+ +-----------------+ | Client | | Server | +-----------------+ +-----------------+ | | | | | 1. socket() | | | | --------------->| | | | | | | | 2. connect() | | | | --------------->| | | | | | | | 3. send() | | | | --------------->| | | | | | | | | | 4. recv() | | | |<----------------| | | | | | | | 5. send() | | | |---------------->| | 6. recv() | | | |<--------------- | | | | | | | | 7. close() | | | | --------------->| | | | | | | +-----------------+ +-----------------+
Q3) 위 내용과 프록시 서버를 활용하여 대용량 트래픽을 어떻게 처리할 지 생각해보자
A3)
에코 서버는 클라이언트가 보내는 데이터를 그대로 반환하는 간단한 서버이다. 따라서 이 구조를 활용하여 대용량 트래픽을 처리하기 위해서는 아래와 같다.
1. 비동기 I/O를 사용하여 다수의 클라이언트 연결을 동시에 처리할 수 있다.
2. 서버는 여러 스레드를 생성하여 클라이언트 요청을 병렬로 처리한다. 요청이 들어오면 대기 중인 스레드가 이를 처리하고 요청이 끝난 후에도 스레드가 재사용된다.
3. 클라이언트와의 연결을 지속적으로 유지하여 반복적인 연결 설정과 해제를 전송 시간을 줄인다.
[프록시 서버 활용]
클라이언트의 요청을 여러 에코 서버 인스턴스에 분산시켜 부하를 조절한다. 이를 통해 특정 서버에 트래픽이 집중되는 것을 방지하고, 응답 시간을 줄인다.
자주 요청되는 에코 응답을 캐시하여 클라이언트의 요청에 대한 응답을 빠르게 제공한다. 이는 서버의 부하를 줄이고, 응답 속도를 높이는 데 기여한다.
클라이언트의 요청을 검사하여 악의적인 트래픽을 차단한다.
'CS > 네트워크' 카테고리의 다른 글
HTTP 웹 기본 지식 4편 (2) 2024.12.02 HTTP 웹 기본 지식 3편 (0) 2024.12.01 HTTP 웹 기본 지식 2편 (2) 2024.12.01 HTTP 웹 기본 지식 1편 (1) 2024.12.01 Socket, Port, TCP connection 개념 (0) 2024.05.22