Blog

블로그

프로젝트를 만들며 정리한 기술 노트와 회고를 기록하는 공간이에요.

스터디

LangSmith는 LLM 체인 안에서 일어난 일을 어떻게 보여주는가

LLM 체인은 코드를 읽어도 실행 중 무슨 일이 있었는지 알기 어렵습니다. 특히 LangGraph의 순환 구조는 몇 번 돌았는지조차 코드만 봐선 안 보입니다. LangSmith가 트레이싱·평가로 이 문제를 어떻게 푸는지 정리합니다.

스터디

SEO와 GEO는 무엇이 다른가

검색엔진에 '순위'로 잡히는 것과 생성형 AI 답변에 '인용'되는 것은 다른 문제입니다. 크롤러 종류부터 최적화 신호, 측정 지표까지 SEO와 GEO가 구조적으로 어떻게 갈라지는지 정리합니다.

스터디

LangGraph는 LangChain 체인의 어떤 한계를 풀어주는가

LCEL 파이프(|)는 한 방향으로만 흐르는 DAG라 '루프'를 못 만듭니다. LangGraph가 State·Node·Edge로 순환과 조건 분기를 어떻게 표현하는지, 에이전트 루프 예제로 개념을 정리합니다.

LLM · RAG

LangChain은 정확히 무엇을 오케스트레이션하는가

LangChain을 '프롬프트에 LLM 붙이는 라이브러리'로만 보면 놓치는 부분이 있습니다. 쀼라인드 RAG 상담 챗봇에서 '언제 검색을 트리거할지, 얼마나 엄격하게 근거를 요구할지'를 LangChain으로 어떻게 설계했는지 코드와 함께 정리합니다.

MLOps · 인프라

StatefulSet과 DaemonSet은 Deployment와 뭐가 다른가

Deployment로 충분하지 않은 두 가지 워크로드, StatefulSet(고유 정체성이 필요한 파드)과 DaemonSet(노드마다 하나씩 떠야 하는 파드)이 각각 무엇을 위해 존재하는지, 그리고 그 대가로 실제 장애 실험에서 어떤 트레이드오프가 드러났는지 정리합니다.

MLOps · 인프라

Harbor + Trivy로 취약한 이미지의 Pull 자체를 막아본 이야기

Harbor와 Trivy를 연동해 취약점 있는 이미지의 Pull을 차단하는 정책을 구성하고, Docker buildx의 attestation이 만드는 manifest list가 그 정책을 실제로는 우회한다는 걸 발견해 고친 과정, Jenkins CI에 스캔 완료를 폴링해 연동한 방법까지 정리합니다.

MLOps · 인프라

K8s에서 자주 만나는 장애 4가지: 노드 다운, OOMKilled, RabbitMQ, 디스크풀

노드가 죽고, 파드가 OOMKilled로 재시작되고, RabbitMQ가 막히고, 디스크가 꽉 차는 상황은 원인과 증상이 서로 다르다. 각 장애가 왜 발생하고 어떻게 감지·진단·대응하는지를 정리하고, 실제 클러스터에 장애를 주입해 실측한 카오스 엔지니어링 실험 결과로 검증한다.

MLOps · 인프라

Terraform과 Ansible은 어디서 역할이 나뉘는가

Terraform으로 EC2를 띄운 뒤 그 위에 Kubernetes 클러스터를 구성하려면 결국 Ansible이 필요해집니다. Terraform이 '클라우드가 뭘 아는가'를 담당한다면 Ansible은 '그 서버들이 뭘 하고 있는가'를 담당한다는 경계선을 기준으로, kubeadm 클러스터 구성 플레이북과 파드를 직접 다루지 않는다는 점까지 코드와 함께 정리합니다.

MLOps · 인프라

Kafka vs RabbitMQ vs Redis: 셋 다 '메시지를 넘긴다'는데 뭐가 다른가

