소켓
소켓은 컴퓨터 프로그램이 네트워크를 통해 통신하도록 돕는 소프트웨어 구성 요소입니다. "소켓"이라는 용어는 네트워크 케이블을 연결하고 모든 데이터가 통과하는 물리적인 소켓을 연상시킵니다. 애플리케이션도 비슷한 목적으로 소프트웨어 네트워크 소켓을 만듭니다. 애플리케이션이 네트워크 연결을 통해 보내고 받는 모든 데이터는 소켓을 통과합니다.
소켓은 프로그램이 네트워크 연결을 설정할 수 있는 표준 방법을 제공합니다. 소프트웨어 개발자는 API를 사용해 운영 체제가 관리하는 소켓을 만들 수 있으므로, 처음부터 자체 방식을 작성할 필요가 없습니다. 애플리케이션이 네트워크를 통해 데이터를 보내야 할 때는 디스크에 파일을 쓰는 것처럼 해당 데이터를 소켓에 씁니다. 운영 체제는 이를 감지하고 데이터 패킷을 네트워크를 통해 목적지로 자동 전달합니다.
각 소켓에는 IP 주소와 포트 번호를 결합한 고유한 소켓 주소가 있습니다. 이 주소는 소켓이 실행 중인 특정 컴퓨터와 소켓을 만든 애플리케이션을 모두 식별합니다. 서버에서 실행되는 애플리케이션은 시작할 때 소켓을 만들고 수신 대기 상태로 유지하며, 클라이언트의 애플리케이션은 필요에 따라 소켓을 열고 닫을 수 있습니다. 소켓이 열려 있는 동안 운영 체제는 들어오고 나가는 데이터 패킷을 모니터링하고, 각 패킷의 소켓 주소를 확인해 어디로 전달할지 파악합니다.
예를 들어 웹 브라우저로 웹사이트를 방문하면 브라우저는 IP 주소와 포트 번호를 사용해 원격 웹 서버의 다른 소켓에 연결되는 소켓을 만듭니다(HTTP 연결은 80, HTTPS 연결은 443). 브라우저는 이 소켓에 특정 웹 페이지를 요청하고, 운영 체제는 이를 감지해 웹 서버로 전달합니다. 웹 서버가 요청한 페이지를 컴퓨터로 다시 보내면 운영 체제는 소켓 주소를 확인하고 해당 페이지를 웹 브라우저로 보내야 한다는 것을 파악합니다.
지식 테스트하기