티스토리 뷰
마샬링(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