[c#] C# 직렬화와 프로세스 간 통신
C# 프로그래밍에서 직렬화(serialization)는 데이터를 객체 또는 데이터 구조로 변환하여 다른 프로세스에 전송하거나 저장하기 위해 사용됩니다. 직렬화된 데이터는 바이트 스트림으로 변환되어 네트워크를 통해 전송할 수 있고, 파일 시스템에 저장할 수 있습니다. 이러한 기술은 C#에서 다른 프로세스와의 통신을 가능하게 합니다.
직렬화(Serialization)란 무엇인가요?
직렬화(serialization)는 객체의 상태 또는 구조를 저장하거나 전송하기 위해 바이트 스트림으로 변환하는 과정을 말합니다. 이러한 과정을 통해 객체를 파일로 저장하고, 네트워크를 통해 전송할 수 있습니다. C#에서는 주로 BinaryFormatter
, XmlSerializer
, DataContractSerializer
등의 클래스를 사용하여 직렬화를 수행합니다.
C#에서 직렬화 활용하기
C#에서 데이터를 직렬화하여 다른 프로세스 간에 통신하기 위해서는 다음과 같은 단계를 거칩니다:
- 직렬화(Serialization): 데이터를 객체나 데이터 구조로 변환하여 직렬화합니다.
- 통신(Communication): 직렬화된 데이터를 다른 프로세스에 전송합니다.
- 역직렬화(Deserialization): 받은 데이터를 역직렬화하여 원래의 형태로 복원합니다.
// 직렬화 예제
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Person
{
public string Name;
public int Age;
}
class Program
{
static void Main()
{
Person person = new Person();
person.Name = "John";
person.Age = 30;
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, person);
byte[] serializedData = stream.ToArray();
// 통신
// 역직렬화 예제 (다른 프로세스에서)
stream = new MemoryStream(serializedData);
Person deserializedPerson = (Person)formatter.Deserialize(stream);
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
}
}
프로세스 간 통신
C#에서 직렬화를 사용하여 프로세스 간에 통신을 구현하려면 다음과 같은 방법을 사용할 수 있습니다:
- 소켓 통신: TCP 또는 UDP 소켓을 사용하여 통신합니다.
- 원격 프로시저 호출(Remote Procedure Call, RPC): 원격 서버에 저장된 함수 또는 프로시저를 호출하여 통신합니다.
- 원격 메시지 호출(Remote Message Invocation, RMI): 객체 간 통신을 지원하는 프로그래밍 모델을 사용하여 통신합니다.
C#에서는 .NET Remoting과 Windows Communication Foundation(WCF)을 사용하여 프로세스 간에 통신을 구현할 수 있습니다.
C#에서의 직렬화와 프로세스 간 통신은 다른 프로세스와 데이터를 주고받는 유용한 기술을 제공합니다.
참고 자료
- Microsoft Docs. “Serialization (C#)” 링크