본문 바로가기
Computer Science/Spring

JSON에 대해서 ( Serialiazation, Deserialization )

by 꽃요미 2024. 12. 8.

* JSON 이란?

 - JavaScript Object Notation 경량의 데이터 교환 형식으로, 사람이 읽고 쓰고 쉽게 기계가 분석하고 생성하기 용이한 구조를 갖춘 포맷. 키-값으로 데이가 표현되며, 다양한 프로그래밍 언어에서 쉽게 파싱할 수 있음.

 

* 예시

{
  "name": "Alice",
  "age": 30,
  "hobbies": ["reading", "music"]
}

 

* 특징

 - 직렬화 (Serialization) 과 역직렬화 (Deserialization) 으로 데이터를 주고받을 수 있다.

 

1. 직렬화 Serialization

 - 애플리케이션 메모리 상의 객체 ( Ex : Java의 POJO 객체, Python의 dick등)를 JSON 문자열로 변환하는 과정.

이 과정을 통해 데이터는 문자열 형태로 네트워크 전송, 파일 저장 등을 할 수 있음.

 

- 데이터 전송과 저장에 용이함. REST API, HTTP 통신, 파일 저장 등에 활용됨.

 

* 직렬화 예시 (Jackson - Java)

ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice", 30, Arrays.asList("reading", "music"));

// 객체 -> JSON 문자열
String jsonString = mapper.writeValueAsString(user);
System.out.println(jsonString); // {"name":"Alice","age":30,"hobbies":["reading","music"]}

 

 

2. 역직렬화 (Deserialization)

 - 역직렬화는 JSON 형태의 문자열을 다시 객체 형태로 복원하는 과정임.

수신한 JSON 데이터를 사용 언어의 객체로 변환하면, 이후 로직 처리나 데이터 가공을 쉽게 할 수 있음.

 

* 역직렬화 예시

ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Alice\",\"age\":30,\"hobbies\":[\"reading\",\"music\"]}";

// JSON 문자열 -> 객체
User user = mapper.readValue(jsonString, User.class);
System.out.println(user.getName()); // Alice
System.out.println(user.getAge());  // 30
System.out.println(user.getHobbies()); // [reading, music]

 

* JSON 직렬화/역직렬화 라이브러리

 

 - 다양한 언어에서 JSON 처리를 쉽게 할 수 있는 라이브러리를 제공함.

1. Java : Jackson, Gson

2. JavaScript/TypeScript : JSON.parse(), JSON.stringify() 기본 함수 제공.

3. Python : json 모듈 (json.loads(), json.dumps())

 

* JSON 처리 시 주의점

 

 - 데이터 타입 변환 주의 : 기본적으로 문자열, 숫자, 불리언, null, 배열, 객체 타입만 가능.

역 직렬화 시, 언어별 타입에 맞게 매핑하는 과정에서 타입 불일치가 발생할 수 있음.

 

 - 필드 누락 처리 : 역직렬화 시 JSON에 없는 필드나 추가 필드가 있을 수 있음.

해당 필드에 대해 기본값을 설정하거나 무시하는 옵션을 둘 수 있음.

 

 - 대소문자 규칙 : 언어별로 변수명 표기법이 다를 수 있으므로,

JSON 필드명과 객체 필드명 매핑을 할 때 케이스 변환 규칙을 적용할 수 있음.