본문 바로가기
카테고리 없음

Serialize / Deserialize

by 차리하루일기 2024. 10. 25.

Serialize( 직렬화 ) 

객체를 JSON이나 XML과 같은 문자열 형식으로 변환하는 과정을 직렬화

Spring과 같은 웹 프레임워크에서 컨트롤러가 데이터를 내보내는 과정을 "직렬화"라고 표현하는 이유는, 컨트롤러가 객체를 특정 포맷(예: JSON, XML 등)으로 변환하여 클라이언트에게 전송하기 때문입니다. 이 과정은 프로그래밍에서 "직렬화(Serialization)"의 정의와 동일한 의미를 가집니다.

 

컨트롤러 메서드 정의
@RestController
public class UserController {

    @GetMapping("/user")
    public User getUser() {
        return new User("Alice", 25);
    }
}

 

User 객체 정의
public class User {
    private String name;
    private int age;

    // 생성자, 게터, 세터 생략
}
결과물
{
  "name": "Alice",
  "age": 25
}

 

  • 직렬화 과정
  • 컨트롤러 메서드에서 User 객체를 반환.
  • Spring은 내부적으로 HttpMessageConverter를 사용하여 객체를 JSON으로 직렬화. 기본적으로 Jackson 또는 Gson 라이브러리가 사용.
  • 직렬화된 JSON 문자열이 HTTP 응답의 본문에 포함되어 클라이언트에게 전송.

 

Deserialize( 역직렬화)

직렬화된 데이터를 다시 객체로 변환하는 과정을 의미. 즉, 클라이언트가 JSON, XML 또는 다른 직렬화된 형태의 데이터를 서버로 보내면, 이를 서버 측에서 Java 객체로 변환하는 작업.

Spring에서는 주로 요청 본문(body)에 담긴 JSON 데이터를 객체로 변환할 때 이 과정을 수행

 

예시코드
@RestController
public class UserController {

    @PostMapping("/user")
    public String createUser(@RequestBody User user) {
        return "User created: " + user.getName();
    }
}
User 클래스
public class User {
    private String name;
    private int age;

    // Getters and Setters 생략
}

 

클라이언트에서 보낸 JSON 데이터
{
  "name": "Alice",
  "age": 25
}

 

  • 역직렬화 과정
  • 클라이언트가 POST 요청을 보내면서 JSON 데이터를 서버에 전달.
  • Spring의 @RequestBody 어노테이션은 요청 본문에 있는 JSON 데이터를 User 객체로 변환.
  • 내부적으로 Jackson 라이브러리가 JSON 문자열을 User 클래스의 필드에 맞게 매핑하여 Java 객체로 변환.