프로토콜(Protocol)이란 무엇인가?

프로그램을 만들다보면, 프로토콜(Protocol) 이라는 말을 가끔 듣습니다.

영어로 된 낯선 단어를 한글로 옮겨 두어도 사실… 아무런 의미가 없지요. 그냥 어려운 한글 단어일 뿐입니다.

위키피디어를 찾아봐도… 통신프로토콜(위키피디어) 역시 어려운 단어는 어렵습니다.

프로토콜은 우리 말로 쉽게 풀면, 규칙, 또는 규약 정도입니다. 가장 흔하게 쓰는 말로는 통신 프로토콜이라고 하는데, 통신하는 양쪽에서 서로 일정한 규칙을 약속해서 주고 받자는 의미입니다. 서로 아무렇게나 텍스트를 주고 받는 것이 아니라, 일정한 규칙과 분류를 가지고 통신을 하자는 뜻이지요.

프로그래밍에서는 예전에는 xml 형태로 프로토콜을 주고 받았습니다. 예를 들면, (조금 복잡하지만…) 이름, 성별, 나이를이렇게 생긴 문서로 보낼테니, 알아서 잘 구분해서 데이터를 읽어가시오. 라는 뜻이지요.

<name>홍길동</name>
<gender>남</gender>
<age>23</age>

그런데, 문제는 이런 데이터가 많아지면 많아질수록 정작 필요한 홍길동, 남, 23 이라는 실질적인 데이터보다, 그 주변을 둘러싼 name, gender, age 심지어 괄호(< >)까지 불필요한 메타 데이터까지 늘어나는 것입니다. (메타 데이터는 실질 데이터의 속성을 나타내는 부가적인 데이터)

그래서 최근에는 JSON(제이슨)이라는 규약의 형태를 많이 씁니다. 위의 똑같은 데이터를

{"name":"홍길동", "gender":"남", "age":"23"}

이렇게 줄여서 보낼 수 있게 되었지요. 또한 JSON 형태의 문서는 데이터를 추출하는 파싱(parsing)과정에 드는 노력도 적게 드는 아주 심플한 규약입니다. 그래서, 많은 프로토콜은 여전히 복잡한 xml 형태의 프로토콜을 고수하고 있지만, 실제로 프로그램을 구현하는 실무에서는 xml 보다는 JSON 프로토콜을 훨씬 더 많이 사용하고 있습니다.