Kafka·RabbitMQ·Redis는 모두 서비스 사이에서 메시지를 주고받는 데 쓰이지만, 저장 모델과 전달 보장 방식이 근본적으로 다릅니다. 로그 기반 vs 브로커 기반 vs 인메모리라는 설계 차이에서 출발해, 처리량·순서 보장·재생 가능 여부를 비교하고 실제로 어떤 상황에 무엇을 골라야 하는지 코드와 함께 정리합니다.

MLOps · 인프라

Kubernetes 관측 스택: Prometheus·Loki·Grafana로 장애를 어떻게 보고 대응하나

파드가 죽으면 로그도 같이 사라지는 Kubernetes 환경에서 왜 별도의 관측(Observability) 스택이 필요한지부터, Prometheus·Loki·Grafana·Alertmanager가 각각 무엇을 책임지는지, 그리고 실제 장애 대응 시나리오를 코드/쿼리 예제와 함께 정리합니다.

MLOps · 인프라

RabbitMQ는 메시지를 어떻게 안전하게 넘기나

동기 호출이 시스템을 결합시키는 문제에서 출발해, RabbitMQ의 Producer-Exchange-Queue-Consumer 구조, 4가지 Exchange 타입, Redis 큐와의 차이, 그리고 실제 라벨링 작업 큐에 붙인다면 어떤 모습이 될지 시나리오까지 코드 예제와 함께 정리합니다.

MLOps · 인프라

테라폼 핵심 키워드 6가지: resource, provider, variable, output, module, backend

Terraform HCL을 이루는 6가지 핵심 블록 — resource, provider, variable, output, module, backend — 을 각각 무엇을 위한 것이고 왜 필요한지 코드 예제와 함께 정리하고, 마지막엔 하나의 예제로 전부 이어 붙여 봅니다.

MLOps · 인프라

Bitbucket Pipelines로 Python 배치 프로젝트 배포 자동화하기

핫딜 자동화 프로젝트의 반복적인 수동 배포 문제를 Bitbucket Pipelines 3단계(검증-빌드-배포)와 AWS S3, CodeDeploy 조합으로 자동화한 기록입니다. 스텝 간 컨테이너 격리, artifacts/caches, trigger: manual로 배포 시점을 분리한 이유, appspec.yml과의 책임 분리까지 정리합니다.

MLOps · 인프라

IaC란 무엇이고, 왜 Terraform을 쓰는가

수동으로 인프라를 만들 때 생기는 문제에서 출발해 IaC(Infrastructure as Code)의 개념, Terraform이 선언적 IaC 도구로서 갖는 특징과 실제 사용 이유, 그리고 init/plan/apply 워크플로우와 기본 코드 예제까지 정리합니다.

MLOps · 인프라

Jenkins는 CI/CD 파이프라인을 어떻게 코드로 관리하나

Jenkins의 Controller-Agent 구조, Jenkinsfile로 파이프라인을 코드화하는 방식, Webhook과 Polling 트리거의 차이를 정리합니다.

MLOps · 인프라

테라폼 State는 왜 신경 써서 관리해야 하나

Terraform이 State 파일로 실제 인프라를 추적하는 이유, 로컬 State가 팀 작업에서 깨지는 지점, 그리고 원격 백엔드와 State Locking으로 이를 해결하는 방법을 정리합니다.

MLOps · 인프라

도커 멀티스테이지 빌드는 이미지 크기를 어떻게 줄이나

빌드 의존성이 런타임 이미지까지 그대로 남는 싱글 스테이지 빌드의 문제를 정리하고, 멀티스테이지로 빌드와 런타임을 분리하는 방법과 레이어 순서로 캐시 적중률을 높이는 원리를 정리합니다.

MLOps · 인프라

HPA는 Pod 개수를 어떻게 자동으로 조절하나

HPA가 Deployment의 replicas 값을 대신 조정하는 방식, desiredReplicas를 계산하는 식, 급격한 스케일링을 막는 stabilization window, 그리고 VPA·Cluster Autoscaler와의 차이를 정리합니다.

MLOps · 인프라

쿠버네티스 멀티테넌시는 격리 수준을 고르는 문제다

