전체 글 297

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..

[게임 수학] 내적 활용

내적\(\mathbf{A\cdot B=\left|A\right|\left|B\right|\cos\theta}\) 벡터의 내적은 같은 차원의 두 벡터가 주어졌을 때, 벡터를 구성하는 각 성분을 곱한 후 이들을 더해 스칼라를 만들어내는연산입니다. 즉, 두 벡터가 결국 스칼라로 됩니다. 게임에서는 물체를 랜더링 할 때 밝은 곳과 어두운 곳이 생기는데 이것을 계산 할 때 내적이 사용됩니다. 보이지 않는 곳을 제외 할 때도 사용합니다. 전투 판정에서도 앞뒤 판정이나 타겟이 얼마의 각도에 있는지를 알고자 할 때 사용합니다. 앞뒤 판별\(\mathbf{A\cdot B > 0}\) : 두 벡터의 내적의 결과가 0보다 크면 두 벡터가 이루는 각이 예각이므로 캐릭터 앞에 목표물이 있다고 판별 할 수 있습니다.\(\math..

[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..

[UE] 언리얼 엔진 AsyncTask 사용

AsyncTask 언리얼 엔진에는 코드를 비동기적으로 실행할 수 있는 AsyncTask라는 유용한 기능이 있습니다. 이 기능은 지정된 스레드에서 특정 코드를 실행하는 방식으로 작동하며, 주로 게임 스레드를 차단하지 않고 즉시 실행하기에는 작업이 너무 무거울 때 사용됩니다. 또한 멀티스레딩으로 인해 발생하는 문제, 특히 한 스레드에서 다른 스레드에서 사용 및/또는 수정하려는 프로퍼티에 액세스하는 문제에 대한 해결책을 제공합니다. AsyncTask(ENamedThreads::AnyThread, []() { // 이 코드는 게임 스레드를 멈추지 않고 비동기적으로 실행됩니다. }); 예를 들어 비동기 작업에 대한 중첩 호출을 만들 수도 있습니다: AsyncTask(ENamedThreads::AnyThread, ..