깨진 .proto를 여기에 붙여넣고 "Protobuf 고치기!!"를 클릭하면 복구됩니다깨진 .proto 입력

Protobuf 수정기란?

.proto 파일이 깨졌나요? protoc는 세미콜론 하나, 닫히지 않은 message 본문, 떠도는 중괄호 하나에도 에러를 뱉고, 원인을 찾을 때까지 파일 전체가 무용지물이 됩니다. 이 도구는 잘못된 형식의 Protocol Buffers 스키마를 읽어 그런 문제들을 자동으로 고쳐줍니다. 붙여넣기만 하면 깔끔한 버전을 돌려받습니다.

protoc가 가장 먼저 걸리는 부분들을 점검합니다. 파일 상단에 syntax = "proto3";가 빠진 경우, 필드 줄에 세미콜론이 없는 경우, 중첩된 message/enum 본문에서 {}가 어긋난 경우, 따옴표나 import 문제 등입니다. 결과는 공식 proto3 언어 가이드proto3 문법 레퍼런스에 정의된 규칙을 따르므로, protoc가 실제로 받아들이는 스키마를 돌려받게 됩니다.

파일 업로드도, 스키마 공유도 없습니다. .proto는 이 탭 안에만 머무릅니다. 몇 초 만에 고치고 바인딩 생성 작업으로 돌아가세요.

Protobuf 수정기 사용법

세 단계면 됩니다. 저장소에서 가져온 스키마, 코드 리뷰에서 복사한 스키마, 직접 편집하다 깨진 스키마 모두에서 동작합니다.

1

깨진 .proto 붙여넣기 또는 예제 불러오기

왼쪽 에디터에 깨진 스키마를 넣으세요. 예제 .proto를 누르면 흔한 실수가 들어 있는 예시가 로드됩니다. 필드 뒤 세미콜론 누락, 닫히지 않는 message 본문, syntax 줄의 세미콜론 누락 등이 포함되어 있습니다. 깨진 proto 예시:

syntax = "proto3"
message LineItem {
  string sku = 1;
  int32 quantity = 2
  double unit_price = 3;

여기에 두 가지 오류가 있습니다. syntax 선언 뒤에 세미콜론이 없고, LineItem 블록이 닫히지 않습니다. 둘 다 수정기가 다루는 전형적인 사례입니다.

2

Protobuf 고치기!! 클릭

녹색 Protobuf 고치기!! 버튼을 누르세요. 수정기가 스키마를 읽어 누락된 세미콜론을 복원하고, {} 중괄호의 균형을 맞추고, syntax 선언을 정규화하며, import의 따옴표를 올바르게 처리합니다. 필드 태그, 이름, 타입은 그대로 둡니다.

3

복구된 결과 확인

오른쪽 패널에 복구된 .proto가 표시됩니다. 프로젝트에 다시 넣고 protoc로 확인하세요. RPC 서비스를 구동하는 스키마라면, 바인딩 생성 전에 Protobuf Validator로 결과를 한 번 더 검증하는 것도 좋습니다. 모든 처리는 브라우저에서 일어나며 스키마는 저장되지 않습니다.

실제로 쓰게 되는 상황

직접 편집한 스키마 복구

새 필드를 추가하다가 실수로 중괄호를 지웠더니, protoc는 세 메시지 아래 위치를 가리키며 에러를 냅니다. 파일을 붙여넣어 중괄호를 되살리고 작업을 계속하세요. 400줄짜리 스키마를 눈으로 뒤지지 않아도 됩니다.

LLM이 만든 .proto 정리

JSON 샘플로부터 .proto를 작성해 달라고 LLM에 요청하셨나요? 구조는 대체로 맞지만 syntax = "proto3";를 빠뜨리거나 세미콜론을 누락하거나 마크다운 코드펜스로 감싸는 경우가 많습니다. 수정기가 그런 것들을 정리합니다.

잘못된 머지 후 복구

충돌 마커가 어설프게 해결되어 .proto가 컴파일되지 않습니다. 수정기를 거쳐 구조를 되돌리면 Git에서 문법 싸움 대신 실제 의미 차이를 검토할 수 있습니다.

로그나 문서에서 가져온 스키마 살리기

위키 페이지, 오래된 PR 설명, OCR한 스크린샷에서 .proto를 가져왔나요? 보통 이상한 문자가 섞이고 들여쓰기가 깨져 있습니다. 수정기가 protoc가 받아들일 수 있는 형태로 되돌립니다.

자주 묻는 질문

내 .proto 파일이 어딘가에 저장되거나 전송되나요?

스키마는 복구 처리를 위해서만 백엔드로 전송되며, 저장하지 않습니다. 응답이 돌아오면 그 즉시 사라집니다. 데이터와 함께 로깅되는 것은 없고, 요청 경로에 서드파티 트래커도 없습니다. 민감한 스키마(내부 서비스, 비공개 API)라면 공개 버그 리포트에 공유할 때처럼 식별자를 가린 후 붙여넣으세요.

어떤 종류의 오류를 실제로 고치나요?

protoc가 거부하는 흔한 오류들입니다. syntax 선언이 없거나 잘못된 경우(없으면 syntax = "proto3";를 추가합니다), 필드/옵션/enum 줄의 세미콜론 누락, message/enum/service 블록에서 {}의 불균형, 문자열 옵션과 import의 따옴표 누락이나 불일치, repeatedoptional 같은 키워드의 명백한 오타 등입니다.

필드 태그 번호를 바꾸거나 이름을 변경하나요?

아니요. 수정기는 문법만 복구하라는 지시를 받습니다. 메시지나 필드 이름을 바꾸거나, 태그 번호를 변경하거나, 새 필드를 만들어내지 않습니다. 태그 번호는 와이어 포맷의 일부라 건드리면 하위 호환성이 깨집니다. 결과가 의미적인 내용을 바꾼 것처럼 보인다면 버그로 간주하고 커밋하지 마세요.

proto3뿐 아니라 proto2도 지원하나요?

문법 수준 수정에 한해서는 그렇습니다. 누락된 세미콜론, 어긋난 중괄호, 잘못된 syntax 선언은 어느 쪽이든 같은 방식으로 처리됩니다. 수정기는 syntax 줄에 적힌 값을 존중합니다. proto2 스키마를 proto3로 바꾸지 않습니다(둘은 required/optional과 기본값에 대한 의미가 다릅니다).

그냥 protoc를 돌려서 에러를 읽으면 안 되나요?

그렇게 해야 합니다. protoc가 진실의 원천이니까요. 다만 protoc 에러는 한 번에 한 위치만 가리키고, 중괄호 하나 누락이 열 개의 후속 에러로 번질 수 있습니다. 수정기는 한 번에 파일 전체를 풀어 놓는 1차 정리이고, 그 후 protoc로 다시 확인하는 흐름입니다. 대체재가 아니라 첫 번째 빗질로 생각하세요.

import가 많은 큰 스키마도 처리하나요?

네, 요청당 수천 줄까지 처리합니다. 복구는 붙여넣은 파일만 봅니다. import 문을 따라가거나 외부 스키마를 가져오지 않습니다. 스키마가 google/protobuf/timestamp.proto나 다른 well-known 타입을 import한다면, 그 import는 그대로 보존됩니다.

다른 Protobuf 도구

문법을 고치는 건 첫 단계입니다. 스키마가 컴파일되면 다음 도구들이 나머지를 도와줍니다.