통신규약
프로토콜(Protocol)을 한국어로 번역하면 통신규약
이 된다. 네트워크를 통해 서로 데이터 패킷을 주고받을 때, 쌍방간에 약속된 데이터 패킷을 주고받기 위해 프로토콜이란 개념이 생겨났다.
패킷이란?
Data -> Serialized Data
패킷은 0과 1로 구성된 데이터 조각(unit)이다. 네트워크를 통해 쌍방간 데이터를 주고받을 때, 데이터는 네트워크를 통해 전송될 수 있는 이진 데이터로 변환되어야 한다.
예를들어, 자바스크립트에서 Object를 하나 만들고, 이 객체를 자바로 구성된 서버로 전송하고 싶다고 가정해보자. 자바와 자바스크립트는 서로 다른 언어고, 다른 방식으로 컴파일 하기에, 당연히 자바스크립트 객체를 자바가 해석할 수는 없다. 그런데 자바스크립트의 Object를 string으로 변경하면(primitive data type), string 변수는 다른 언어에서도 해석할 수 있는 프리미티브한 타입이기 때문에, 자바스크립트의 string을 자바로 전송하고, 다시 서버측 자바에서 받은 데이터를 Object로 변환할 수 있다.
Object같은 reference type을 string과 같은 primitive type으로 바꾸는 과정을 serialization이라 한다고 이전에 포스트 글을 올렸으니 참고바란다.
Serialized Data -> Binary Data
네트워크를 통해 데이터를 전송하기 위해 직접 serialization을 하든, 사용하는 라이브러리가 serialization을 대신 해주든, 어쨋든 데이터는 처음에 원시타입(primitive type)으로 변경된다. 이후에 이 데이터는 또다시 2진수 데이터로 변경된다. 이는 데이터가 랜선으로 전송되든, 공기중에 주파수로 전송되든, 전송 과정에서는 0과 1로 데이터를 표현할 수 밖에 없기 때문이다.
데이터가 랜선을 통해 전송된다고 생각해보자. 랜선(ethernet cable중 하나)은 데이터를 전송할 때 데이터를 표현하기 위해 전기가 있고 없고로 0과 1을 표현하고, 이 0과 1이 모여 데이터가 되는 것이다.
데이터가 와이파이나 5G, 4G같이 무선으로 전송되는 경우, 공기중의 주파수 진동으로 위로 볼록한 진동부위는 1로, 아래로 볼록한 진동부위는 0으로 판단하여 데이터를 구성하게 되는 것이다.(물론 심하게 단순화해서 말하자면 그렇다는 것)
바이너리 데이터 구조
이제 네트워크를 통해 데이터를 전송하려면 해당 데이터가 0과 1로 최종적으로 변환된다는 사실을 알았다. 이제 이 데이터가 어떻게 구조화 되어 있는지 알아야 하고 이렇게 구조화된 데이터가 패킷이다.
패킷은 다음과 같은 데이터를 이진수로 가지고 있다.
- 패킷의 전송 목적지 주소(address).
- 데이터를 0과 1로 변환하는 과정에서 생길지 모를 오류 검증 코드
- 패킷 길이
- 우선순위
- 헤더(header), 페이로드(payload), 푸터(footer)
- 등등 프로토콜에 따라 패킷 구조도 제각각임
헤더 같은 곳에 목적지 주소에 해당하는 데이터가 있을 것이고 페이로드에 우리가 전송하기 원하는데이터가 담겨 있을 것이다.
그러니까 패킷은, 데이터 한 덩어리 인데, 그 덩어리에 HTML 구조 처럼 헤더, 페이로드, 푸터처럼 개념적으로 구조를 나누고 그 안에 데이터가 2진수로 들어있는 것이다.
그럼 프로토콜은 무엇?
위에서 본 것 처럼, 데이터를 전송하려면 해당 데이터를 2진수로 만들어야 한다. 그런데 이 2진수를 내가 보낼 데이터 뿐만 아니라, 데이터를 보낼 목적지 주소나, 기타 다른 정보를 포함해서 데이터를 전송해야 한다(패킷). 그럼 네트워크를 통해 데이터를 보내는 쪽과, 데이터를 받는 쪽이 이런 2진수로 된 패킷에 어떤 정보를 포함시키고, 주소를 어떻게 설정하고, 데이터는 뭐 암호화를 할것인지 뭐 등등 데이터를 주고 받는 쌍방간에 2진수 데이터 패킷을 해석
할 수 있어야 한다.
이런 이유 때문에, 통신 규약을 정해서 서로 약속한 대로 패킷 구조를 만들어 통신하는 것이다.
좀 더 일반적인 의미의 프로토콜 (feat. OGP)
웹에서 프로토콜은 좀 더 다양한 의미로 사용되는 것 같다.
예를들어 Open Graph Protocol(OGP)라는 프로토콜이 있다. 이 프로토콜은 소셜 미디어(페이스북) 등에 링크를 공유할 때, 링크 프리뷰(link preview) 형식으로 내용을에 대한 간단한 정보를 해당 링크와 함께 제공해주는 역할을 한다. 보통은 다음과 같이 헤더의 메타 태그에 og:
라는 이름을 본다면, 해당 웹사이트는 OGP
통신규약을 따르는 것이 되고, 해당 프로토콜(약속)을 해석할 수 있는 소셜 미디어는 이 메타 태그를 해석하여 링크 프리뷰를 적절하게 보여줄 수 있게 된다.
|
|
즉, 모든 모셜 미디어가 자기만의 메타 태그를 만드는게 아니라, 이런식으로 규약을 정해서(위의 경우, og prefix를 붙이는 식으로) 수천 수만개의 개별 메타 태그를 만들어 내지 않고도 메타 태그의 내용을 이용할 수 있게 되는것이다.
어떻게 보면 국제적인 표준
아닌 표준인데, 페이스북이 이런 프로토콜을 만들었고, 트위터도 이 프로토콜을 이용하니, 웬만한 중소기업은 이 og
가 붙은 메타태그를 이용해서 원하는 바를 구현하는게 현명할 것이다.