Go Project Layout

Go 언어로 애플리케이션을 만들기 위한 프로젝트 기본 레이아웃입니다. 디렉토리 구조를 통일된 패턴으로 정의하여 관리하여 각 디렉토리의 역할을 명확히 하고, 유지보수와 코드의 가독성을 높일 수 있습니다. Architecture 다음과 같은 6가지 개념(Controller, Service, Repository, Storage, Domain, Pkg)을 기본 구조로 활용합니다. 각 개념에 대한 자세한 설명은 아래에 첨부하였습니다. flowchart LR A0(user) --> B0 A0(user) --> B1 A0(user) --> B2 A1(event) --> B3 B0 --> C B1 --> C B2 --> C B3 --> C subgraph domain / pkg subgraph controller B0(controller/http) B1(controller/grpc) B2(controller/cmd) B3(controller/event) end C(service) --> |optionnal| D(repository) --> E(storage) end Directories ├── cmd │ ├── server │ │ ├── internal │ │ │ ├── env....

January 9, 2025 · Kai

Prometheus 메모리 튜닝 가이드

Prometheus는 모니터링과 알림을 위한 오픈 소스 시스템으로, 시스템 성능과 인프라 상태를 모니터링하는 데 널리 사용됩니다. 하지만 시간이 지남에 따라 많은 양의 메트릭 데이터를 수집하고 처리하면서 메모리 사용량이 증가할 수 있습니다. 이를 효율적으로 관리하기 위해서는 메모리 튜닝이 필수적입니다. 이번 글에서는 Prometheus의 메모리 사용을 최적화하는 방법에 대해 다루겠습니다. Prometheus 메모리 사용 Prometheus 메모리 사용율이 높은 경우, 아래와 같은 사유가 있을 수 있습니다. 타임 시리즈 수 (Time Series): 활성 타임 시리즈의 수는 메모리 사용량에 직접적인 영향을 줍니다....

October 8, 2024 · Kai

Kubernetes DNS 구성 최적화

Kubernetes에서 DNS 구성은 단순한 네트워크 설정을 넘어 애플리케이션의 운영 효율성과 확장성에 중요한 역할을 합니다. 효율적인 DNS 해석은 빠르고 신뢰할 수 있는 서비스 검색을 제공하여 애플리케이션의 성능과 안정성을 향상시킬 수 있습니다. NodeLocal DNSCache Kubernetes 클러스터에서는 모든 DNS 질의를 CoreDNS가 처리합니다. 이로 인해 CoreDNS에 부하가 발생할 수 있으며, 부하가 커지면 DNS 질의 실패로 서비스 장애가 발생할 수 있습니다. NodeLocal DNSCache 데몬셋을 설치하면 DNS 성능을 향상시키고 CoreDNS의 부하를 줄일 수 있습니다. Install nodelocaldns configuration 문서를 보고 설치하시거나, helm 명령어를 사용하여 설치할 수 있습니다....

September 26, 2024 · Kai

Kubernetes 컨테이너 환경변수 주입 방식과 우선순위

Kubernetes 상에서 소스코드를 구동할 때, 코드베이스를 변경하지 않으면서 코드의 동작을 컨트롤하기 위한 방법으로 환경변수가 흔히 이용됩니다. Kubernetes 컨테이너에 환경변수를 주입하는 다양한 방식과, 여러 방식을 동시에 이용하여 충돌이 발생했을 때의 우선순위에 관헤 알아보겠습니다. key-value 직접 명시 가장 직관적인 방식으로, container spec 내부에 직접 key-value로 환경변수를 명시하는 방식입니다. apiVersion: v1 kind: Pod metadata: name: pod-with-env spec: containers: - name: container-with-env image: nginx:1.14.2 env: - name: SOME_ENV_KEY value: "some env value" - name: SOME_ENV_KEY_2 value: "another env value" 외부 리소스로부터 값 로드 직접 value를 명시하지 않고, 외부 리소스로부터 환경변수를 주입할 수도 있습니다....

September 21, 2024 · Daram

Create Kubernetes Service Accounts and Kubeconfigs

Kubernetes의 Service Account와 kubeconfig 파일을 사용하여, kubernetes 클러스터 외부에서 접근하는 방법을 알아보도록 하겠습니다. Service Account 생성 Kubernetes 1.24 부터 ServiceAccount 생성시 Secret을 자동으로 생성하지 않습니다. Kubernetes 1.24 이상 # 생성 $ kubectl create sa test-sa # 조회 $ kubectl get sa test-sa -o yaml apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: "2024-09-11T05:01:12Z" name: test-sa namespace: default resourceVersion: "6948234123" uid: 234d3212-a859-44f6-8bfd-sdfsd123123 Kubernetes 1.23 이하 Kubernetes 1.23 이하 버전 사용시 Secret을 생성하지 않아도 됩니다....

September 10, 2024 · Kai