[BinaryFormatter]의 제거 계획

저는 주로 HTTP 통신을 했었는데 고성능 프로세스 간 통신을 원하시는 분들은 BinaryFormatter를 자주 사용하셨던 것 같습니다.

MSDN 에서는 BinaryFormatter를 제거하면서 대신 JsonSerializer나 XmlSerializer를 사용하라고 하지만, 아무래도 사람이 읽을 수 있는 데이터는 통신 속도가 느리다고 생각해서인지? 이것을 부정적으로 생각하는 분들이 계시네요.

또한 BinaryFormatter가 빠른 이유는 불안전하기 때문이라는 주장도 보입니다.

역시 이런 분야에서도 트레이드오프는 불변의 진리네요…

저도 그런 부류입니다. (포멧터에 대해 자세히는 알지 못하나 느낌적인 느낌으로요!)

아래는 BinaryFormatter 제거에 대한 Github 토론입니다.

구글 번역기를 통해 대충 이해한 바에 따르면 이 스레드는 Google의 grpc에 사용되는 ProtoBuf의 .NET Wrapper를 대안을 이용하자는 듯한데, mconnew 라는 분이 그것에 대해 반대를 하면서 다른 토론 스레드가 생성됩니다.


그리고 또한 BinaryFormatter를 이용했을 때 .NET App이 공격을 받을 수 있는 상황을 설명하는 링크도 있습니다.


아래는 BinaryFormatter 제거에 관련된 MSDN 링크입니다.


아래는 BinaryFormatter 제거에 관련된
C#의 언어 디자인 입니다. 언제 어느 방향으로 제거할 것인지 계획을 설명하고 있습니다.


어쨌든 .NET에선 좋던 싫든 장기적으로 BinaryFormatter에 대한 제거 계획을 확정한 것 같고, 대안을 찾아 도메인에 맞는 테스트와 리펙토링을 해야할 것 같습니다.

9개의 좋아요

BinaryFormatter는 형식이 포함되어 생성된 스트림 데이터의 양이 큰 편입니다.

그리고 Protobuf나 MessagePack에 비해 성능이 떨어진다는 단점도 있습니다.

아래 자료는 2011년 자료이긴 하나 BinaryFormatter가 이후의 성능 향상이 없었던 것으로 알고 있어서 성능은 되려 좀 더 벌어지지 않았을까 합니다.

다른 대안으로 MessagePack을 대신 사용할 수 있습니다. 또는 ProtoBuf를 사용할 수도 있습니다.

5개의 좋아요

부가 설명 감사드립니다.

구글 번역기를 통해 대충 이해한 바에 따르면 이 스레드는 Google의 grpc에 사용되는 ProtoBuf의 .NET Wrapper를 대안을 이용하자는 듯한데, mconnew 라는 분이 그것에 대해 반대 를 하면서 다른 토론 스레드가 생성됩니다.

해당 토론 글에 mconnew의 protobuf가 BinaryFormatter의 대안이 되지 않는 이유도 설명하고 있어서 함께 보시면 좋을 거 같습니다.

비교 대상이 아니다 라는 느낌으로 저는 다가오네요.

4개의 좋아요

어떤 목적으로 사용할 것 인가에 따라 다를 것 같네요. MessagePack의 C# 구현체도 역시 순환참조를 지원하지 않습니다. 문제는 원론적으로 성능(속도 및 크기)과 밀접한 관계가 있습니다.

관련 문제를 해결한 범용 이진 시리얼라이저로 Ceras라는게 있습니다. 아쉽지만 아직까지는 보편적으로 활성화된 솔루션은 아닌 듯 합니다.

5개의 좋아요

오…새로운 오픈소스를 알아갑니다.

저는 꽤 컨트리뷰터가 많다고…보여지는 오픈소스네요 ㅎㅎ 나중에 기회가 되면 써보고 싶습니다.


다시 따로 떨어져 나간 스레드 를 읽어보면 관점의 차이라고 생각해서 mconnew는 직렬화 형식이라고 생각하지 않는 것 같습니다.

제가 이해되는 mconnew의 맥락은

예를 들면 Object Model (Entity)를 정의하고 Json String 으로 직렬화 했을 때 그것은 객체를 기반으로 직렬화가 된 것으로 직렬화라고 보는 것이 맞고,
ProtoBuf의 경우에는 해당 Object Model 자체만으로는 직렬화가 어렵고 ProtoBuf의 계약형식을 따로 파일로 정의해야 하기 때문에, '직렬화’가 되는 주체가 'OM’인지 '계약’인지 에 따라서 토론 참여자들의 주장이 엇갈리는 것 같습니다.

그래서 제가 생각하는 결론은 말씀하신대로

문제는 원론적으로 성능(속도 및 크기)과 밀접한 관계가 있습니다.

에 동의하며 주요하게 신경 쓸 부분은 아니지만 저런 관점도 있다는 것도 알아가면 된다라고 생각이 됩니다.

2개의 좋아요