JSON → TypeScript / Go / Rust 구조체 생성기

JSON을 붙여넣고 대상 언어를 고르면 관용적인 타입 정의가 생성됩니다. TypeScript, Go, Rust, Kotlin, Java, C#, Python TypedDict 를 지원해요. quicktype 으로 동작하며 모든 처리는 브라우저 안에서 진행됩니다.

  1. 왼쪽 텍스트 영역에 대표적인 JSON 샘플을 붙여넣어 주세요.
  2. 대상 언어 드롭다운에서 원하는 언어를 선택하세요.
  3. "생성" 버튼을 누르세요. 첫 클릭에서 엔진을 다운로드하느라 4G 기준 2–3 초가 걸리고, 이후의 생성은 즉시 완료됩니다.
  4. 결과를 복사하거나 해당 언어의 파일 확장자로 다운로드할 수 있어요.
어떤 도구인가요?

하나 이상의 JSON 샘플에서 스키마를 추론해 대상 언어의 관용적인 타입을 생성합니다. 필드 타입은 자동으로 추론돼요 — 문자열은 문자열로, 숫자는 해당 언어의 숫자 타입으로, 부울은 bool로, 배열은 슬라이스/리스트/배열로, 중첩된 객체는 중첩된 타입으로 변환됩니다. 샘플들 사이에서 가끔 null 이거나 누락되는 필드는 nullable 또는 optional 로 표시돼요. quicktype.io 와 같은 quicktype-core 엔진을 사용합니다.

예시

JSON 입력:

{
  "name": "Ada",
  "age": 36,
  "active": true,
  "tags": ["math", "logic"]
}

TypeScript 출력 (대상 = TypeScript, 타입 이름 = User):

export interface User {
  name: string;
  age: number;
  active: boolean;
  tags: string[];
}

자주 만나는 함정과 대처법

JSON 으로부터의 타입 추론에는 본질적인 한계가 있어요 — JSON 에는 타입 시스템을 완전히 결정할 정보가 부족합니다. 추론된 타입이 의도와 다를 수 있는 패턴들입니다.

  • 단일 샘플로는 필수/선택 구분이 어려움. 단일 JSON 객체만으로는 어떤 필드가 선택 사항인지 알 수 없어요. 대표적인 객체들의 JSON 배열을 붙여 여러 샘플을 제공하면, 일부 샘플에 빠진 필드를 optional 로 표시할 수 있습니다.
  • 빈 배열. `{"items": []}` 는 추론할 요소가 없어서 `any` 배열이 돼요. 적어도 하나의 채워진 예시를 포함하거나, 생성 후에 수동으로 타입을 고치세요.
  • 서로 다른 타입의 배열 요소. JSON 배열 `[1, "two"]` 는 유니온 타입이 돼요 — 일부 대상 언어(특히 Go)에서는 결과가 사용하기 불편할 수 있어요. 실제 데이터가 동질 배열이라면 샘플을 그렇게 맞춰 주세요.
  • 날짜 문자열. JSON 에는 Date 타입이 없어요. ISO 8601 날짜 문자열은 `string` 으로 추론됩니다. quicktype 이 TypeScript 출력에서 Date 로 감지하는 경우도 있지만, 더 강한 타입을 원하면 직접 조정해야 해요.
  • 정밀도가 손실되는 숫자 ID. 2^53 보다 큰 JSON 숫자(대형 64비트 ID 등)는 JavaScript 가 파싱할 때 정밀도를 잃어요. 생성된 TypeScript 타입은 그래도 `number` 입니다. 64비트 정밀도가 필요하면 JSON 에서 `string` 으로 보내거나, 생성 후 `bigint` 로 직접 바꿔 주세요.
  • 스네이크 케이스 vs 카멜 케이스. 생성기는 JSON 필드 이름을 그대로 보존해요. JSON 이 snake_case 인데 대상 언어가 camelCase 를 기대한다면, 출력은 snake_case 필드와 함께 가능한 경우 serde/json 어노테이션을 추가합니다. 후처리하거나 quicktype CLI 옵션을 직접 사용해 변경하세요.
자주 묻는 질문

왜 첫 생성이 느린가요?

quicktype 엔진 번들이 압축 후 약 465 KB 입니다. 첫 "생성" 클릭에서 다운로드되며 4G 기준 2–3 초가 걸려요. 이후에는 페이지 세션 내내 모듈이 메모리에 캐싱되고, 브라우저가 다음 방문에서도 캐시를 재사용하므로 캐시가 비워지지 않는 한 다음 첫 클릭도 즉시 처리됩니다.

여러 JSON 샘플로 생성할 수 있나요?

샘플들을 JSON 배열로 감싸서 붙여넣으세요. 생성기는 모든 샘플의 필드 합집합을 추론하고, 일부 샘플에 빠진 필드는 optional 로 표시합니다. 실제 데이터의 변동을 견디는 타입을 만드는 가장 좋은 방법이에요.

백엔드 코드에는 어떤 언어를 골라야 하나요?

프로젝트가 이미 사용하는 언어에 맞추세요. Go 출력은 `encoding/json` 의 표준 구조체 태그를 사용하고, Rust 는 serde derive 를, Kotlin 은 kotlinx.serialization 어노테이션을, Java 는 Jackson 호환 POJO 를 만들어요. 선택은 선호가 아니라 프로젝트 요구사항에 달려 있어요.

필드 주석은 보존되나요?

JSON 에는 주석 문법이 없어서 옮길 주석 자체가 없어요. quicktype 은 일부 언어 출력에 자동 생성된 doc 주석을 추가하기도 하지만, 그건 사용자 콘텐츠가 아니라 생성된 설명입니다.

JSON 이 어디론가 업로드되나요?

아니요. 모든 처리는 브라우저 안에서 진행돼요. 입력은 이 페이지의 quicktype-core 모듈이 로컬에서 처리합니다. quicktype-core 자체도 같은 출처(이 사이트의 정적 자산 호스트)에서 로드되며, 어떤 서드파티 서버도 데이터를 보지 않아요.

얼마나 큰 JSON 샘플을 사용할 수 있나요?

약 5 MB 까지는 무리 없이 동작해요. 그 이상은 생성 시간이 눈에 띄게 길어집니다. 이 도구는 전체 데이터셋이 아니라 대표 샘플을 위해 설계됐어요 — 보통 객체 몇 개만으로도 깨끗한 스키마를 추론하기에 충분합니다.