전체 글 232

자연어로 AWS 아키텍처 다이어그램 생성하기

만든 이유프로젝트마다 아키텍처 다이어그램을 그리는 건 생각보다 시간을 잡아먹습니다. draw.io 열어서 AWS 아이콘 찾고, 하나씩 배치하고, 선 연결하고, 라벨 달고. 서비스 7 ~ 8개짜리 간단한 구성도에도 20 ~ 30분은 금방 갑니다.AI 코딩 도구를 쓰면서 "아키텍처도 말로 설명하면 간단한 초안이라도 그려주면 좋겠다"는 생각이 들었습니다. 그래서 어떤 LLM이든(Kiro, Claude Code, Codex, Grok) 동일하게 동작하는 전역 스킬을 만들었습니다."API Gateway → Lambda → DynamoDB 구조 그려줘" 한마디면 draw.io 파일이 생성됩니다.뭘 하는 스킬인가/aws-arch-diagram은 두 가지 방식으로 동작합니다:자연어 입력 — "CloudWatch → S..

AI 2026.08.24

CloudWatch 알람 기반 AI SQL 자동 튜닝 시스템 구축기

왜 만들었나운영 DB에서 슬로우 쿼리가 터지면 DBA가 직접 세션을 열어 확인하고, 실행계획을 뜯어보고, 개발자한테 "여기 인덱스 태워야 합니다" 하고 전달합니다. 이 과정이 건당 짧으면 10분, 길면 30분 넘게 걸립니다. 하루에 여러 건 들어오면 튜닝 분석에만 반나절이 가버리죠.이 시간을 줄여보고 싶었습니다. 알람이 올라오면 세션 스캔부터 실행계획 분석, 튜닝 권고문 작성까지 AI가 대신 해주면 — 제가 검토만 하면 되니까요. Amazon Bedrock의 Claude 모델을 붙여서 이 파이프라인을 자동화했습니다.현재 Oracle, MySQL, PostgreSQL, MSSQL, DocumentDB 5개 엔진에서 돌아가고 있고, 분석 결과는 Google Chat으로 바로 떨어집니다.전체 구조두 개의 La..

AI 2026.08.24

비공개 접수 행이 인게이지먼트 집계에 섞이지 않도록 상태를 먼저 검증하기

한눈에 보기URL 필드가 있어도 private_submitted 상태라면 공개 게시 행으로 처리하지 않습니다.무효 승인 상태는 확정 발행 상태가 아닐 때 집계 대상에서 제외합니다.회귀 테스트는 URL이 있는 비공개·대체 상태 행이 빈 결과로 이어지는지 확인합니다.문제 상황블로그 인게이지먼트 수집 과정에서는 게시물 레코드의 여러 필드에서 URL을 확인합니다. 이때 공개 게시 여부가 확정되지 않은 행에도 URL 필드가 채워질 수 있습니다.예를 들어 publish_status가 private_submitted이고 approval_status가 superseded인 레코드에 publish_url이 함께 들어올 수 있습니다. URL만 확인하면 이 행을 공개 게시물처럼 다룰 가능성이 생깁니다.이번 수정의 범위는 이..

버그처리 2026.08.10

연결 끊김도 장애다 — 헬스체크가 놓치던 오류를 잡기까지

가용성을 모니터링하는 코드가 오히려 특정 장애를 조용히 삼키고 있었다. 네트워크가 끊기거나 HTTP 예외가 발생하면 프로브(probe)가 예외를 잡지 못하고 스택 위로 전파되어, 관측 창(observation window)에 샘플 자체가 기록되지 않았다.한눈에 보기• ConnectionError와 HTTPException이 except 블록 밖으로 빠져나가 샘플이 누락됐다.• 누락된 샘플은 가용률 계산 분모에서 사라져 결과가 낙관적으로 왜곡됐다.• 두 예외를 명시적으로 잡아 "network_error"로 기록하고, missing_samples와 모니터링 커버리지 지표를 추가해 해결했다.결론부터probe() 함수의 except 블록에 ConnectionError와 HTTPException을 추가하고, 관측..

