CodeGym /행동 /C# SELF /JSON 포맷의 기본과 그 인기

JSON 포맷의 기본과 그 인기

C# SELF
레벨 43 , 레슨 4
사용 가능

1. 소개

만약 현대적인 API를 열어봤거나, web 서비스나 모바일 앱을 다뤄봤거나, 심지어 뭔가를 "범용 포맷"으로 저장하려고 한 적이 있다면 — 이미 JSON을 접했거나 곧 접하게 될 거야. 이 포맷은 서로 다른 프로그래밍 언어와 플랫폼을 문자 그대로 "연결"해줘: C#, JavaScript, Python — 모두 JSON으로 얘기해.

JSON이 직렬화의 스타가 되었을까? 답은 간단해: 간결하고, 사람이 읽기 쉬우며, 가벼운 텍스트 기반 데이터 교환 포맷이기 때문이지. 그 인기는 단순함, 범용성, 그리고 각 언어에서의 훌륭한 지원이 잘 어우러진 결과야.

JSON이란?

JSONJavaScript Object Notation의 약자야. 이 포맷은 JavaScript 세계에서 나왔지만 금방 브라우저를 벗어나 더 넓은 세계로 퍼졌어. 중요 포인트: 이름의 기원에도 불구하고 JSON은 JavaScript에 종속적이지 않고 모든 프로그래밍 언어에서 똑같이 편하게 쓸 수 있어.

이 포맷은 2000년대 초에 Douglas Crockford가 XML보다 더 간단한 대안으로 고안했어. 아이디어는 단순해: "JSON은 더 짧고, 더 간단하고, 눈으로 보기에 더 쉽다".

2. JSON 포맷의 기본 규칙

핵심: JSON은 구조화된 데이터를 위한 엄격하게 정의된 텍스트 포맷이야. 마법 같은 건 없고, 그냥 아무 에디터로 열 수 있는 일반 텍스트라고 생각하면 돼.

기본 구성 요소:

  • 배열 (arrays): 값을 순서대로 나열한 리스트.
  • 객체 (objects): 키-값 쌍들의 집합.
  • 원시 타입: 문자열, 숫자, 불리언 값 (true, false) 그리고 특수값 null.

최소 JSON 문서 예제:

{
    "name": "이반",
    "age": 25,
    "isStudent": true,
    "scores": [5, 4, 5, 3],
    "contacts": {
        "email": "ivan@example.com",
        "phone": null
    }
}

개략적인 구조

아래는 C# 타입과 JSON 표현의 간단한 대응표야:

C# 타입 JSON 예제
string
"name": "이반"
int, double
"score": 5
bool
"isStudent": true
배열 (int[], ...)
"scores": [5,4,5,3]
객체 (class, ...)
"contacts": { ... }
null
"phone": null

JSON 작성 규칙

  1. 문자열은 항상 큰따옴표: 'text' — 오류, 올바른 표기는 "text".
  2. 객체의 키는 큰따옴표로 된 문자열: 예를 들어 "name": ...
  3. 요소들 사이에만 콤마, 마지막 요소 뒤에 붙는 트레일링 콤마는 없음.
  4. 들여쓰기는 필수는 아니지만 가독성을 위해 권장.
  5. 숫자는 따옴표 없이: "age": 25, 숫자를 문자열로 쓰지 마라 ("age": "25"는 다름).
  6. 불리언은 true/false (따옴표 없음), True, FALSE 또는 "true" 같은 표기는 허용되지 않아.
  7. null은 따옴표 없이 null로 적는다.

3. 프로그래머 관점에서 본 JSON

C# 타입과의 유사성:

  • JSON 객체Dictionary<string, object>
  • JSON 배열T[] 또는 List<T>
  • JSON 문자열 ≈ 일반 string
  • JSON 숫자int 또는 double (값에 따라)

객체를 JSON으로 직렬화하는 예제

클래스:

public class Student
{
    public string Name { get; set; } = "";
    public int Age { get; set; }
    public bool IsStudent { get; set; }
    public int[] Scores { get; set; } = Array.Empty<int>();
}

생성되는 JSON (단순화했음, 직렬화 세부는 뒤에서):

{
    "Name": "이반",
    "Age": 25,
    "IsStudent": true,
    "Scores": [5, 4, 5, 3]
}

4. 허용되는 JSON 구조 예제

배열과 중첩 객체를 가진 객체

