1. 학습 순서

더보기

(1) 요약

  • 개념 → 구조 → 코드 → 실행 흐름

 

(2) 상세

  1. 네트워크 프로그래밍 개념 (모든 IT 기술 공통)
  2. 네트워크 프로그래밍 구조 (모든 IT 기술 공통)
  3. 네트워크 프로그래밍 코드 (언어마다 호출 함수 차이, 근본 원리 모든 IT 기술 공통)
    언어마다 다른 설명을 참고
  4. 네트워크 프로그래밍 실행 흐름 (모든 IT 기술 공통)

 

2. 개념

더보기

요약

  1. 네트워크 프로그래밍
  2. 클라이언트-서버 통신 모델
  3. IP & Port
  4. 소켓(Socket) 

 

ㄴ 2.1  네트워크 프로그래밍 개념

더보기

 

네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고 받을 수 있도록 하는 것으로 물리적인 연결이 필요하다.

 

ㄴ 2.2 클라이언트-서버 통신 모델

더보기

 

대부분 네트워크 프로그램은 클라이언트-서버(C/S) 모델로 구현되는데 서비스를 받는 클라이언트의 요구(request)에 대하여 서비스를 제공하는 서버가 응답(response)을 보내는 방식으로 동작이 이루어진다.

 

ㄴ 2.3 IP & Port

더보기

- 프로그래밍 기술 관점

 

모든 프로그래밍 기술은 현실의 문제를 컴퓨터를 이용해 해결하기 위한 하나의 방법일 뿐이다.
그리고 이러한 프로그래밍 기술의 개념은 대부분 인간이 이미 현실 세계에서 사용해 오던 방식과 동일한 구조를 가지고 있다.

대표적인 예로,
데이터베이스는 현실의 도서관, 전화번호부, 문서 보관 시스템과 개념적으로 같고,
네트워크는 물류 운송 시스템과 매우 유사한 구조를 가진다.

 

- 문제 인식 관점

 

네트워크의 동작 방식은 물류 시스템과 크게 다르지 않다.
단지 운송되는 대상이 상품에서 데이터로 바뀌었을 뿐이다.

물류 운송에서 상품이 한 장소의 창고에서 다른 장소의 창고로 이동하듯,
네트워크 통신 역시 한 기기의 저장장치에 있는 데이터를 다른 기기의 저장장치로 옮기는 과정이다.

 

문제가 되는 부분도 동일하다.
물류 센터의 규모가 커질수록 관리가 복잡해지듯,
네트워크 통신 역시 서버에 저장된 데이터를 어떻게 효율적이고 안전하게 관리하느냐가 가장 어려운 문제가 된다.

 

 

 

 

- 문제 해결 방법 비교

 

  물류 통신
대상 물건 데이터
1 상품의 크기에 맞춰 규격이 정해진 박스를 준비한다. 데이터 크기에 맞는 버퍼와 자료형을 선택한다.
2 송장에 보내는 곳, 받는 곳의 주소를 적는다. 보내는 기기의 IP 주소 와 포트 정보
받는 기기의 IP 주소 와 포트 정보를 사용한다.
3 운송 회사가 정해놓은 규칙에 맞춰 가격 및 영수증, 운송 정보를 확인할 수있다. 데이터의 특성에 맞는 전송 규칙인 프로토콜을 선택한다.
4 목적지에 잘 도착했다는 연락을 받는다. 통신 과정에서 프로토콜이 데이터의 송수신 성공과 실패에 대한 처리를 담당한다.

IP : 주소

Port : 받는사람

 

 

 

- IP 주소

 

네트워크 통신과 택배의 가장 큰 차이점은, 네트워크 통신에서는 데이터가 양방향으로 주고받아진다는 점이다.

이 과정에서 데이터의 출발지와 목적지를 정확하게 식별하기 위해
네트워크는 IP 주소(Internet Protocol Address)라는 고유한 식별 정보를 사용한다.

 

