티스토리 뷰

IT 용어

[IT 용어]마샬링(Marshalling)

retto9522 2024. 9. 13. 14:34

마샬링(Marshalling)? 언마샬링(Un-Marshalling)?

마샬링이란 객체나 특정 형태의 데이터를 저장 및 전송 가능한 데이터 형태로 변환하는 과정을 이야기합니다.

반대로, 언마샬링은 변환했던 데이터를 원래대로 복구하는 과정을 이야기합니다.

 

마샬링과 언마샬링을 비교적 쉽게 이해하기 위해서 Encoding/Decoding, 파싱, 직렬화/역직렬화에 대한 개념을 생각하면 될 것 같습니다.

직렬화/역직렬화
이 마샬링이라는 개념은 직렬화( Serialization )와 많이 비교되며, 직렬화의 개념과 유사하다고 많이 이야기합니다.
직렬화란 객체를 바이트 스트림으로 변환하는 과정입니다. 웹에서는 그 의미가 확장되어 JSON 데이터를 객체로 변환하거나, 객체를 JSON 데이터로 변환하는 것을 의미합니다. 네트워크를 통한 데이터 전송이나 파일 저장 등에 사용됩니다.
직렬화된 데이터는 나중에 다시 객체로 복원할 수 있습니다. 이를 역직렬화(Deserialization)라고 합니다.

직렬화는 마샬링과 비슷한 개념이지만, 직렬화연속적인 바이트 스트림으로의 변환을, 마샬링특정 통신 프로토콜이나 파일 포맷에 맞게 데이터를 변환하는 것에 초점을 둠으로써 마샬링이 직렬화보다 더 큰 범위의 과정을 의미합니다. 
즉, 직렬화는 마샬링이라고 할 수 있지만, 마샬링은 꼭! 직렬화다! 라고 할 순 없습니다.

마샬링은 그럼 어디에 쓰일까?

마샬링은 JSON 데이터 형식에 국한되지 않고 XML과 같은 다양한 데이터 형식도 변환이 가능합니다.

@RequestBody와 @ResponseBody

Controller 클래스를 작성한다면, 요청은 @RequestBody를 통해 JSON 데이터 → 객체 데이터로 변환하여 사용하고, 응답은 @ResponseBody를 통해 객체 데이터 → JSON 데이터로 변환하여 내려줍니다.

 

이러한 어노테이션을 사용하며 내부적으로 MappingJackson2HttpMessageConverter에 의해 객체와 JSON간 변환 과정을 거치게 됩니다. 웹에서는 이러한 변환 과정을 직렬화, 역직렬화라고 하며 이는 곧 마샬링, 언마샬링이라고도 할 수 있습니다.

 

 

사용 예시

JAVA를 통한 마샬링, 언마샬리의 코드는 아래와 같습니다.

 

마샬링 (객체 → JSON으로 변환)

import com.fasterxml.jackson.databind.ObjectMapper;

class Person {
    private String name;
    private int age;

    // 기본 생성자
    public Person() {}

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter와 setter 생략
}

public class MarshallingExample {
    public static void main(String[] args) {
        try {
            Person person = new Person("홍길동", 30);
            ObjectMapper objectMapper = new ObjectMapper();

            // 객체를 JSON 문자열로 변환
            String jsonString = objectMapper.writeValueAsString(person);
            System.out.println("마샬링 결과: " + jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

언마샬링 (JSON → 객체로 변환)

import com.fasterxml.jackson.databind.ObjectMapper;

public class UnmarshallingExample {
    public static void main(String[] args) {
        String jsonString = "{\"name\":\"홍길동\",\"age\":30}";

        try {
            ObjectMapper objectMapper = new ObjectMapper();

            // JSON 문자열을 객체로 변환
            Person person = objectMapper.readValue(jsonString, Person.class);
            System.out.println("언마샬링 결과: 이름 = " + person.getName() + ", 나이 = " + person.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

'IT 용어' 카테고리의 다른 글

[IT 용어]API(Application Programming Interface)  (0) 2024.09.20
[IT 용어]도메인(Domain)  (0) 2024.09.19
[IT 용어]WebServer  (0) 2024.09.19
[IT 용어]덤프(Dump)  (0) 2024.09.19
[IT 용어]프록시(Proxy)  (0) 2024.09.19
공지사항
최근에 올라온 글
Total
Today
Yesterday