안녕하세요 삽잡이입니다.
이번 시간에는 프로토콜 및 패킷 설계에 대한 중요성에 대해 생각해보려고합니다.
네트워크 프로그래밍을 할 때에는
여러가지의 이벤트 즉, 여러가지를 감안해야할 '사건'들이 많습니다.
예를 들어서 데이터 하나를 전송할 때, 여러개를 전송할 때,
한명이 보낼 때, 여러명이 보낼 때 등등 말입니다...
우리는 상황별로 데이터를 어떻게 전송해야할지에 대해 '정의'를 해야합니다.
우리가 해야할 정의들은 바로,
'데이터 패킷 설계', '데이터 시트 설계', '데이터 송수신 설계'라고 부릅니다.
이와 같은 정의들을 미리 해두고 코드를 구현해야지...
그렇지 않게 된다면 에러 폭탄을 껴안고있는 꼴이 됩니다.
데이터를 주고받을 때에는 반드시 어떻게 주고받을지에 대한 '프로토콜'을 정의해야합니다.
이를 하지 않는다면 여러 이벤트 처리를 하지 못하고 코드만 더욱 복잡해질 뿐입니다.
따라서, 데이터 송수신에 대한 약속이 있어야합니다.
예를 들어 데이터가 어떻게 주고 받아지는지 코드로 표현하기 전에
그림으로 도식화할 수 있어야한다는 것이죠...
다시 말씀드리지만,
'데이터 설계'와 '프로토콜 설계'는 굉장히 중요한 절차입니다.
클라이언트와 서버간에 혹은 어떠한 관계던 네트워크 간에 어떻게 주고 받을지에 대한 설계를 말하는 것입니다.
가장 기본인 설계를 잘 하게 된다면,
데이터의 종류가 많아지더라도 설계를 하지 않았을 경우에 비해 훨씬 추가가 편해집니다.
코드가 처음부터 중요한게 아니라는 것입니다.
네트워크 프로그램을 하던 뭘 하던지 설계가 잘 되있지 않다면 아무런 의미가 없다는 것이죠...
네트워크 프로그램간에 설계를 할 때에는
클라이언트가 서버에게 뭘 주고, 서버가 클라이언트에게 뭘 받는지...
그 반대의 경우 또한 '명확히'알아야합니다. 그래야지 결과적으로 코드로 '명확히' 옮길 수 있습니다.
그렇다면, 데이터를 줄 때에 format과 type을 알아야겠죠...
즉, 어떤 데이터를 보낸다는 정보를 알아야한다는 것입니다.
설계를 위해서는
우선, 완료된 결과물들에게 기대하는 '동작'을 정의해야합니다.
즉, 어떻게 데이터로 표현할지, 어떻게 제어할 것인지 등의 '동작'들을 정의해야한다는 것입니다.
정의가 완료되면, 그에 따르는 네트워크 데이터 송수신 설계인 '패킷 설계'를 하는 것입니다.
예를 들어서,
어떠한 종류의 데이터들이 클라이언트가 서버에게 날리는지에 대해서
약속을 설계하는 것은 '프로토콜 설계'라고 할 수 있습니다.
그리고 프로토콜 설계가 끝나고 나면 그 프로토콜에 맞는...
송수신에 맞는 데이터 배열이 있을 터인데...
그 보내고자하는 패킷을 어떻게 디자인할지에대해서 즉, 데이터 송수신 설계를 해야한다는 것입니다.
약속한대로 데이터 프로토콜을 정의하고,
그 프로토콜에 맞는 데이터 시트(데이터를 어떻게 구축할 것인지에 대한 내용)를 만들어 정의한다면
코드 구현은 단지 약속을 표현하는 것일 뿐입니다.
우리가 프로그래밍 공부를 할 때
코드를 짜는 것이 어려운 것이 아니라는 소리입니다.
코드는 분명 연습을 하면 향상된고합니다. (그렇게 믿습니다...)
코드가 어려운 것이 아닌, 네트워크는 가장 먼저 해야할 것이
서로간에 데이터를 송수신하는 '패킷 설계' 즉, 약속을 하는 것이라는 소리입니다.
그 다음 약속에 따르는 데이터 설계를 하는 것입니다.
데이터들의 종류 즉, 의미 있는 데이들의 집합(데이터 시트)를 설계하는 것이지요....
예를 들어 string을 전송할 때에는 이렇게 보낼테니까 이렇게 받아~
그림을 전송할 때에는 이렇게 보낼테니까 이렇게 받아~
이처럼요! 이렇게 설계를 하라는 것입니다...
아무튼... 이 두 가지를 항상 먼저 해야합니다.
그리고 이 약속들을 통해 코드로 그대로 표현하는 것이구요...
코드는 연습하면 는다고합니다. 그러니 연습을 열심히 합시다...
열심히 합시다!
이상 삽잡이였습니다!
'삽질의 현장 > - 네트워크 프로그래밍' 카테고리의 다른 글
#017_Window_Network_Non Blocking Socket (0) | 2015.10.08 |
---|---|
#016_Window_Network_고정 길이 전송 방식과 가변 길이 전송 방식 (0) | 2015.10.07 |
#014_Window_Network_고정 길이 데이터 전송 (0) | 2015.10.05 |
#013_Window_Network_클라이언트 서버 통신 (실행 및 연결 확인) (0) | 2015.10.05 |
#012_Window_Network_클라이언트 서버 통신 (소켓 관점) (0) | 2015.10.05 |