프로그래밍 일반 65

gRPC C++ 동기 API 사용법

gRPC 네 가지 종류의 서비스 메서드1. 클라이언트가 Stub을 사용하여 서버에 요청을 보내고 일반 함수 호출처럼 응답이 돌아올 때까지 기다리는 RPC입니다.// Obtains the feature at a given position.rpc GetFeature(Point) returns (Feature) {} 2. 클라이언트가 서버에 요청을 보내고 스트림을 받아 일련의 메시지를 다시 읽는 서버 측 스트리밍 RPC입니다.클라이언트는 더 이상 메시지가 없을 때까지 반환된 스트림에서 읽습니다. stream 키워드를 응답 타입 앞에 두어 서버 측 스트리밍으로 지정합니다.// Obtains the Features available within the given Rectangle. Results are// st..

gRPC C++ 심플 사용예

이제 클라이언트가 호출할 수 있는 서버의 추가 메서드로 애플리케이션을 업데이트하는 방법을 살펴보겠습니다.gRPC 서비스는 프로토콜 버퍼를 사용하여 정의됩니다. gRPC 소개 글을 참고해 주세요. gRPC 코드 받기git으로 gRPC를 받아 봅시다. gRPC 관련 코드를 보고 싶다면 받아 두면 좋습니다.git clone https://github.com/grpc/grpc  gPRC Proto 정의다음 코드는 서버와 클라이언트(Stub)에 SayHello() RPC 메서드가 있습니다. 클라이언트는 HelloRequest를 매개 변수로 가지고 서버로 부터 HelloReply를 반환 받습니다.examples\protos\helloworld.proto에 정의된 일부 입니다.// The greeting servic..

gRPC 소개

gRPC는 Google에서 제작한 고성능, 범용 오픈 소스 원격 프로시저 호출(RPC) 프레임워크로, 프로토콜 버퍼(Protocol Buffers)를 인터페이스 정의 언어(IDL)와 기본 메시지 교환 형식으로 사용합니다.gRPC를 통해 클라이언트 애플리케이션은 마치 로컬 객체인 것처럼 다른 머신의 서버 애플리케이션에서 메서드를 직접 호출할 수 있습니다. 이는 분산 애플리케이션과 서비스를 더욱 쉽게 만들 수 있게 합니다. 많은 RPC 시스템과 마찬가지로 gRPC는 서비스를 정의하고 매개변수와 반환 유형으로 원격으로 호출할 수 있는 메서드를 지정하는 아이디어를 기반으로 합니다.gRPC 서버 사이드서버는 정의된 인터페이스를 구현하며, 클라이언트 호출을 처리하기 위해 gRPC 서버를 실행합니다.gRPC 클라이언..

flutter 버전 업그레이드

flutter의 현재 채널 및 버전 확인'flutter --version' 명령으로 stable 채널이고 버전이 3.19.0인 것을 알 수 있습니다.> flutter --versionFlutter 3.19.0 • channel stable • https://github.com/flutter/flutter.gitFramework • revision bae5e49bc2 (5 months ago) • 2024-02-13 17:46:18 -0800Engine • revision 04817c99c9Tools • Dart 3.3.0 • DevTools 2.31.1 채널 변경 현재 채널이 stable이 아니라면 'flutter channel stable' 명령으로 채널을 stable로 변경 할 수 있습니다.> flu..

[Go] Slice 기능 요약

슬라이스 배열은 정한 길이에서 더이상 크기가 늘어나지 않습니다. 슬라이스를 사용하면 이러한 불편을 해소 할 수 있습니다. 다음 과 같이 선언하면 크기가 0인 슬라이스가 만들어 집니다. 크기를 초과한 접근을 하면 런타임에 패닉이 발생합니다. var slice []int // 패닉 발생 slice[1] = 10 사용 방법 // {}로 초기화 var slice = []int{1, 2, 3} // 다음은 크기가 3인 배열 선언, 구분합시다! var array = [...]int{1, 2, 3} // make로 초기화 var slice = make([]int, 3) // append로 요소 추가 slice = append(slice, 4) // append로 여러 값 추가 slice = append(slice, ..

Go 언어의 Json Tag

Go 언어의 Json 참고: https://www.joinc.co.kr/w/man/12/golang/json JSON Tag encoding/json 패키지의 경우 아래와 같이 Tag를 이용해서 마샬/언마샬 방식을 설정 할 수 있습니다. type RequestCreateOpenChannel struct { Name string `json:"name"` ChannelUrl string `json:"channel_url"` CustomType string `json:"custom_type"` Data string `json:"data"` IsDynamicPartitioned bool `json:"is_dynamic_partitioned"` } omitempty omit empty : 비어 있으면 생략한다. ..

C++ 개발자를 위한 Go 언어 요약 정리

C++ 개발자 분이 두꺼운 Go 언어책 모두를 다시 보실 필요 없이 C++ 언어 기반에서 추가로 이해하면 좋은 핵심 내용들만 간추렸습니다. Go 언어 특징 Go는 정적 컴파일 언어. 컴파일 과정을 거쳐 실행 파일을 미리 만들어야 하지만 실행 속도가 빠릅니다. Go는 강 타입 언어입니다. 조금 번거롭지만 타입에 따른 문제점이 없습니다. Go 언어는 가비지 컬렉터 제공 가비지 컬렉터 Go 언어는 가비지 컬렉터를 제공합니다. 매우 발전된 형태의 가비지 컬렉터를 제공해 성능 손실이 크지 않습니다. 패키지 명 == 폴더 명 Go 모듈 생성 go mod init 명령을 실행하여 모듈 생성 예) go mod init myproject/hello Go 모듈을 생성하면 go.mod 파일이 생성됩니다. Go 빌드 go t..

[C++] 유용한 C++ 기능 - attribute specifier

C++11부터 도입된 attribute specifier(속성 지정자)는 코드의 컴파일러에 대한 추가 정보를 제공하는 데 사용됩니다. 이를 통해 개발자는 특정 컴파일러에 맞춰진 속성을 지정하거나, 코드에 대한 최적화 및 다른 목적으로 사용자 정의 속성을 추가할 수 있습니다. Attribute specifier는 대괄호 [[와 ]]로 묶여진 형태로 사용됩니다. 아래는 attribute specifier의 간단한 예제입니다: [[noreturn]] void SomeFunc() { ... return;// 함수 내부에 리턴문이 있으면 컴파일 에러가 발생합니다. // 중간에 리턴문으로 인해 의도하지 않게 함수의 모든 코드를 // 실행할 수 없는 상황을 막는데 용이합니다. ... } [[nodiscard]] bo..