API 응답에서 타입 만들기 — JSON을 코드로 받아 적는 법
새 API를 붙일 때마다 반복되는 그 작업 — 응답 JSON을 한 줄씩 보며 interface를 받아 적기. 필드 30개짜리 응답이면 10분이 사라지고, 오타 하나가 런타임 버그가 됩니다. 기계적으로 끝내는 법과, 자동 변환이 못 잡는 것들을 정리합니다.
왜 손으로 쓰면 안 되나
- 오타는 컴파일을 통과합니다 —
userName을username으로 적으면, 에러 없이 조용히undefined가 흐릅니다. 가장 잡기 어려운 종류의 버그입니다. - 누락도 통과합니다 — 안 적은 필드는 "없는 것"이 될 뿐, 경고가 없습니다.
- 시간이 아깝습니다 — 받아 적기는 기계가 사람보다 정확하고 빠른 대표적인 작업입니다.
자동 변환 1분 컷
- API의 실제 응답 JSON을 복사합니다 — 문서 예시보다 실제 응답이 정확합니다.
- JSON → 타입 변환기에 붙여 넣고 언어(TypeScript·Python·Go)를 고릅니다.
- 생성된 타입 코드를 복사해 프로젝트에 붙입니다 — 중첩 객체는 자동으로 별도 타입으로 분리됩니다.
변환 후 다듬을 것 세 가지
자동 변환은 샘플에 보이는 것만 압니다. 다음 세 가지는 사람이 마무리해야 합니다.
- null·빈 배열 필드 — 타입을 확정할 수 없어
any(TS)·Any(Python)·interface{}(Go)로 나옵니다. 실제 타입을 명시하세요. - 선택(optional) 필드 — 샘플에 우연히 없던 필드는 타입에도 없습니다. API 문서를 보고
?를 붙이거나 필드를 추가하세요. - 자동 이름 — 중첩 타입은 키 이름으로 자동 명명됩니다(
DataItem등). 도메인에 맞는 이름으로 바꾸면 가독성이 올라갑니다.
언어별 출력의 모양
- TypeScript —
interface. 프런트엔드에서 응답 타입으로 바로 사용. - Python —
@dataclass클래스. 타입 힌트와 함께 생성됩니다. - Go — JSON 태그(
`json:"..."`)가 달린struct. 언마샬링에 바로 사용. - 자바가 필요하면 JSON → Java DTO 도구가 따로 있습니다.
오타와 누락 때문입니다. 필드가 수십 개인 응답을 눈으로 보며 받아 적으면 철자 하나, 선택 필드 하나를 놓치기 쉽고, 그 오타는 컴파일은 통과하면서 런타임에 undefined로 나타나는 가장 잡기 어려운 버그가 됩니다. 실제 응답 JSON을 변환기에 넣어 기계적으로 생성하면 구조와 철자가 정확히 일치하는 타입을 1분 안에 얻을 수 있습니다.
출발점으로 쓰고 세 가지를 다듬으세요. 첫째, null이나 빈 배열이었던 필드는 any 같은 느슨한 타입으로 나오므로 실제 타입을 명시해야 합니다. 둘째, 샘플에 우연히 없던 선택(optional) 필드는 API 문서를 보고 ?를 붙여 주세요. 셋째, 자동으로 지어진 중첩 타입 이름(예: DataItem)을 의미 있는 이름으로 바꾸면 코드 가독성이 올라갑니다.
TypeScript는 interface, Python은 @dataclass가 붙은 클래스, Go는 JSON 태그가 달린 struct로 생성됩니다. 세 출력 모두 중첩 객체를 별도 타입으로 분리해 연결해 주므로, 사용하는 언어 탭만 바꾸면 같은 JSON에서 세 언어의 모델 코드를 얻을 수 있습니다. 자바가 필요하면 JSON → Java DTO 도구를 쓰면 됩니다.