여러 팀이 클러스터 하나를 나눠 쓸 때 Namespace만으로는 부족한 이유와, ResourceQuota·NetworkPolicy·RBAC로 리소스·네트워크·권한을 각각 격리해야 하는 이유를 정리합니다.

MLOps · 인프라

쿠버네티스 Pod, Deployment, Service는 각각 무엇이 다른가

Pod·Deployment·Service가 각각 어떤 문제를 책임지는지, 무엇을 관리하고 무엇을 관리하지 않는지 차이를 정리합니다.

MLOps · 인프라

MSA와 분산 모놀리스는 뭐가 다른가

마이크로서비스 아키텍처(MSA)를 만드는 핵심 원칙(서비스 경계, 독립 배포, 데이터 소유, 비동기 통신)을 정리하고, 이 원칙 없이 컨테이너만 나누면 왜 '분산 모놀리스'가 되는지 정리합니다.

MLOps · 인프라

IaC로 읽는 dflow 쿠버네티스 매니페스트

Kubernetes YAML을 IaC의 원칙(선언적 정의, 재조정 루프, 멱등성)으로 읽고, 실제 dflow 배포 매니페스트가 그 원칙을 어디까지 지키고 있는지 점검해본 기록입니다.

MLOps · 인프라

ISMS-P로 읽는 JWT 인증/인가

ISMS-P의 인증/접근통제/암호화 통제항목을 실제 프로젝트의 JWT 로그인 코드에 그대로 대입해 점검해보고, JWT 구조·Access/Refresh Token 차이까지 코드와 함께 정리합니다.

스터디

딥러닝 스터디 — Weight Initialization

가중치를 어떻게 초기화하느냐에 따라 학습이 시작되기도 전에 activation이 사라지거나 폭발할 수 있다는 것을, Xavier·He 초기화를 직접 비교한 실험으로 확인하고 정리합니다.

스터디

Zero-shot, One-shot, Few-shot으로 문제를 나눴다

클래스당 예시를 몇 개 확보할 수 있는가로 문제를 나누고, Siamese Network와 에피소드 학습으로 '분류' 대신 '비교'를 학습하는 방식을 코드와 함께 정리합니다.

MLOps · 인프라

캐시를 세 겹으로 나눴다

LLM 호출·Redis·영구 DB를 원본까지의 거리로 나눈 L1/L2/L3 캐시 설계와, 계층을 나눠도 원본 로직이 여러 진입점에 흩어져 있으면 반쪽짜리라는 걸 깨달은 과정을 코드와 함께 정리합니다.

Computer Vision

ROS에서 RGB-Depth 프레임 매칭과 픽셀 → 실거리 변환 구현하기

드론 RGB-D 카메라에서 RGB·Depth 프레임을 동적 slop으로 동기화하고, 픽셀 좌표를 핀홀 카메라 모델로 실거리·드론 좌표계로 변환하는 과정과 검증 과정에서 짚어본 의문점을 코드와 함께 정리합니다.

LLM · RAG

PGVector로 커뮤니티 글 유사 검색(RAG의 Retrieval) 직접 구현해보기

태그 검색의 한계를 pgvector 기반 임베딩 유사도 검색으로 풀어본 과정 — 동기/비동기 드라이버 충돌, 실패 허용 인덱싱, 자기 자신 제외 처리까지 코드와 함께 정리합니다.

LLM · RAG

LangChain Structured Output으로 개인정보 마스킹 직접 구현해보기

부부·연인 상담 커뮤니티 글을 저장하기 전 개인정보를 가리려고 LangChain structured output으로 직접 구현해본 과정과, 두 겹의 폴백·한계를 코드와 함께 정리합니다.

스터디

딥러닝 스터디 — Cost Function과 Activation Function

MSE·MAE·Cross Entropy 등 손실 함수와 Sigmoid·ReLU·GELU 등 활성화 함수를 정리하고, Loss와 Cost의 차이·Gradient Descent가 필요한 이유까지 짚어봅니다.