본문 바로가기

전체 글418

zipkin , jaeger, grafana tempo 특징 모두 분산추적(트레킹)시스템이다. 각각이 모두 장단점을 가지고 있으며, 이에 대해 알아 보자. 1. Jaeger예거는 분산 추적 시스템으로 유명하며, 중대형시스템에서 자주 사용된다. 학습곡선이 높지만 설정할수 있는 기능들이 많고 데이터 보관 및 확장성에 용의 하다.OpenTracing 의 네이티브 구현으로 표준을 지원하는 프레임웍들과 쉽게 통합 할 수있다. (ex grafana 연동 등)저장소 고급기능Cassandra적응형 샘플링Elasticsearch추적집계 종속성 그래프 시각화중대형 시스템에 적합한 트레이싱 도구로 저장 및 처리시 많은 컴퓨팅 자원이 소모될 수 있으며, 복잡한 설정으로 학습곡선이 높다.2. Zipkin경량화된 트레킹시스템으로 보통 중소형 시스템에서 자주 채택하는 아키텍처로 사용된다... 2025. 7. 30.
Observability & Open Telemetry 전파전략 전파 전략Open Tracing 의 전파 전략에 대해 알아보겠습니다. 오픈트레이싱에서 선택할수 있는 방법은 두가지가 있습니다. 이전 Brave모드와, W3C Trace Context 스팩입니다. W3C Trace Contexttraceparent: {version}-{trace-id}-{parent-id}-{trace-flags}traceparent (필수)트레이스 구조 표현versiontrace IDspan IDtrace flagesversion 2자리 현재 버전정보trace-id32자리전체 트레이스를 식별하는 IDparent-id16자리현재 요청의 상위 span Idtrace-flasgs2자리샘플링 정보 (01: 샘플링 OK, 00: 샘플링 NO )traceparent: 00-4bf92f3577b.. 2025. 7. 30.
Observability & Opentelemetry 옵저버빌리티(관찰가능성)란 ?옵저버빌리티를 사용하면 다음과 같은 질문을 통해 외부에서 시스템을 이해 할 수있다.내부 동작 방식을 모른채 그시스템에 대한 질문 또한 새로운 문제 즉 “알수없는” 문제를 쉽게 해결하고 처리 할 수 있다. 또한 알수 없는 문제들에 있어 “왜 이런 일이 발생하는가?” 에대한 질문에 답을 하는데 도움이 된다. MoniteroringObservability접근 방식미리 정의된 지표 주심의 상태 이상 감시내부 상태 추론, 원인 파악 및 분석활용 데이터Metrics, 알림Metrics, Logs, Traces목표무엇이 문제인가? 에 대한 문제 감지 /알림왜 문제가 발생 하였는가? 에 대한 근본적인 원인 분석활용 범위/관점일부 시스템, 사후 대흥시스템 사전.사후 통합 분석 옵저버빌리티.. 2025. 7. 30.
Next.js 환경별 빌드 dotenv Next.js 혹은 Node.js 에서 환경별로 빌드하는 방법은 두가지가 존재한다.Node 에서 build 시에 env 값의 우선순위는 env.production > env.development > env.local 형태로 바라보기 때문에 다음과 같이 build 시 해당 파일을 .env.local 로 변경하여 npm start 로 실행시 development, production 에 속한 ENV 값을 local로 하여 해당 파일을 읽어 실행 하도록 한다. "scripts": { "start": "react-scripts start", "build": "react-scripts build", "build:dev": "cp .env.development .env.local && react-.. 2025. 1. 22.
Multi datasource, router datasource 멀티-테넌시란?멀티-테넌시는 소프트웨어 어플리케이션의 단일 이느턴스가 여러 고객에게 서비스를 제공하는 아키텍처 이다.아래 그림에서 보듯이 싱클 테넌시와 멀티테넌시는 확실하게 구분된다. 싱글테넌시의 경우 사용자 별로 어플리케이션과 Database 가 존재한다.멀티테넌시의 경우엔 하나의 어플리케이션에서 여러 테넌트(tenant,사용자)가 사용할 수 있도록 해준다.멀티테넌시를 구축하는 이유는 고객마다 새로운 시스템을 만들 필요가 없기 때문에 소프으웨어 개발과 유지보수 비용을 절약 할 수 있기때문에 경제 적이다.멀티테넌시를 구축하는 방법은 여러 방법이 있다. 인프라 적인 부분, 소스코드에서 분기 혹은 database 에서 분리등 여러 방법을 이용하여 테넌트 분리가 가능 하며 대표적으로 다음과 같이 구분 해볼 수.. 2025. 1. 9.
tenant id 에 따른 datasource 분리 , 인터셉터 Client 에서 Header 값을 통해 Datasource 를 선택하기 위함. Flow (흐름도)Headertanent-id : poc----Headertanent-id : kakao-games Client 에서 정의된 Header 정보를 담아 보낸다.Interceptor 에서 정의된 ID 값 을 기준으로 Router 를 선택한다.LocalThread에 저장된 정보를 읽어와 DB 정보를 FIX 한다.Controller, Service, 를거쳐 Repository 에 도달 했을때 앞서 선택된 router 정보에 의해 datasource를 결정하고 사용한다. 2025. 1. 9.
Springboot Prometheus , micrometer architecture micrometherjava 애플리리케이션에서 메트릭을 수집하는 라이브러리micromether core핵심라이브러리로 메트릭 수집하고 관리함사용자 정의 MeterBinder 및 Exporter 개발 기능 지원micromether prometheus exportermicromether 의 확장 기능 이다.micromether core 가 수집한 메트릭 데이터를 Prometheus 포멧으로 변환한다.prometheus 엔드포엔트를 자동으로 생성prometheus 스크랩을 자동으로 생성**설명** Springboot 에서 prometheus를 사용할때, Actuator 와 micromether 를 함께 사용한다. 위에 나열 했듯이 micromether 는 jvm 의 데이터를 수집하여 prometheus .. 2024. 5. 26.
Jenkins 자원부족에 의한 교착 상태 Waiting for next available executor pending - Waiting for next available executorStill waiting to schedule taskWaiting for next available executor원인자원부족에의한 교착상태에 빠졌을때 생성 되는 오류이다.직접적인 원인으로 몇가지가 존재 한다.첫째, CPU 및 memory 부족으로 인한 실패둘째, Queue 대기 열 부족으로 인한 실패execute 갯수가 설정한 값보다 넘을때 나타난다. ITEM 빌드가 끝나게 되면 위의 메세지가 사라지고 자동으로 Queue에 대기 상태로 있던 Item 들이 실행 된다.젠킨스 작업 흐름에 대한 이해Jenkins는 실행자에게 작업을 제출하고 나서 하나씩 실행된다. 제출 되고 나면 대기열에 들어가서 실행자가 사용가능해 질때까지 .. 2024. 5. 4.
kubernetes namespage kubernetes namespage쿠버네티스에서 네임스페이스란 하나의 클러스터 안에서 리소스들을 구분하기 위한 가상의 공간이다. 즉 하나의 클러스터안에 여러개의 네임스페이스들을 만들어 각 리소스들을 각각의 네임스페이스에 할당하는것이다.이렇게 하면 특정성격을 가진 리소스들을 관리하기가 용이해진다. 또한 롤관리를 통해 특정사용자들을 네임스페이스에 접근하는것을 허용 하거나 접근을 방지 할수있다.그림으로 보면 다음과 같다.파드안에 컨테이너들이 존재하게 되는데 각 파드(서버스)들은 특정 네임스페이스에 속하게 된다. 이에 따라 특정 네임스페이스에 속하는 목록들만 추출하여 필요한 정보를 전달해 줄수도 있으며, 관리하기에도 용이하다.좀더 상세하게 예를들어보면 dev, stage, prod 와같이 네임스페이스를 만들고.. 2024. 4. 25.