전체 글 280

[쿠버네티스] 서비스 배포의 발전

전통적인 배포 시대초기 IT 환경에서는 애플리케이션을 물리 서버에서 직접 실행했습니다. 그러나 이 방식에는 한 가지 큰 문제가 있었습니다. 한 물리 서버에서 여러 애플리케이션을 실행할 때, 리소스 관리에 한계가 있었기 때문입니다. 리소스를 많이 사용하는 애플리케이션이 다른 애플리케이션의 성능을 저하시킬 수 있는 상황이 자주 발생했습니다.이 문제를 해결하기 위해 각 애플리케이션을 별도의 물리 서버에 배치하는 방법이 있었지만, 이는 서버 자원이 비효율적으로 사용되고 비용이 매우 높아지는 문제가 있었습니다. 물리 서버를 추가적으로 유지 관리하는 데 드는 비용과 확장성의 한계는 기업에게 큰 부담이 되었습니다.가상화된 배포 시대이 문제를 해결하기 위한 주요 기술로 가상화가 도입되었습니다. 가상화는 단일 물리 서버..

Kubernetes와 Helm

Kubernetes(쿠버네티스)와 Helm(헬름)은 클라우드 네이티브 환경에서 애플리케이션 배포, 관리, 스케일링을 자동화하기 위해 주로 사용되는 도구입니다. 이 두 도구는 서로 보완적인 역할을 하며, 함께 사용하면 복잡한 애플리케이션을 쉽게 관리할 수 있습니다.1. Kubernetes의 역할Kubernetes는 컨테이너화된 애플리케이션의 오케스트레이션을 담당하는 플랫폼입니다. 이를 통해 컨테이너를 생성, 배포, 확장, 복구하는 일련의 작업을 자동으로 처리할 수 있습니다.주요 기능:컨테이너 오케스트레이션: 컨테이너를 클러스터에서 관리하고, 애플리케이션을 배포하며, 요청에 따라 자동으로 스케일링(확장 및 축소)합니다.서비스 디스커버리 및 로드 밸런싱: Kubernetes는 애플리케이션 간의 네트워크 트래픽..

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

[게임 수학] 내적 활용

내적\(\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 : 비어 있으면 생략한다. ..