* 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 필드명과 객체 필드명 매핑을 할 때 케이스 변환 규칙을 적용할 수 있음.
'Computer Science > Spring' 카테고리의 다른 글
WebApplication 이해 (2) | 2024.12.18 |
---|---|
Spring과 Spring boot (0) | 2024.12.18 |
Spring 트래픽 처리 방법 (0) | 2024.12.10 |
동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있을까. (0) | 2024.12.10 |
@Component, @Controller, @Service, @Repository 차이점 (1) | 2024.12.08 |