본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 열다섯번째 날입니다.
열네번째 날에는 왜 WebSocket을 선택했나. Raw Socket은 무엇인가에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 2. 채팅 뼈대 프로젝트 개발 > Ch 2. Rest API와 WebSocket의 기본 >
05. 프로토콜은 왜 필요한가 JSON을 선택한 이유
입니다.
🛰️ 프로토콜은 왜 필요할까? 그리고 왜 JSON을 선택했을까?
- 이번 포스팅에서는 채팅 서비스 개발의 핵심 중 하나인 통신 프로토콜과 메시지 포맷에 대해 이야기합니다.
- 특히 왜 JSON을 선택했는지에 대한 배경도 함께 정리해보겠습니다.
📡 프로토콜이란?
- 프로토콜은 송신자와 수신자가 데이터를 주고받기 위해 반드시 지켜야 하는 규칙들의 집합입니다.
- TCP, UDP, WebSocket 등도 각각의 전송 프로토콜을 가지고 있으며,
- 서로 다른 시스템(클라이언트와 서버)이 정해진 약속 없이 데이터를 주고받는 것은 불가능합니다.
- 예를 들어 WebSocket 연결이 되어 있어도, 페이로드 안에 담긴 메시지를 해석할 기준이 없다면 마치 한국어와 영어로 각자 말하는 상황처럼 대화가 불가능합니다.
- 이처럼 도메인 수준의 통신 프로토콜, 즉 우리가 직접 정의하는 의미 있는 메시지 구조가 필요합니다.
📦 메시지 포맷이란?
- WebSocket은 메시지를 페이로드에 담아 전송합니다. 이 페이로드 안에 어떤 형식으로 메시지를 담을지는 직접 결정해야 하며, 이를 메시지 포맷이라고 부릅니다.
🔹 자바 직렬화
- 자바 객체를 바이너리로 직렬화하는 기본 방식
- 클래스 정의에 강하게 종속되어 호환성이 매우 낮음
- JVM 언어 간 전송에는 적절하지만, 다른 언어와의 통신에는 부적합
- 메타데이터가 많아 크기도 크고, 성능도 느린 편
🔹 Protocol Buffers (protobuf)
- 구글에서 만든 고성능 바이너리 직렬화 포맷
- .proto 스키마 기반으로 매우 작고 빠르며, 다양한 언어 지원
- 단점은 스키마 관리 필요, 초기 러닝커브가 있음
- gRPC의 기본 포맷이기도 함
🔹 JSON (JavaScript Object Notation)
- 텍스트 기반으로 사람이 읽을 수 있는 메시지 포맷
- 스키마 없이도 전송 가능하며, 언어 독립적이라 호환성이 뛰어남
- 디버깅 용이, REST API 및 일반 데이터 통신에 광범위하게 사용
- 단점은 텍스트 기반이라 성능과 용량 면에서는 떨어짐
🤔 우리는 왜 JSON을 선택했을까?
- 채팅 프로젝트는 다양한 환경과 브라우저, 클라이언트 간 통신이 필요합니다.
- JSON은 언어와 플랫폼에 독립적이면서, 가독성과 유지보수 측면에서도 강력한 장점이 있습니다.
- 디버깅과 개발 초기 테스트에서도 유리하며, 학습곡선도 낮아 도입이 쉽습니다.
- 이번 내용을 통해 단순히 데이터를 "보내는 것"을 넘어서, 데이터를 해석할 수 있게 만드는 규칙, 즉 프로토콜의 중요성을 실감했습니다.향후 실시간 다자간 채팅이나 푸시 알림 등 다양한 기능을 확장할 때도 JSON 기반의 프로토콜 위에 구조를 탄탄히 쌓아간다면 개발 속도와 안정성 모두에서 이점을 가질 수 있을 것 같다는 생각이 듭니다.
- 특히 JSON은 단순히 쉬워서 사용하는 것이 아니라, 범용성과 확장성, 그리고 개발자 친화성까지 갖춘 선택이라는 점을 다시금 확인할 수 있었습니다.