[Go] 클로저(Closure)와 루프 변수 캡처 버그 (Feat. Go 1.22)
·
Language/Go
회사에서 에이전트로 개발을 하는데(Obviously.. 요즘 에이전트 없이 개발하는 사람도 있어?) 고루틴을 쓸 때 변수를 캡쳐해서 쓰도록 코드를 짜더라.그 이유가 궁금해서 에이전트랑 대화하다가 배운 내용을 정리하면 좋을 것 같아서 짧게 정리해봤다클로저(Closure)란?클로저는 자신이 정의된 렉시컬 스코프(lexical scope, 다른 말로 정적 스코프(static scope))에 있는 식별자들을 잡아두는 함수클로저는 '값' 아니라 '변수' 자체를 참조. 즉, 같은 변수를 여러 번 갱신하면, 그 변수를 캡처한 모든 클로저는 갱신된 값을 보게 됨package mainimport "fmt"func main() { x := 0 fn := func() { fmt.Println(x) } x = 42..
[Move] Sui Move 입문
·
Language/Move
해당 글은 Sui Dev Workshop 밋업에서 배운 내용을 토대로 작성한 Sui Move 입문 글입니다.배운 내용을 간단하게 정리하는 메모장 같은 글입니다.(Week 1~2 까지의 내용을 다룹니다. 3,4 업데이트 예정)🔆 스마트 컨트랙트 언어란 무엇인가기존 프로그래밍 언어: CPU를 조작해 Memory 에 있는 상태(데이터)를 변경할 수 있도록 프로그램을 만들 수 있는 도구와 문법시스템 프로세스(OS), 프로세스 관리, Network 통신, Disk 관리, 외부 장치 관리, 마우스/키보드/모니터, UI 등 조작 가능기존 프로그래밍 언어에서는 엄청나게 많은 라이브러리와 도구를 지원스마트 컨트랙트 언어: 블록체인 VM을 조작해 Global State/Storage(데이터)를 변경할 수 있는 도구와 문..
[Go] Prometheus 대시보드를 활용한 메트릭 분석 가이드
·
Language/Go
~Go 프로파일링 적용 시리즈 - 배치 서버 ver.~[1] 배치 서버 OOM 분석을 위한 메트릭 설계와 프로파일링 전략[2] Prometheus 라이브러리를 활용한 Go 메트릭 구현[3] Prometheus 대시보드를 활용한 메트릭 분석 가이드🟨 OOM 발생 시나리오 분석OOM 발생 원인을 찾기 위해 다음 시나리오를 고려해볼 수 있습니다.▫️ 시나리오 1 : 순간적인 메모리 급증아주 짧은 순간에 발생하는 메모리 급증 시나리오입니다. 평소에는 메모리 사용량이 낮다가, 특정 순간에 시스템이 감당할 수 없을 만큼 한꺼번에 많은 메모리를 OS에 요청할 때 발생합니다. 예를 들어, 특정 작업을 위해 수백 개의 고루틴을 띄우는 순간이 있습니다.Prometheus는 보통 수 초~ 수십초(scrape interva..
[Go] Prometheus 라이브러리로 Go 애플리케이션 프로파일링 하기
·
Language/Go
보호되어 있는 글입니다.
[Go] 배치 서버 OOM 분석을 위한 메트릭 설계와 프로파일링 전략
·
Language/Go
~Go 프로파일링 적용 시리즈 - 배치 서버 ver.~[1] 배치 서버 OOM 분석을 위한 메트릭 설계와 프로파일링 전략[2] Prometheus 라이브러리를 활용한 Go 메트릭 구현[3] Prometheus 대시보드를 활용한 메트릭 분석 가이드🟨 이 시리즈를 연재하게 된 계기회사에서 운영 중인 배치성 서버에서 간헐적인 OOM(Out of Memory) Killed 현상이 발생하기 시작했다. 이 서버는 NFT 컬렉션 정보 수집, 메타데이터 수집, 토큰 가격/거래량 추적, 게임 라이브 데이터 수집 등 다양한 배치 작업을 주기적으로 수행하는 핵심 인프라였기 때문에, OOM으로 인한 서비스 중단은 전체 데이터 파이프라인에 치명적인 영향을 미칠 수 있는 상황이었다. 문제의 원인을 신속하게 파악하고 해결할 필요..
[Go] Context에 관한 고찰 - 3 : Graceful Shutdown의 미학
·
Language/Go
~Go Context 시리즈~[1] Context에 관한 고찰 - 1 : Context 란[2] Context에 관한 고찰 - 2 : Context의 중요성과 고루틴 누수[3] Context에 관한 고찰 - 3 : Graceful Shutdown의 미학이전 시리즈에서 우리는 Context가 무엇이고 Context를 이용해 개별 작업의 생명 주기를 어떻게 제어해야 좀비 고루틴을 방지할 수 있는지 살펴보았다. 이제 마지막으로, Context가 애플리케이션 전체의 생명주기를 어떻게 관장하며 ~우아한 종료~ 라는 현대 서버 애플리케이션의 필수 덕목을 구현하는지 살펴보려고 한다. 우아한 종료는 단순히 서버를 끄는 행위를 넘어, 시스템의 안정성과 데이터의 정합성을 보장하는 섬세한 오케스트라 지휘와 같다. 그리고 그..