프로그래밍에서 Serialization과 Deserialization이란 무엇인가?

발행: (2026년 2월 22일 오후 04:25 GMT+9)
10 분 소요
원문: Dev.to

Source: Dev.to

If you’re learning programming, you’ve probably seen phrases like:

  • “Serialize this object”
  • “Deserialize the JSON”
  • “Convert object to string”

…and it can feel confusing.

Why do we need to convert objects at all?
Why can’t we just use them directly?

Don’t worry – by the end of this article you’ll understand serialization and deserialization in the simplest way possible.

1️⃣ 혼란 (왜 이렇게 어려운가)

프로그램에서 객체를 생성합니다. 모든 것이 완벽하게 동작합니다.
그런데 누군가가 말합니다:

  • “이 데이터를 프론트엔드에 보내세요.”
  • “이 객체를 파일에 저장하세요.”
  • “데이터베이스에 저장하세요.”
  • “다른 서버에 보내세요.”

그러자 갑자기 이렇게 말합니다: “먼저 직렬화하세요.”

이제 무섭게 느껴집니다. 그게 도대체 무슨 뜻인가요?

2️⃣ 직렬화가 존재하는 이유 (실제 문제)

프로그램 내부에서 데이터는 **메모리(RAM)**에 존재합니다.

원시 메모리의 문제점

  • 프로그램이 종료되면 메모리가 사라집니다.
  • 원시 메모리를 다른 컴퓨터에 보낼 수 없습니다.
  • 메모리 구조를 파일에 직접 저장할 수 없습니다.
  • 다른 프로그래밍 언어가 여러분의 내부 객체 형식을 이해하지 못합니다.

컴퓨터가 이해할 수 있는 것은:

  • 텍스트
  • 원시 바이트 (0과 1)

그래서 개발자들은 객체를 저장하거나 전송할 수 있는 형태로 변환하는 방법이 필요했습니다.
그 해결책이 직렬화(serialization) 입니다.

다시 원래 형태로 되돌리는 것을 역직렬화(deserialization) 라고 합니다.

3️⃣ Real‑Life Analogy (Super Simple)

레고 자동차를 만든다고 상상해 보세요. 방 안에서는 완전히 조립된 상태입니다.
이제 다른 도시에 사는 사촌에게 보내고 싶습니다. 완전 조립된 상태로는 배송할 수 없으니:

  1. 부품으로 분해합니다.
  2. 부품을 상자에 넣습니다.
  3. 상자를 보냅니다.

사촌은 상자를 받고, 열어서 레고 자동차를 다시 조립합니다.

  • 분해 및 포장 → 직렬화
  • 재조립 → 역직렬화

그게 전부입니다. 마법 같은 건 없습니다.

4️⃣ 간단한 설명 (복잡한 단어 없이)

  • Serialization = 객체를 텍스트나 바이트로 변환하여 저장하거나 전송할 수 있게 함.
  • Deserialization = 그 텍스트나 바이트를 다시 원래 객체로 변환.

간단히:

Object → Text/Bytes → Object

5️⃣ 직렬화 작동 방식 (단계별)

Python에서 다음과 같은 학생 데이터를 가지고 있다고 가정해 보겠습니다:

student = {
    "name": "Rahul",
    "age": 15
}

🔹 Step 1: Serialize

JSON(텍스트 형식)으로 변환합니다:

{"name": "Rahul", "age": 15}

이제 순수한 텍스트가 되었습니다. 이 텍스트는 다음과 같이 사용할 수 있습니다:

  • 파일에 저장하기
  • 데이터베이스에 보관하기
  • API를 통해 전송하기
  • 서로 다른 프로그래밍 언어 간에 공유하기

🔹 Step 2: Deserialize

누군가 이 텍스트를 받으면 다시 객체로 변환합니다:

student = {"name": "Rahul", "age": 15}

이제 다시 일반 객체처럼 동작합니다.

6️⃣ 매우 작은 코드 예제 (Python)

직렬화 예제

import json  # Library to work with JSON

student = {
    "name": "Rahul",
    "age": 15
}

# Convert dictionary to JSON string
serialized_data = json.dumps(student)

print(serialized_data)

Output

{"name": "Rahul", "age": 15}

역직렬화 예제

