서버를 운영하다 보면 가장 먼저 마주치는 결정 중 하나가 “메트릭을 어떻게 수집할 것인가” 입니다. 이번 포스팅에서는 프로메테우스(Prometheus)가 채택한 pull 방식과 그 대척점에 있는 push 방식이 무엇이고 어떤 차이가 있는지 정리해보도록 하겠습니다. 1. 프로메테우스에 대하여(About Prometheus)[ 프로메테우스란? ]프로메테우스는 SoundCloud에서 2012년부터 개발한 오픈소스 시계열 모니터링 시스템이다. 이후 Kubernetes에 이어 CNCF의 두 번째 졸업 프로젝트가 되면서 사실상 클라우드 네이티브 환경의 표준 모니터링 도구로 자리잡았다. 프로메테우스의 특징들로는 다음과 같은 것들이 있다.시계열 데이터베이스(TSDB) 내장 — 별도 외부 저장소 없이 자체 저장Pro..
1. AI Harness(하네스) 구축을 위한 Shim 아키텍처 [ shim 아키텍처 개요 ]"shim"은 원래 목공·기계 조립에서 쓰는 일반 명사로 얇은 쐐기·끼움쇠를 뜻한다. 두 부품 사이의 미세한 틈을 메우거나 높이를 맞추기 위해 끼워 넣는 얇은 조각(나무, 금속, 플라스틱)으로, 문 경첩이 안 맞을 때 종이를 접어서 끼우는 그 동작이 바로 shim이다.마이크로소프트는 이러한 어원에 착안하여 windows 호환성 레이어를 위한 구조를 잡는 데 Shim 이라는 용어를 처음 사용하며 널리 알려지게 되었다. Windows의 Application Compatibility Toolkit (ACT) 문서에서 Microsoft는 이렇게 정의한다.A shim is a small library that transp..
운영 중인 카프카 토픽의 처리량이 증가하면 파티션을 증설하고, 그에 맞춰 컨슈머도 1:1로 함께 늘리는 경우가 많습니다. 이때 컨슈머의 auto.offset.reset 값을 어떻게 설정하느냐에 따라 메시지 유실 여부가 달라지는데, 이를 이번 포스팅에서 정리해보려고 합니다. 1. 파티션과 컨슈머의 관계, 그리고 auto.offset.reset 옵션[ 파티션과 컨슈머의 일반적인 관계 (1:1 균형 상태) ]기본적으로 컨슈머는 파티션과 1대1 관계를 유지해야 한다. 다음의 그림은 파티션 3개와 컨슈머 3대가 1:1로 매핑된 안정적인 운영 상태로, 컨슈머 그룹이 각 파티션을 균등하게 나눠 담당하므로 처리량이 잘 분산되고, 모든 파티션은 이미 자신만의 커밋된 오프셋을 가지고 있다. 만약 컨슈머의 수가 파티션의..
계층형 아키텍처, 헥사고날 아키텍처, 벌티컬 슬라이스 아키텍처 등 다양한 패턴들이 나왔음에도 불구하고, 우리는 아직까지 정착된 아키텍처 패턴을 갖지 못했다. 누군가는 계층형 아키텍처로 개발하면 확장이 어렵다고 말하고, 누군가는 헥사고날 아키텍처로 개발하면 유지보수가 어렵고 공수가 크다고 얘기한다. 이번 포스팅은 여러 가지 아키텍처 패턴을 적용해보면서 느꼈던 각각의 장점을 결합하여 정착한 아키텍처 패턴을 소개한다. 1. 아키텍처 패턴(Architecture Pattern)이란?[ 아키텍처 패턴의 필요성과 개념 ]개발자들은 비즈니스 로직 자체를 작성하는 데에도 많은 시간을 소요하지만, 적지 않게 여러 고민을 하는 시간 역시 존재한다. “클래스 이름을 뭐라고 하지?”, “해당 클래스를 어느 패키지에 위치..
1. 운영 환경을 위한 실용적인 로그 레벨(Practical Log Level)[ 실용적인 로그 레벨(Practical Log Level) ]먼저 개인적으로 서비스를 운영하면서 느꼈던 로그 레벨에 대한 부분을 표로 정리하면 다음과 같다. 사용 환경상황DEBUG개발개발 중에 문제를 추적하고 진단하는 데 사용됨INFO개발, 운영서비스를 운영하고 상황을 이해하는 데 사용됨WARN개발, 운영잠재적인 문제나 주의가 필요한 상황을 알리기 위해 사용됨ERROR개발, 운영시스템 오류나 예외 상황을 기록하기 위해 사용됨 관련 부분을 보다 자세하 살펴보면 다음과 같다. DEBUG개발을 진행하면서 문제를 추적하고 진단하기 위한 개발 및 테스트용 로그주로 로직 검증, 버그 추적, 데이터 흐름 파악을 위해 사용되므로, 운영 ..