[c#] 직렬화와 이벤트 소싱
이번 포스트에서는 C#에서 직렬화와 이벤트 소싱에 대해 알아보겠습니다.
직렬화(Serialization)
직렬화는 객체를 저장하거나 전송하기 위해 그 상태를 변환하는 과정을 의미합니다. C#에서는 System.Runtime.Serialization
네임스페이스를 활용하여 객체를 직렬화하고 역직렬화할 수 있습니다.
아래는 DataContract
와 DataMember
어트리뷰트로 객체를 직렬화하는 간단한 예제 코드입니다.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
[DataContract]
class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
MemoryStream stream = new MemoryStream();
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Person));
Person person = new Person { Name = "John", Age = 30 };
serializer.WriteObject(stream, person);
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
Console.WriteLine(reader.ReadToEnd());
}
}
이벤트 소싱(Event Sourcing)
이벤트 소싱은 시스템의 상태를 변경하는 모든 동작을 이벤트의 시퀀스로 저장하는 패턴입니다. C#에서는 System.Reactive
네임스페이스와 EventStream
클래스를 사용하여 이벤트 소싱을 구현할 수 있습니다.
아래는 간단한 이벤트 소싱 예제 코드입니다.
using System;
using System.Reactive.Linq;
class Program
{
static void Main(string[] args)
{
var eventStream = new EventStream();
var subscription = eventStream
.OfType<SomeEvent>()
.Subscribe(e => Console.WriteLine($"Received event: {e.Message}"));
eventStream.Publish(new SomeEvent { Message = "Hello, World!" });
}
}
class EventStream : IObservable<object>
{
private readonly Subject<object> _subject = new Subject<object>();
public IDisposable Subscribe(IObserver<object> observer)
{
return _subject.Subscribe(observer);
}
public void Publish(object @event)
{
_subject.OnNext(@event);
}
}
class SomeEvent
{
public string Message { get; set; }
}
이렇게 C#에서는 쉽게 직렬화와 이벤트 소싱을 구현할 수 있습니다. 계속해서 이러한 기술들을 활용하여 실제 프로젝트에 적용해보는 것을 권장합니다.
더 많은 정보를 원하시면 아래 참고 자료를 확인해주세요.
참고 자료: