전체 글 1467

[K8s] podAffinity - EBS Multi-Attach error 발생 시 해결 방법

현상현재 운영 중인 서비스는 AWS EKS 클러스터에서 Deployment로 replica 2개를 띄우는 구조다. 두 replica는 같은 AWS EBS(gp3) PVC 하나를 공유해 마운트 한다. nodeAffinity로 특정 노드 풀에만 뜨도록 제한해두었는데도 Multi-Attach 오류로 Pod가 Pending에 머무는 일이 잦았다. 최근에도 동일한 현상이 발생한 김에 이 문제를 해결해 보기로 했다.멈춰 있는 Pod를 kubectl describe로 들여다보면 이벤트 로그에는 대략 이런 메시지가 남는다.Warning FailedAttachVolume pod/prod-server-7c9f8d-x2k4pMulti-Attach error for volume "pvc-xxxxxxxx"Volume is ..

Kubernetes 2026.08.24

[Kafka] Kafka Connect 민감정보 외부화하기: config.providers와 Kubernetes Secret

개요Kafka Connect 설정을 살펴보다 config.providers라는 낯선 항목을 접했다. 처음에는 다른 파일의 설정값을 읽어 오는 기능 정도로 여겼다. 그런데 커넥터 설정에 들어가는 데이터베이스 사용자명과 비밀번호를 외부로 분리할 때도 쓸 수 있었다.문제는 커넥터 설정에 민감정보를 직접 입력했을 때다. 값이 설정 파일뿐 아니라 Kafka Connect의 내부 저장소와 REST API 응답에도 남을 수 있다. Kafka Connect 3.7.0과 Debezium을 Kubernetes에서 실행하는 환경을 기준으로, Kubernetes Secret을 파일로 마운트해 DirectoryConfigProvider로 참조하는 방법을 정리해 본다.이 글은 Kafka Connect distributed mod..

Apache Kafka 2026.08.11

[AI Prompt] 프롬프트

개요2026.06.11-[AI Prompt] 토큰과 컨텍스트 윈도우에서는 토큰과 컨텍스트에 대해서 간단하게 알아보았는데, 이번 글에서는 프롬프트에 대해서 정리해보려고 한다. 시스템 프롬프트대화가 시작되기 전 AI에게 전송되는 특별한 지침 세트. 전체 대화 동안 AI가 어떻게 행동할지를 결정한다. 매번 요청할 필요가 없다.사용자 프롬프트가 묻는 것이라면, 시스템 프롬프트는 AI가 누구인지를 정의한다.시스템 프롬프트를 통해 역할과 성격을 부여할 수 있다. 또한 전체 대화 과정에서 준수해야 하는 규칙과 제약 조건을 설정하는 데 적합하다. 예시)당신은 항상 프랑스어로 응답하는 유능한 비서입니다.의학적 진단을 절대 제공하지 마십시오. 증상에 대해 질문을 받으면 항상 의료 전문가와 상담할 것을 권장하십시오 사용자..

기타 2026.07.28

[AI Prompt] 토큰과 컨텍스트 윈도우

개요2026.06.10-[AI Prompt] AI와 모델에서 AI, 그리고 모델에 대한 아주 기본적인 개념을 다뤘다. 이번 글에서는 AI 서비스를 사용할 때 필연적으로, 그리고 아주 자연스럽게 접하게 되는 개념인 토큰에 대해서 정리한다. 토큰 (Token)AI의 기본적인 읽기 단위. 문장을 단어로 나누듯이 AI는 텍스트를 토큰으로 나눈다. 단, 항상 단어로 나누지는 않는다. 즉, 토큰은 단어일 수도 있고 단어의 일부 또는 단일 문자일 수 있다.예를 들어, hello는 일반적으로 하나의 토큰이지만, uncomfortable와 같은 단어는 un, comfort, able과 같이 여러 토큰으로 나뉠 수 있다. 토큰 수가 중요한 이유토큰 수는 매우 중요하다.- 비용 : AI 서비스는 토큰당 요금을 부과하며, ..

기타 2026.06.11

[AI Prompt] AI와 모델

