들어가며 gRPC에 대한 내용을 간단하게 정리해봤으나, 실질적으로 동작하는 부분까지 확인을 직접 해보는게 좋을거 같아서 직접 프로젝트를 구성해봤습니다. 요즘의 서버는 다양한 개발환경으로 구성이 되어 있는데요. 각 서버간의 통신에 RESTFul API를 이용해서 구성하기도 하지만, gRPC를 이용해서 보다 빠른 환경으로 구성할 수 있을 거 같네요. Service 프로젝트 만들기 새로운 프로젝트를 만들때, gRPC 서비스 템플릿을 이용해서 프로젝트를 생성 할 수 있습니다. 이후 기본적인 위치 및 프로젝트 이름을 생성해서 프로젝트를 만들 수 있습니다. Client 프로젝트 만들기 클라이언트 프로젝트의 경우에는, 콘솔 어플리케이션 템플릿으로 생성 하였습니다. 이후, 아래의 내용을 참고해서 Nuget Packag..
protobuf-net 이란? protobuf-net은 .NET 코드용 계약 기반 직렬 변환기로, Google에서 설계한 "프로토콜 버퍼" 직렬화 형식으로 데이터를 작성합니다. 그러나 API는 Google과 매우 다르며 일반적인 .NET 패턴을 따릅니다. (사용 면에서 XmlSerializer, DataContractSerializer, 등) 표준 유형을 작성하고 특성을 사용할 수 있는 대부분의 .NET 언어에서 작동해야 합니다. .proto 파일을 생성 하지 않아도 됩니다. NuGet 패키지 다운로드 protobuf-net 은 Nuget Package 관리자를 통해서 다운로드 받을 수 있습니다. 제가 받았을때 버전은 3.1.17 이였네요. 사용방법 [ProtoContract] public class A..
들어가며 gRPC를 보다보니, gRPC는 기본적으로 프로토콜 버퍼를 함께 사용합니다. 저도 아직 실무에서 사용해본적은 없지만 이번기회에 개념을 같이 정리해보았습니다. 개요 프로토콜 버퍼는 구조화된 데이터를 직렬화하기 위한 구글에서 개발하고, 공개한 언어 중립적, 플랫폼 중립적, 확장 가능한 구조입니다. (Serialized Data Structure) 다양한 언어를 지원하며, XML 보다 작고, 빠르고, 간단하며, 일반적으로 RESTFul API 사용시 JSON을 많이 사용하며, 이와 유사한 직렬화 데이터 구조입니다. JSON, XML의 경우 일반 사람들이 육안으로 데이터 확인이 가능하다면, 프로토콜 버퍼의 구조는 16진수로 인코딩 하기때문에, 직접적인 확인은 불가능하다는 단점이 있지만, 데이터 구조화 ..
들어가며 Web 서버로 구성된 프로젝트에서, 서버 클라이언트간에 데이터를 전송하는 방식으로 RESTFul API 에 Json 데이터 포멧을 이용해서 많이 사용합니다. 분명한 장/단점이 있는데요. 클라이언트와의 데이터 포멧은 데이터 파악의 용이한 점으로 인해서 Json 포멧을 많이 사용하고 있습니다. 서버끼리의 통신에도 Json 방식으로 데이터 포멧을 유지하고 있었는데요. 데이터 구조를 노출하지 않고 (물론 다양한 방법이 존재하지만요.), 서버간의 통신을 gRPC를 이용해서 좀더 빠른 통신을 구성해보는 것이 어떨까 해서 gRPC 에 대해 알아보기로 했습니다. gRPC 개요 gRPC는 google Remote Procedure Call 의 약자로서, 이름에서 보이듯 구글에서 만든, 모든 환경에서 실행할수 있..
객체 생성에 대한 제안 인터페이스를 기초로 한 코딩 가장 중요한 변경은 SecurityService 클래스의 실제 구현을 인터페이스 뒤로 숨기는 것이다. 이렇게 하면, AccountController 클래스가 SecurityService 클래스의 실제 구현체가 아닌 인터페이스에만 의존하게 만들 수 있다. ▶ 인터페이스 추출 public interface ISecurityService { void ChangeUsersPassword(string userID, string newPassword); } // ... public class SecurityService : ISecurityService { public void ChangeUsersPassword(string userID, string newPas..
의존성 관리하기 의존성으로 인해 발생할 수 있는 문제점들은 실제로 문제점들이 드러난 후에는 되돌릴기가 어려울 수도 있다. 시작단계에서 의존성을 관리하고, 지속적으로 관심을 두어 문제가 발생하지 않도록 해야 한다. 구현과 인터페이스의 비교 인터페이스를 기반으로 하는 프로그래밍에 익숙하지 않은 개발자는 인터페이스의 이면을 이해하는데 어려움을 격는다. 컴파일 시에는 인터페이스의 클라이언트는 해당 인터페이스에 대한 어떤 구현체가 사용되고 있는지에 대해 전혀 알 필요가 없다. new 키워드의 코드 스멜 인터페이스는 어떤 일을 수행할 수 있는지를 서술하며, 클래스는 어떻게 특정 작업을 수행할 것인지를 서술 한다. 실제 구현에 대한 상세 내용은 오직 클래스만이 알고 있다. 즉, 인터페이스는 해당 작업이 어떻게 수행되..