[c#] C# 직렬화와 원격 프로시저 호출

이번 포스트에서는 C#에서 직렬화(Serialization)와 원격 프로시저 호출(Remote Procedure Call)에 대해 알아보겠습니다.

직렬화란?

직렬화는 데이터를 일렬로 늘어놓는 것을 의미합니다. C#에서의 직렬화는 객체를 데이터 스트림으로 변환하는 과정을 의미합니다. 이를 통해 객체를 파일에 저장하거나 네트워크를 통해 전송할 수 있습니다.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

// 직렬화할 클래스
[Serializable]
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        // 객체 생성
        Person person = new Person { Name = "John", Age = 30 };

        // 직렬화
        IFormatter formatter = new BinaryFormatter();
        using (Stream stream = new FileStream("person.bin", FileMode.Create, FileAccess.Write, FileShare.None))
        {
            formatter.Serialize(stream, person);
        }
    }
}

위 코드는 Person 클래스를 이진 직렬화하여 person.bin 파일에 저장하는 예제입니다.

원격 프로시저 호출(RPC)

원격 프로시저 호출(Remote Procedure Call, RPC)은 클라이언트-서버 아키텍처에서 클라이언트의 요청에 따라 원격 서버의 프로시저를 호출하는 기술입니다.

C#에서는 .NET Remoting과 Windows Communication Foundation(WCF)를 통해 RPC를 구현할 수 있습니다.

일반적으로는 WCF를 사용하여 원격 프로시저 호출을 구현합니다.

using System;
using System.ServiceModel;

[ServiceContract]
interface ICalculator
{
    [OperationContract]
    double Add(double a, double b);
}

class Calculator : ICalculator
{
    public double Add(double a, double b)
    {
        return a + b;
    }
}

class Program
{
    static void Main()
    {
        using (ServiceHost host = new ServiceHost(typeof(Calculator)))
        {
            host.Open();
            Console.WriteLine("Calculator service is running...");
            Console.ReadLine();
        }
    }
}

위 코드는 WCF를 사용하여 간단한 덧셈 계산을 제공하는 원격 서비스를 구현한 예제입니다.

C#에서 직렬화와 원격 프로시저 호출을 다루는 것은 네트워크 프로그래밍에 있어 중요한 부분이므로, 실제 프로젝트에서의 활용도가 높을 것입니다.

더 자세한 내용은 MSDN을 참고하시기 바랍니다.