현실 세계에서 하나의 주소가 여러 장소를 동시에 가리키지 않듯이,
네트워크에서도 IP 주소는 각각의 장치를 고유하게 식별한다.
따라서 동일한 네트워크 환경 내에서 IP 주소는 중복될 수 없다.

 

 

 

 

- Port 번호

 

택배를 받을 때, 목적지까지 도착하는 것 자체는 주소만으로 충분하다.
하지만 해당 목적지에 여러 사람이 있다면,
누가 택배를 받을 수신자인지를 명확하게 구분하기 위해 사람의 이름이 필요하다.

 

네트워크 통신도 이와 동일한 구조를 가진다.
IP 주소를 통해 어떤 장치까지 데이터를 전달할지는 알 수 있지만,
그 장치 안에서 어떤 프로그램이 이 데이터를 필요로 하는지는 알 수 없다.

 

이를 구분하기 위해 네트워크에서는 Port 번호를 사용한다.
Port 번호는 네트워크 목적지 장치에서 실행 중인 특정 프로그램을 식별하기 위한 번호이다.

 

ㄴ 2.5 소켓(Socket) 이란

더보기

앞서 살펴본 것처럼,
네트워크에서 IP 주소는 데이터를 전달할 목적지 장치를 식별하고,
Port 번호는 그 장치 안에서 데이터를 받아야 할 프로그램을 식별하는 역할을 한다.

 

하지만 여기서 한 가지 질문이 남는다.
"그렇다면 실제 데이터를 어떻게 오고 가게 할 것인가?"

 

 

 

 

Socket

IP 주소와 Port 번호가 결정되었다면,
이 두 정보를 함께 묶어 실제 통신에 사용하는 역할이 필요하다.
이 개념은 현실 세계의 택배 송장과 매우 유사하다.

이 역할을 수행하는 것이 바로 Socket이다.

 

택배원이 실제로 택배를 전달할 때,
송장에 적힌 주소와 수신자 이름을 기준으로 배송을 진행하듯,
네트워크 통신에서도 Socket에 포함된 정보(IP 주소와 Port 번호)를 기준으로
데이터 전송이 이루어진다.

 

현실의 택배에 비유하면,

  • IP 주소는 건물의 주소이고
  • Port 번호는 수신자의 이름이라면
  • Socket은 택배를 실제로 주고받는 송장에 해당한다.
  • 실제 데이터의 전송을 물리적인 네트워크 장치가 수행한다.

실제 데이터의 전송은 케이블, 무선 신호와 같은 물리적인 네트워크 장치가 수행하지만,
그 전송을 어디로, 누구에게 전달할지 결정하는 기준 정보가 바로 Socket이다.

즉, Socket은 특정 IP 주소와 특정 Port 번호가 함께 기록된 통신 송장이라고 이해할 수 있다.

 

3. 일반적인 구조와 실행 흐름

: 전통적인 BSD Socket API(C/C++) 기준의 정석적인 흐름

더보기
클라이언트(Client) 흐름 서버(Server) 흐름
[1]생성 1. 클라이언트 소켓* 생성 [1]생성  1. 서버 소켓* 생성
    [2]결합 2. 서버 소켓에 IP 주소와 Port 번호 결합
    [3]대기 3. 클라이언트 요청 대기
[2]연결 2. 서버로 연결 요청    
    [4]수락 4. 클라이언트 요청 정보와 서버 소켓 정보를 결합해  연결 소켓* 을 생성 
[3]송수신 3. 서버 소켓에서 연결 수락 후, 데이터 송수신 [5]송수신 5. 연결 소켓을 통한 데이터를 송수신
[4]닫음 4. 통신이 완료되면, 소켓 닫음 [6]닫음 6. 통신이 완료되면, 연결 소켓을 닫음

* 서버 소켓은, 일반적으로 다수의 클라으언트 소켓으로부터 연결 요청을 받는다.

* 클라이언트 소켓은, 서버와 연결 된 뒤, 별도의 소켓을 생성하지 않고, 같은 소켓을 사용한다.  

* 연결 소켓은, 서버 소켓에서 클라이언트와 연결된 연결 소켓으로 서버 소켓과 다르다.



참고영상

더보기

시작