{
  "product": "커피",
  "price": 125.50,
  "inStock": true,
  "attributes": {
    "weight": 500,
    "unit": "그"
  },
  "tags": ["음료", "에너지", "아라비카"],
  "promotions": null
}

객체들의 배열

[
  {"id": 1, "name": "페트야"},
  {"id": 2, "name": "마샤"},
  {"id": 3, "name": "바샤"}
]

5. 허용되지 않는 JSON 예제 (그리고 이유)

작은따옴표 사용:

{ 'name': '이반' } // 오류!

JSON은 큰따옴표만 허용해.

마지막 요소 뒤의 콤마:

{ "x": 1, "y": 2, } // 오류!

끝에 여분의 콤마는 허용되지 않아.

주석:

{
  // 이런 짓은 안타깝게도 JSON에서 동작하지 않아
  "name": "이반"
}

JSON에는 주석이 없어.

6. 실제 프로젝트에서 JSON이 왜 필요한가?

시스템 간 데이터 전달

JSON은 다른 프로그램들 사이의 범용 "공용 언어"야, 보통은 HTTP 위에서 쓰이지. 예를 들어, 서버가 C#로 되어 있고 프론트엔드가 JavaScript라면 — 공용 포맷은 JSON이지.

설정과 데이터 저장

많은 애플리케이션이 설정을 .json 파일에 저장해. 예를 들면, appsettings.json — .NET 앱의 표준이야. 장점: 읽고 수정하기 쉽고 버전 관리하기 편해.

서버 및 모바일 API

대부분의 REST API는 요청과 응답 포맷으로 JSON을 사용해: 예를 들어, 사용자 목록은 객체들의 배열로 넘어와.

도구와 라이브러리 구성

많은 .NET 도구들(Serilog, Swagger 등)은 설정에 JSON을 사용해. XML은 점점 덜 보이는데 — JSON이 더 간결하고 이해하기 쉬워서야.

7. JSON의 인기: 사람들이 좋아하는 이유

  • 가독성. 비개발자도 대체로 구조를 이해할 수 있어.
  • 네트워크 전송에 편리함. 일반 텍스트라서 용량 부담이 적어.
  • 모든 언어의 지원. 직렬화/역직렬화 기능이 대부분 기본 제공되거나 쉽게 사용 가능해.
  • 설정 파일로 편리. 어떤 에디터든 잘 다루지.
  • 생성하기 쉬움. JSON을 만들어내는 건 아주 간단해.
  • 배열, 중첩, null. 직관적이고 XML처럼 괄호 지옥에 빠지지 않아.

언제 JSON을 선택할까?

  • 모바일이나 웹 애플리케이션을 만든다면;
  • 외부 서비스의 API와 연동한다면;
  • 미래 통합에 친화적인 앱을 만들고 싶다면.

8. C#에서 JSON 다루기

간단히 .NET에서 인기 있는 라이브러리들:

최소한의 직렬화/역직렬화 예제:

using System.Text.Json;

// 객체를 JSON 문자열로 변환
var student = new Student { Name = "이반", Age = 25, IsStudent = true, Scores = new[] {5, 4, 5, 3} };
string json = JsonSerializer.Serialize(student);

// 반대로: JSON 문자열에서 객체 읽기
Student? parsed = JsonSerializer.Deserialize<Student>(json);

Console.WriteLine(json);

9. JSON 작업 시 초보자들이 흔히 하는 실수

자주 하는 실수는 따옴표를 헷갈리거나 콤마를 빼먹는 것 같아. 가끔 주석을 추가하려고(C#처럼 — 편하니까!) 하는데 JSON은 그걸 허용하지 않아.

또 다른 흔한 상황은 초기화되지 않은 컬렉션을 직렬화해서 기대하던 배열 대신에 "scores": null이 나오는 경우야. 컬렉션은 미리 초기화해 놔.

JSON은 텍스트라는 걸 잊지 마. 데이터가 많으면 메모리와 성능에 큰 영향을 줄 수 있어. 예를 들어 조건상 500MB를 JSON으로 직렬화하면 애플리케이션 성능이 눈에 띄게 떨어질 수 있어.

1
설문조사/퀴즈
시리얼라이제이션 소개, 레벨 43, 레슨 4
사용 불가능
시리얼라이제이션 소개
데이터 시리얼라이제이션 개념
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION