CS 서버
서버란 클라이언트에게 서비스를 제공하는 역할을 갖고 있는 사람을 뜻한다.
예로 요리사가 요리를 제공하는 카레점 식당을 예로 들어본다.
각각의 역할은 다음과 같다.
식당의 각 역할
- 손님
- 요리사
- 서버
손님은 카레를 먹으려 식당에 방문하고 빈 자리에 앉는다.
서버가 손님에게 찾아가 카레 메뉴는 무엇을 할 것인지 물어본다.
주문 받은 서버는 요리사에게 전달한다.
요리사가 요리를 완료하면 서버에게 전달한다.
서버는 손님에게 요리를 제공한다.
손님은 주문한 메뉴를 서버에게 결제한다.
컴퓨터 과학에서도 서버(server)는 클라이언트를 거쳐 네트워크를 통해 서비스하는 컴퓨터를 의미하게 되었다.
네트워크에서의 서버
TCP/IP 프로그래밍이 생기면서 네트워크 분야로 많이 사용되고 있다.
네트워크 통신은 IP와 포트를 소켓을 열어 네트워크를 통해 서로 통신할 수 있다.
서버는 IP 주소로 서버로 바인딩하여 통신 연결한다. 바인딩이 완료하면 리스닝 함수를 실행하여 특정 포트의 서비스를 오픈 하게 된다.
리스닝 하는 서버는 클라이언트가 요청 전까지 계속 대기한다.
클라이언트는 대기중인 초록불 서버로 접근하고 서비스를 제공받게 된다.
클라이언트와 서버 연결이 완료되고 서비스를 모두 즐긴 클라이언트는 서버와의 네트워크 연결을 끊어야한다.
TCP/IP 소켓 프로그래밍 용어
- socket() 네트워크 통신을 위한 소켓 생성함. 반환 값은 소켓을 식별하는 디스크립터 정보이다.
- 서버에서 사용
socket(AF_INET, SOCK_STREAM)
- bind() 소켓에 특정 IP와 Port를 할당한다.
- 서버에서 사용
bind(sock, (host_ip, port))
- listen() 서버가 클라이언트 연결 요청을 기다리도록 함. 이 함수는 연결 대기 큐를 지정해야 한다.
- 서버에서 사용
listen(sock, backlog)
- connect() 서버에게 주소와 포트로 연결을 요청한다.
- 클라이언트에서 사용
connect(sock, (host_ip, port))
- accept() 클라이언트 연결을 수락한다. 이 함수로 새로운 소켓을 반환하고 클라이언트와의 통신에 사용한다.
- 서버에 사용
client_sock, addr = accep(sock)
- close() 사용 완료한 소켓을 닫는다. 리소스를 해제하여 데이터의 전송을 중단한다.
close(sock)