# Convert JSON string back to dictionary
original_data = json.loads(serialized_data)

print(original_data["name"])

Output

Rahul

7️⃣ 드라이 런 (가장 중요한 부분)

과정을 천천히 살펴보겠습니다.

  1. 객체 생성

    student = {"name": "Rahul", "age": 15}

    이것은 메모리에 저장된 딕셔너리입니다.

  2. 직렬화

    serialized_data = json.dumps(student)

    결과:

    serialized_data = '{"name": "Rahul", "age": 15}'

    중요: serialized_data는 이제 딕셔너리가 아니라 문자열입니다.
    serialized_data["name"]와 같이 접근하면 텍스트일 뿐이므로 오류가 발생합니다.

  3. 역직렬화

    original_data = json.loads(serialized_data)

    이제 original_data는 다시 딕셔너리가 되므로 original_data["name"]를 사용할 수 있습니다.

전체 흐름

Object → JSON String → Object

8️⃣ 실생활에서 직렬화가 사용되는 곳

직렬화는 어디에나 존재합니다:

  • 🌐 프론트‑엔드가 백‑엔드에 데이터 전송
  • 📱 모바일 앱이 서버 호출
  • 💾 파일에 데이터 저장
  • 🗄️ 데이터베이스에 객체 저장
  • 🔐 마이크로서비스 간 데이터 전송
  • 🎮 게임 진행 상황 저장
  • 📨 네트워크를 통한 데이터 전송

API를 사용할 때마다 직렬화가 백그라운드에서 이루어집니다. 인스타그램이 프로필을 로드할 때… 직렬화와 역직렬화가 조용히 작동합니다.

9️⃣ 초보자 흔히 하는 실수

  • JSON을 객체와 동일하게 생각하기 – JSON은 텍스트이며, 객체는 메모리에 존재합니다.
  • 직렬화가 객체를 문자열로 변환한다는 것을 잊어버리기 – 문자열에서 직접 속성에 접근할 수 없습니다.
  • 역직렬화 없이 JSON을 사전처럼 접근하려 하기.
  • 직렬화가 JSON만을 의미한다고 가정하기 – XML, 바이너리 포맷, Protocol Buffers 등도 포함될 수 있습니다.

🔟 직렬화 vs. 역직렬화 (빠른 비교)

직렬화역직렬화
방향객체 → 텍스트/바이트텍스트/바이트 → 객체
발생 시점전송하거나 저장하기 전수신하거나 읽은 후
발생 위치송신 측수신 측

1️⃣1️⃣ 언제 직렬화를 사용해야 할까요?

  • 데이터를 영구 저장해야 할 때(파일, 데이터베이스, 캐시).
  • 프로세스, 서비스, 혹은 머신 간에 통신이 필요할 때.
  • 서로 다른 프로그래밍 언어나 플랫폼 간에 데이터를 공유하고 싶을 때.

요약하면, 데이터가 현재 프로그램의 메모리를 떠나야 할 때마다 직렬화가 필요하고(반대쪽에서는 역직렬화가 필요합니다).

직렬화를 사용해야 할 때

  • 데이터를 다른 시스템에 보내고 싶을 때
  • 객체를 영구적으로 저장하고 싶을 때
  • 서로 다른 언어가 데이터를 이해하도록 하고 싶을 때
  • API를 구축하고 있을 때
  • 데이터베이스를 다룰 때

데이터가 프로그램 외부로 이동하면 직렬화가 관여합니다.

1️⃣2️⃣ 빠른 복습 요약

  • Serialization = Object → Text/Bytes
  • Deserialization = Text/Bytes → Object
  • 데이터를 전송하거나 저장하기 위해 필요합니다
  • JSON은 가장 일반적인 포맷입니다
  • 직렬화 후, 데이터는 문자열이 됩니다
  • 객체로 사용하기 전에 반드시 역직렬화해야 합니다
  • API, 데이터베이스, 모바일 앱, 그리고 서버에서 사용됩니다

Now, if someone says:

“이 객체를 전송하기 전에 직렬화하세요.”

You won’t panic.
You’ll just think:

“오… 우리는 그것을 상자에 포장하고 있어요.”

And that’s it.

0 조회
Back to Blog

관련 글

더 보기 »