category

Suggestions

13개의 글

PGO를 쉽게 하는 방법이 있을까?

개요

개요 왜 사람들은 PGO(Profile Guided Optimization)을 적극적으로 사용하지 않을까? 저는 이 의문을 예전부터 품고 있었습니다. 생각해보니 프로파일을 저장하고, 가져오는 어떠한 표준화된 프로토콜이 없다는 게 이유로 보였습니다. 사실 쓸 사람들은 어떻게든 쓰고 있겠지만, 저도 처음 PGO를 적용할 때에 어떻게 저장하고 가져와야 할지 고민을 좀 했었습니다. 그래서 이번 글에선 해당 내용에 대한 공유를 하겠습니 …

라이프타임에 대한 고찰

개요

개요 이전 포스팅과 동일한 프로젝트에 대한 회고를 내용으로 합니다. 이 포스트에선 비교적 안일하게 생각했던 라이프타임에 대해 생각했던 걸 적어보려합니다. 여기서 말하는 라이프타임은 객체의 라이프사이클, 캐시 수명, 요청의 타임아웃 등을 포함하는 어떤 것의 발생과 소멸까지의 시간을 의미합니다. 뭐가 문제였지? 대부분의 라이프타임 관리는 괜찮게 했습니다. 하지만 몇몇 경우에 대해서 시스템을 맹신한 나머지 안일하게 관리를 했고, 관 …

로그 정책에 대한 고찰

개요

개요 최근 그래도 규모가 조금 있는 프로젝트를 처음부터 설계하고, 구현 및 운영한 경험이 생겼습니다. 상당히 많은 부분에서 하고 싶은 걸 했고, 부족한 점을 느끼기고 했고, 발전했다고 생각합니다. 하지만 안타깝게도, 기반 시스템(혹은 라이브러리)에 대해서 조직 내에서도 명확히 어떻게 해왔다는 게 없었어서 상당히 아쉬운 결과를 낳게 되었습니다. 지금에 와서 매우 많은 부분에 스며들어 있어서 일일이 교체하기에도 비용이 큰 작업이 …

DevContainer로 개발환경 구성하기

Dev Container

Dev Container Dev Container는 도커 컨테이너를 이용하여 개발 환경을 구축하는 방법입니다. 이 방식을 이용하면 쉽게 어느 곳에서나 동일한 개발 환경을 구축할 수 있습니다. 이 글에서는 Go 언어를 사용하는 개발 환경을 구축하는 방법을 소개합니다. devcontainer 폴더 구성 프로젝트 폴더 내에 .devcontainer 폴더를 생성합니다. 그리고 다시 한번 그 안에 원하는 개발 환경 이름으로 폴더를 생성 …

고 언어의 의존성 주입을 위한 Provider

Provider

Provider Provider는 제가 만들고 있는 고 언어에서 의존성 주입을 위한 컨테이너입니다. 정의 type Provider struct { constructors map[reflect.Type]map[reflect.Value]struct{} container map[reflect.Type]any lock sync.RWMutex } Provider는 constructors와 container를 가지고 있습니다. …

git, buf, 그리고 패키지 매니저로 프로토버퍼 관리하기

프로토버퍼?

프로토버퍼? 프로토버퍼는 구글에서 개발한 직렬화 라이브러리입니다. 프로토버퍼는 다양한 언어를 지원하며, 단일 IDL(Interface Description Language)을 사용하여 여러 언어에 대한 DTO 및 시리얼라이저를 생성할 수 있습니다. 그렇기에 서버와 클라이언트 사이에 서로 다른 언어를 사용하더라도, 같은 IDL만 공유할 경우 서로가 주고 받는 메시지의 종류만 안다면, 별도의 DTO를 문서를 보고 만들 필요 없이 …

Context 패키지 (실전)

기능 복기

기능 복기 TODO 컨텍스트의 경우에 특이 케이스이므로 여기에 포함시키지 않겠습니다. 컨텍스트 생성 package main import "context" func main() { ctx := context.Background() } context.Background() 를 통해 새로운 컨텍스트를 생성할 수 있습니다. 반드시 이 컨텍스트를 생성할 때는, 모든 작업의 최상단에서 생성해야 합니다. 취소 가능한 컨텍스트 생성 …

고루틴과 채널을 활용한 유사 액터 모델

액터 모델?

액터 모델? 액터 모델은 동시성 문제를 해결하기 위해 등장한 개념입니다. 각 액터는 독립된 스레드에서 실행되며, 메시지를 통해 상호작용합니다. 액터 모델은 다음과 같은 특징을 가집니다. 액터는 메모리를 공유하지 않습니다. 액터는 고유의 상태를 가질 수 있습니다. 액터 간의 통신은 메시지를 통해 이루어집니다. 액터 간의 통신은 비동기적입니다. 액터는 해당 메시지에 대응하는 동작을 수행합니다. CSP와 너무 잘 맞지 않아? 고 언 …