Database & Data 2026.07.28

Playwright 컨텍스트에 User-Agent를 고정할 때 테스트도 함께 바꾸는 법

Playwright의 browser.new_context()에 user_agent를 추가하는 변경은 한 줄로 끝나 보인다. 그러나 실제 코드와 테스트 대역의 호출 계약을 함께 맞추지 않으면, 운영 코드는 새 인자를 넘기는데 테스트 스텁은 인자를 받지 못하는 불일치가 생긴다.한눈에 보기• User-Agent는 문자열 상수로 분리해 브라우저 컨텍스트를 만들 때 명시한다.• 테스트용 가짜 브라우저도 키워드 인자를 받을 수 있게 바꾼다.• 이 변경만으로 차단 우회나 인증 성공을 보장한다고 해석하면 안 된다.먼저 결론실제 변경의 핵심은 아래 두 줄이다. 운영 코드에서는 고정 User-Agent를 전달하고, 테스트 대역에서는 사용하지 않는 키워드 인자를 받아 호출 형태를 맞춘다.ADMIN_SMOKE_USER_AGE..

Develop 2026.07.27

콘텐츠 자동화에서 엉뚱한 지역이 섞인 이유: 공통 시드 분리하기

여행 숙소 글을 만들었는데 자꾸 서울 동네 이야기가 섞였습니다. 문장 품질의 문제가 아니라, 다른 콘텐츠용 입력값을 잘못 재사용한 구조 문제였습니다.한눈에 보기• 증상: 전국 숙박 추천글에 목동·상암동 같은 생활권이 반복됐습니다.• 원인: 동네 콘텐츠용 지역 시드를 여행 콘텐츠에도 공통으로 사용했습니다.• 해결: 지역 시드를 제거하고 여행 테마를 별도 입력으로 분리했습니다.먼저 결론재사용 가능한 것은 생성 절차였고, 재사용하면 안 되는 것은 콘텐츠의 맥락이었습니다. 공통 함수라고 해서 모든 채널에 같은 입력값을 넣으면 결과가 안정되는 것은 아닙니다.이번 문제는 글을 더 잘 써 달라는 지시로 해결되지 않았습니다. 여행 글에 맞는 입력 계약을 별도로 만드는 것이 핵심이었습니다.문제 상황기존 파이프라인은 오늘..

Develop 2026.07.15

GCP - Professional Cloud Database Engineer 후기

GCP 데이터베이스 지식을 확인하고 싶어서 도전했는데 합격했습니다! 준비부터 시험까지 후기를 공유하면서 시험 준비하시는 분들께 조금이나마 도움이 되고자 적게 되었습니다. 시험 기본 정보날짜: 2025년 3월 23일시간: 오전 11시시험 시간: 120분문제 수: 50문제방식: 온라인 감독비용: 원래 $200 정도인데, 바우처 덕분에 공짜.시간 타임은 되게 많아서 원하는 시간대에 골라서 하시면 되겠습니다:) 준비 과정시간 여부에 따라 준비를 두 가지로 나눴습니다. 본인 상황에 맞춰 참고해 보세요.정말 바빠서 정신없을 때 - 덤프 위주로 외우고 부족한 부분 채우기시간이 없다면 덤프가 진짜 구세주입니다. Udemy에서 할인할 때 덤프 문제를 사서 계속해서 풀어보며 반복적으로 외웠습니다. 가격은 14,000 ~ ..

Cloud/GCP 2025.03.25

Mac에서 ngrok 실행 시 SSL 인증서 오류 해결 방법

문제 상황Mac 환경에서 ngrok을 실행하려고 할 때 다음과 같은 SSL 인증서 오류가 발생했었습니다.현재 Python의 환경은 3.12를 사용하고 있습니다.(venv) (base) seok ~/Documents/PythonTest > ngrok http 3000 Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/urllib/request.py", line 1344, in do_open h.request(req.get_method(), req.selector, req.data, headers, File "/Library/Frameworks/Python.framew..

버그처리 2025.03.01