개요최근 AI를 업무에 활용하는 일이 많아졌다. AI 기반 개발이 늘어나는 추세를 따라가기 위한 목적도 있다. 그런데 개념을 제대로 공부하지 않고 사용하다 보니 잘 활용하는 방법을 모르겠다는 생각이 들었다. 그래서 기본 개념부터 정리해보기로 했다. 이번 글에서는 AI와 모델에 관한 핵심 개념만 간략히 짚어둔다. AIAI일반적으로 많이 사용하는 텍스트 생성형 AI란, 언어를 이해하고 응답을 생성하는 소프트웨어다. 사용자가 메시지를 입력하면, AI는 수십억 개의 문장에서 학습한 패턴을 바탕으로 다음에 어떤 단어가 올지 예측한다. 즉, 학습 내용을 바탕으로 통계적으로 자연스러운 텍스트를 생성하는 것이다. 따라서 어떻게 질문하느냐가 매우 중요하며, 이것이 프롬프트 엔지니어링의 핵심이기도 하다. 환각 (ha..

기타 2026.06.10

[Airflow] 스케쥴 설정 종류

개요지금까지는 Airflow를 개발하거나 운영하면서 주로 cron 방식의 스케줄 설정을 사용하고 있었는데, 최근에 timedelta 객체로 스케줄을 지정하는 방식도 존재함을 확인했다. 그래서 이번 글에서는 Airflow에서 스케쥴을 지정하는 방법에 대해 정리한다.Airflow 2.8 버전을 기준으로 작성한다. Cron기존에도 잘 활용하고 있던 방식으로, cron 표현식이나 cron preset(@daily)이 포함된다. 몰랐지만 datetime.timedelta 객체도 해당된다고 한다.from airflow.models.dag import DAGimport datetimedag = DAG("regular_interval_cron_example", schedule="0 0 * * *", ...)dag =..

Apache Airflow 2026.05.04

[Grafana] Docker Compose 구성 간 마이그레이션

개요bind mount 방식으로 운영 중이던 Grafana를 팀원이 새로 구성한 provisioning 기반 Docker Compose 환경으로 전환하고자 한다. 기존 구성은 호스트의 ./data/ 디렉토리를 직접 마운트하는 방식이었고, 신규 구성은 named volume(grafana-storage)을 사용한다. 기존 운영# AS-ISservices: grafana: image: grafana/grafana-enterprise container_name: grafana restart: unless-stopped ports: - '3000:3000' volumes: - '$PWD/data:/var/lib/grafana' 신규# TO-BEservices: g..

Grafana 2026.04.30

[Grafana] 프로비저닝이란

개요데이터 파이프라인 모니터링을 위한 Grafana 대시보드를 구축한 적이 있다. 로컬에서 대시보드를 만들고 대시보드 Expoert/Import 기능을 활용해 운영 환경으로 마이그레이션 했는데, 데이터 소스 설정을 다시 잡는 등 과정이 매끄럽다는 인상은 받지 못했다. 또, 이후 UI를 통한 대시보드 수정 시 버전 관리를 어떻게 해야 하는지에 대한 의문점이 생겼다.Grafana를 처음 사용할 때는 대부분 UI로 데이터 소스를 등록하고, 대시보드를 만들고, 알림 규칙을 추가한다. 간단한 환경에서는 문제가 없다. 하지만 환경이 둘 이상이 되거나 팀이 함께 사용하는 순간 한계가 드러난다.환경 재현이 어렵다. 로컬에서 만든 대시보드를 운영 환경에 그대로 옮기려면 수동으로 Export/Import를 반복해야 한다...

Grafana 2026.04.29

[Java] static

개요2026.04.22-[Java] 접근 제어자에 이어서 오늘도 변수나 함수 앞에 위치할 수 있는 키워드 중 하나인 static에 대해서 알아보고자 한다. static'고정된'이라는 의미를 가지며, Java에서는 static 키워드를 사용해 static 변수와 static 메서드를 만들 수 있다. 정적 변수, 정적 메서드라고도 하는데 둘을 묶어 정적 멤버, 클래스 멤버라고 말하기도 한다. 정적 멤버는 객체가 아닌 클래스에 고정된 멤버로, 클래스 로더가 클래스를 메모리 영역에 적재할 때 클래스 별로 관리한다. 클래스 로딩이 끝나면 바로 사용할 수 있다. 정적 멤버 생성static 키워드로 생성된 정적 멤버는 Heap이 아닌 Static 영역에 할당된다. static 영역은 모든 객체가 공유하고 있어 ..

Java 2026.04.28

[Java] 접근 제어자

개요최근 Java 코드를 계속 유지보수하고 있는데, 정말 기본적인 public, private 외에는 접근 제어자 개념이 제대로 잡혀 있지 않아 프로그래밍할 때 애로사항이 있다. 이번 기회에 개념을 좀 잘 잡아보려고 한다. 접근 제어자접근 제어자란 클래스, 클래스 멤버(필드, 메서드, 생성자)에 대한 접근 법위를 제어하는 역할을 한다. 필드, 인터페이스를 다른 패키지에서 사용하지 못 하도록 하거나, 객체 생성, 메서드 호출을 제한함으로써 개발자가 의도하지 않은 동작을 방지하기 위해 사용한다. 접근 제어자 종류접근 제어자 자체는 private, protected, public이 존재하며, 만약 세 가지 모두 적용되어 있지 않으면 default가 적용된다.보통 private, protected, pub..

Java 2026.04.22