반응형 분류 전체보기918 멀티클라우드 리버스 프록시 아키텍처 검토 1. 검토 배경한 클라우드(Azure)의 VPN을 통해 접속한 사용자만 다른 클라우드(AWS)에 배포된 서비스에 접근하도록 제약해야 하는 상황. Site-to-Site VPN은 비용 부담으로 배제. 대안으로 "내부망 리버스 프록시 → 타 클라우드 Public ALB → Private 워크로드" 구조가 제시됨.제안된 구조[사용자 PC] ──(Azure VPN Client)──► [Azure VPN Gateway] │ ▼ [VNet 내부] .. 2026. 4. 20. [Kubernetes]Kyverno 학습 가이드 (처음 시작하는 사람용) 1. Kyverno가 뭔가? (한 줄 답)Kubernetes 클러스터에 "이런 리소스는 허용/금지"를 YAML로 선언하는 경찰관누군가 kubectl apply 하거나 ArgoCD가 sync 하거나 Helm이 install 할 때Kyverno가 "이거 우리 규칙에 맞나?" 검사하고안 맞으면 거부, 맞으면 통과, 필요하면 자동 수정2. 사전 지식: Admission ControllerKyverno를 이해하려면 먼저 k8s가 리소스를 받는 과정을 알아야 합니다.k8s 요청 흐름사용자 kubectl apply ↓kube-apiserver (API 서버) ↓ 1. Authentication (너 누구?) ↓ 2. Authorization (너 이거 할 권한 있어?.. 2026. 4. 20. 면접용 Vault 환경변수 주입 설명 한 문장 요약 (엘리베이터 피치) ▎ "Vault Secrets Operator를 사용해서, Vault에 저장된 시크릿을 자동으로 Kubernetes Secret으로 동기화하고, Pod에 환경변수로 주입하는 구조입니다." --- 단계별 설명 (면접 답변용) "크게 4단계로 동작합니다." 1단계: 시크릿 저장 ▎ "시크릿은 Vault의 KV-v2 엔진에 환경/서비스별로 구조화해서 저장합니다. 예를 들어 secret/prod/myapp/config 경로에 DB 접속정보나 API 키를 넣습니다." 2단계: 동기화 선언 ▎ "VaultStaticSecret이라는 CRD를 선언하면, VSO(Vault Secrets Operator)가 이걸 감시하다가 Vault에서 값을 가져와서 Kub.. 2026. 4. 9. Google TurboQuant 개념 및 원리 정리 1. 왜 TurboQuant가 등장했나LLM이 느려지는 이유는 단순하다.메모리 때문이다 LLM 내부 실제 구조LLM은 토큰을 생성할 때마다KV cache (Key, Value) 를 계속 저장한다.문제토큰 길어질수록 KV cache 증가메모리 사용량 폭증GPU는 계산 못 하고 기다림👉 이걸 “memory wall”이라고 부름 2. 기존 해결 방식의 한계기존에도 압축은 있었다.대표적으로:Vector QuantizationProduct Quantization문제압축하면 → 정확도 깨짐정확도 유지하면 → 메모리 못 줄임 또 하나 중요한 문제:압축하면서 추가 데이터(정규화 값 등)가 필요함 👉 오히려 메모리 다시 증가 3. TurboQuant의 핵심 아이디어“정보를 유지하면서 최소 비트로 표현” 핵심 결과.. 2026. 3. 27. RAG(Retrieval-Augmented Generation) 완벽 이해 — LLM을 실제 서비스에 적용하는 방법 1. 왜 RAG가 필요한가최근 LLM(대형 언어 모델)은 다양한 분야에서 활용되고 있지만, 다음과 같은 한계를 가지고 있다.최신 정보 반영이 어렵다특정 도메인(사내 문서, 제품 정보 등)에 대한 지식 부족그럴듯하지만 틀린 답변을 만드는 환각(Hallucination) 문제이 문제를 해결하기 위한 구조가 바로 RAG다.👉 핵심 개념“모르면 추측하지 말고, 관련 데이터를 찾아서 답하자”2. RAG 정의RAG (Retrieval-Augmented Generation)👉 Retrieval (검색) + Generation (생성)즉,외부 데이터를 검색해서 → 그 데이터를 기반으로 LLM이 답을 생성하는 방식3. 전체 동작 흐름[데이터 준비 단계]문서 → 임베딩 → 벡터 DB 저장[질문 처리 단계]질문 → 임베.. 2026. 3. 17. AWS SDK S3 소켓 누수: Node.js에서 발생하고 Java에서는 안 보이는 이유 들어가며운영 중인 EKS 서비스에서 S3 파일 조회, 이미지 미리보기, 파일 업로드가 동시에 먹통이 되는 장애가 발생했다. Pod 로그를 확인하니 이런 경고가 반복되고 있었다:@smithy/node-http-handler:WARN - socket usage at capacity=50 and 190 additional requests are enqueued.소켓 50개가 전부 점유된 상태에서 190개 요청이 대기열에 갇혀 있었다. 원인은 단 하나의 메서드 — S3 파일 존재 여부를 확인하는 fileExists() 함수였다.이전에 Java로 같은 작업을 했을 때는 이런 문제를 겪은 적이 없었다. 왜 Node.js에서만 이 문제가 발생하는 걸까?문제의 코드// Node.js AWS SDK v3 — 소켓 누수가.. 2026. 3. 9. 200ms latency- 실시간 개인화 시스템 아키텍처 Deep Dive 넷플릭스 앱을 열었다. 화면이 뜨는 순간 "오늘 이거 어때요?"라는 추천이 이미 펼쳐져 있다. 그 0.2초 동안 벌어진 일: 수십만 개의 콘텐츠를 훑고, AI가 점수를 매기고, 결과를 정렬했다. 이 글은 그 0.2초의 비밀에 대한 이야기다.이 글은 NBC유니버설 글로벌 플랫폼 엔지니어링 부사장 Manoj Yerrasani의 ITWorld 기고를 바탕으로, 실전 아키텍처와 코드 레벨의 해설을 더해 구성했다.1. 왜 하필 200ms인가인간의 뇌는 200밀리초 이내의 응답을 "즉각적"으로 인식한다. 이건 UX 감성이 아니라 인지 심리학의 임계값이다. 응답 시간사용자가 느끼는 것 비즈니스 임팩트0~100ms"바로 나왔네"최적의 경험100~200ms"괜찮은데?"수용 가능200~500ms"좀 느린데…"이탈률 증가.. 2026. 2. 26. Azure ACR 이미지 삭제했는데 왜 안 지워질까? — Soft Delete 함정과 스토리지 절약법, 레이어 구조부터 ECR과의 차이 Azure Container Registry의 내부 저장 구조를 이해하고, Soft Delete 함정을 피해 효율적으로 비용을 관리하는 방법들어가며CI/CD 파이프라인을 운영하다 보면 Container Registry에 이미지가 계속 쌓입니다. "일단 빌드 잘 되니까"라고 방치하면, 어느 날 스토리지 비용이 예상보다 높거나, 이미지를 삭제하려는데 CLI가 "성공"이라 하면서 실제로는 삭제되지 않는 황당한 상황을 마주할 수 있습니다.이 글에서는 Azure Container Registry(ACR)를 운영하면서 겪은 실제 경험을 바탕으로:ACR이 이미지를 어떤 구조로 저장하는지*레이어 공유(Layer Deduplication)**가 어떻게 작동하는지Soft Delete 기능이 삭제 작업에 미치는 영향SKU별.. 2026. 2. 25. Docker 사용후 이상하게 용량이 많아 진다? - Docker 컨테이너 로그 관리방법 Docker 컨테이너는 기본적으로 stdout/stderr 출력을 JSON 파일로 저장한다. 별도 설정 없이 운영하면 로그가 무한히 쌓여 디스크를 가득 채우는 주범이 된다.1. Docker 로그 구조로그가 쌓이는 원리컨테이너 stdout/stderr ↓Docker 로그 드라이버 (기본: json-file) ↓/var/lib/docker/containers//-json.log컨테이너 내부에서 console.log(), print(), echo 등으로 출력하는 모든 내용이 이 파일에 JSON 형태로 기록된다.로그 파일 형식{"log":"2026-02-20T07:28:15.123Z INFO Server started on port 8000\\\\n","stream":"stdout","time":".. 2026. 2. 20. Docker 사용후 이상하게 용량이 많아 진다? - Docker Build Cache 관리방법 Docker 이미지를 빌드하면 각 레이어가 캐시로 저장되어 다음 빌드 시 재사용된다.편리하지만 관리하지 않으면 디스크를 수십 GB씩 잡아먹는 주범이 된다.1. Build Cache란?Docker는 Dockerfile의 각 명령어(RUN, COPY 등)를 레이어 단위로 캐시한다.FROM node:20 ← 베이스 이미지 레이어COPY package.json . ← 캐시 레이어 1RUN npm install ← 캐시 레이어 2 (package.json 변경 없으면 재사용)COPY . . ← 캐시 레이어 3RUN npm run build ← 캐시 레이어 4이전 빌드와 동일한 명령 + 동일한 입력이면 캐시 히트 → 빌드 시간 단축변경이 감지되면 해당 레.. 2026. 2. 20. 브라우저 Ajax 요청의 네트워크 흐름: CORS, OPTIONS, DNS까지 정리 웹 서비스를 운영하다 보면 이런 상황을 자주 만난다.“curl로는 되는데 브라우저에서는 안 됩니다”“OPTIONS 요청이 왜 이렇게 많이 오죠?”“배포했는데 데이터가 바뀌지 않습니다”“로그인은 성공했는데 다음 요청에서 세션이 사라집니다”이 문제들의 출발점은 대부분 Ajax 요청의 동작 구조에 있다.이 글에서는 Ajax의 개념이 아니라,서비스 운영과 장애 대응에 필요한 핵심 동작 흐름을 정리한다.1. Ajax 요청은 어디서 시작되는가?Ajax는 단순히 말하면:브라우저 안의 JavaScript가 서버로 HTTP 요청을 보내는 방식예:fetch("/api/order")중요한 점은:요청은 서버가 아니라 브라우저에서 시작된다브라우저는 일반 HTTP 클라이언트와 다르게 강한 보안 정책을 적용한다2. Ajax 요청의.. 2026. 2. 12. Chrome 디스크 캐시 정리 방법 — 강력 새로고침으로 안 될 때 배포 후 강력 새로고침(Ctrl+Shift+R)을 해도 이전 버전이 보인다면, 디스크 캐시가 원인일 수 있다. 특히 JavaScript의 fetch()로 가져오는 데이터는 강력 새로고침으로 캐시가 우회되지 않는다.왜 강력 새로고침으로 안 되는가강력 새로고침은 브라우저가 직접 로드하는 리소스만 캐시를 우회한다.요청 유형 강력 새로고침 시HTML 문서O — 서버에서 새로 받음, , 등O — 서버에서 새로 받음JavaScript 코드 내 fetch()X — 디스크 캐시 그대로 사용JavaScript 코드 내 dynamic import()X — 디스크 캐시 그대로 사용React, Next.js, Vue 같은 SPA/SSR 프레임워크는 페이지 로드 후 JS에서 fetch()로 데이터를 가져오는 구조가 많다. 이.. 2026. 2. 12. 이전 1 2 3 4 ··· 77 다음 반응형