[C#] ArvoConvert 사용하기

C# 2023. 10. 10. 23:49
728x90
728x170

Avro는 Apache에서 만든 프레임워크로 데이터 직렬화 기능을 제공합니다. 언어 중립적인 데이터 직렬화 시스템으로 JSON과 비슷하지만 Avro는 스키마가 존재한다는 차이점이 있으며 또한 압축률이 좋고 암호화가 되어있어서 서버 간 통신에 사용하기 용이합니다.
대량의 데이터를 처리할때 Arvo를 사용하면 데이터 크기를 많이 줄일 수 있습니다.
아래 깃헙페이지를 보면 Json 보다 속도나 압축률이 좋은것을 알 수 있습니다.

https://github.com/AdrianStrugala/AvroConvert

GitHub - AdrianStrugala/AvroConvert: Rapid Avro serializer for C# .NET

Rapid Avro serializer for C# .NET. Contribute to AdrianStrugala/AvroConvert development by creating an account on GitHub.

github.com

또한 C# 으로 만들어진 ArvoConvert는 아래처럼 많은 기능을 지원하고 있습니다.

단, 상업적 용도로 사용할 경우 라이센스를 구매해야 합니다.
 
아래는 사용하는 방법입니다.
1. Nuget에서 'AvroConvert'를 설치합니다.

 
2. 아래처럼 코딩하여 사용합니다.
TestData Class를 정의해 이를 사용하는 방법입니다.

using SolTechnology.Avro;

namespace AvroConvertTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            TestData testData = new()
            {
                ID = 0,
                Name = "강준",
                Age = 30,
                Birth = DateTime.Parse("1990-09-18"),
                Address = "경기도 용인시",
                CrateTime = DateTime.Now
            };

            // 직렬화
            byte[] arvoObject = AvroConvert.Serialize(testData);

            // 역직렬화
            TestData deserializedObject = AvroConvert.Deserialize<TestData>(arvoObject);

            Console.WriteLine("");
            Console.WriteLine("◆ Avro 개체에서 스키마 읽기");
            string schemaInJsonFormat = AvroConvert.GetSchema(arvoObject);
            Console.WriteLine(schemaInJsonFormat);

            Console.WriteLine("");
            Console.WriteLine("◆ 대량 Avro 객체 컬렉션을 하나씩 역직렬화");
            List<TestData> testDatas = new();

            for (int i = 0; i < 100; i++)
            {
                testDatas.Add(new TestData()
                {
                    ID = i,
                    Name = "강준" + i,
                    Age = 30,
                    Birth = DateTime.Parse("1990-09-18"),
                    Address = "경기도 용인시",
                    CrateTime = DateTime.Now
                });
            }

            byte[] arvoObjects = AvroConvert.Serialize(testDatas);

            using (var reader = AvroConvert.OpenDeserializer<TestData>(new MemoryStream(arvoObjects)))
            {
                while (reader.HasNext())
                {
                    var item = reader.ReadNext();
                    Console.WriteLine(item.Name);
                }
            }

            Console.WriteLine("");
            Console.WriteLine("◆ Avro 객체에서 C# 모델 생성");
            string resultModel = AvroConvert.GenerateModel(arvoObject);
            Console.WriteLine(resultModel);

            Console.WriteLine("");
            Console.WriteLine("◆ Avro 객체를 JSON으로 변환");
            var resultJson = AvroConvert.Avro2Json(arvoObject);
            Console.WriteLine(resultJson);

            Console.ReadKey();
        }
    }

    public class TestData
    {
        public int ID { get; set; }
        public string? Name { get; set; }
        public int Age { get; set; }
        public DateTime Birth { get; set; }
        public string? Address { get; set; }
        public DateTime CrateTime { get; set; }

    }
}

 
결과

[Source]
https://github.com/kei-soft/AvroConvertTest

GitHub - kei-soft/AvroConvertTest

Contribute to kei-soft/AvroConvertTest development by creating an account on GitHub.

github.com

 

728x90
그리드형

'C#' 카테고리의 다른 글

[C#] Mediatr 참고 링크  (0) 2023.11.08
[C#] Indexer  (0) 2023.10.17
[C#] Linq Aggregate 사용하기  (0) 2023.09.26
[C#] Liquid Template 사용하기 - Fluid  (0) 2023.09.21
[C#/Blazor] FluentUI Icon - Microsoft.Fast.Components.FluentUI.Icons  (0) 2023.09.20
Posted by kjun
,