운영 경험으로 읽는 백엔드 설계
이정우의 인증 서버·데이터 이관·업무 AI 개발 기록입니다.
최신 글
27만 건 무중단 데이터 이관, 대사 스케줄러로 정합성 지키기
이전 회사에서 외부 업체가 운영하던 자산관리 시스템에 기대고 있던 데이터를 우리 쪽 시스템으로 옮기는 일을 맡았습니다. 건수로는 약 27만 건이었고, 서비스는 멈추지 않아야 했습니다. 이관은 회사 차원에서 정한 일이었고, 저는 그걸 받아 실행을 맡았습니다. 그래서 이 글은 “왜 옮기기로 했나”보다 “정해진 일을 어떻게 안전하게 끝냈나”에 대한 이야기입니다. 업체 이름이나 내부 시스템 이름, 세부 수치는 쓰지 않고 “외부…

인증 서버를 gRPC와 WebFlux, R2DBC로 재설계해 서버 대수 줄이기
시작은 서버 대수였습니다 이전 회사에서 협업 메신저 백엔드를 만들 때의 일입니다. 어느 시점에 인프라 비용을 크게 줄여야 한다는 방향이 내려왔습니다. 그런데 “서버를 줄이자”는 말만 있었지 어느 서버를 얼마나 줄일지는 정해져 있지 않았습니다. 그건 백엔드 쪽에서 직 접 들여다보고 정해야 했습니다. 이럴 때 제일 쉬운 길은 전부 조금씩 줄이는 것이라고 생각합니다. 다만 그렇게 하면 서비스 전체가 조금씩 불안해지고, 정작 낭비가…
MySQL 8에서 격리 수준을 올려도 Lost Update는 막히지 않았습니다
재고 100개짜리 상품에 주문 120건을 동시에 넣어 봤더니 120건이 전부 성공으로 끝났고, 재고는 3개만 줄어 있었습니다. 성공 주문 120건 중 재고 차감이 117건 누락됐습니다. 초기 재고 100개를 기준으로 초과 접수된 주문은 20건입니다. 격리 수준을 READ COMMITTED에서 REPEATABLE READ로 올려도 결과는 같았고, 5회 모두 같았습니다. 나 조건부 UPDATE 한 줄로 바꾸자 5회 모두 정확히…

인덱스가 있는데도 느린 쿼리와 복합·커버링 인덱스
같은 목록 쿼리가 계약 2천 건짜리 사이트에선 2.2ms, 20만 건짜리 사이트에선 226ms가 걸렸습니다. 단일 인덱스로 사이트의 계약을 전부 읽은 뒤 상태·유형으로 거르고, 남은 4만 8천 건을 정렬해서 100건만 쓰고 있었기 때문입니다. 복합 인덱스 하나로 정렬까지 인덱스에 맡기자 큰 사이트가 226ms에서 0.8ms가 됐고, 읽는 행도 20만 건에서 정확히 100건이 됐습니다. 커버링 인덱스로 한 단계 더 가 봤지만…
서버 한 대짜리 개인 시스템의 자동 복구와 DOP-C02
예약해 둔 작업들이 밤새 돌고 몇 개는 조용히 실패합니다. 봇이 죽어도 제가 자는 사이 watchdog가 되살려 두기 때문에, 아침에 로그를 열면 대부분 성공에 몇 건 실패로 밤이 정리돼 있습니다. 서버 한 대에 접어 넣은 이 자동 복구는 죽으면 되살리고(watchdog), 연달아 실패하면 끊고(서킷브레이커), 위험한 명령은 사람이 승인해야 통과시키는 구성이며, 7월 기준으로 여덟 개 작업에 이 차단기가 걸려 있었습니다…
Multi-AZ 고가용성 운영과 SAP-C02 재해 복구
AWS 아키텍트 자격증(SAP-C02)의 재해 복구 파트는 제가 몇 년간 운영한 고가용성 구조와 층위가 달랐습니다. 시험이 다루는 건 다른 리전에 시스템을 통째로 하나 더 두는 멀티 리전 재해 복구이고, 제가 한 건 한 리전 안에서 두 가용영역(AZ)에 나눠 자동 페일오버까지 맞춘 것입니다. 멀티 리전은 운영해 본 적이 없습니다. 대신 파일럿 라이트와 웜 스탠바이가 무엇을 맞바꾸는 선택인지는 정리됐습니다. 리전 간 복제 지연이…
자작 RAG와 Bedrock Knowledge Base 비교
날짜 검색이 자꾸 틀리던 자작 RAG를 BM25로 고쳐 놓고 나서, 같은 해법이 AWS Gen AI 자격증(AIP-C01) 범위에 개념 한 줄로 들어 있는 걸 봤습니다. 시험이 관리형 정 답으로 내세우는 Bedrock Knowledge Base와, 제가 LanceDB로 검색·청킹·병합을 직접 짠 구조를 비교해 보니 겹치는 곳은 청킹 전략과 하이브리드 검색이었습니다. 시험은 어느 쪽이 정답인지는 알려 줘도 왜 그런지는 알려 주지…

AWS 프로페셔널 자격증 3개 취득기
기초 1개(AI Practitioner, 5월 1일)에 이어 프로페셔널 3개(데브옵스 6월 27일, 아키텍트 7월 5일, 생성형 AI 개발자 7월 12일)를 땄습니다. 프로페셔널 셋은 약 2주 사이, 전체는 약 2달 반입니다. 강의는 통독하지 않았고, 연습 문제를 Claude에 던지고 “왜 이게 정답이고 나머지는 왜 틀렸는지”를 한국어로 설명받는 방식으로 공부했습니다. AI Practitioner는 3일, 교재 0권으로…

업무용 AI 비서의 탄생 (2편) 기억을 입히는 이중 인덱싱
1편의 비서는 질문마다 백지에서 도구를 긁어서 과거 맥락이 쌓이지 않았습니다. 그래서 제 질문과 검색어를 마크다운으로 남기고 로컬 SQLite 벡터 저장소에 증분 인덱싱했습니다. 검색은 뜻으로 찾는 방식과 키워드로 찾는 방식을 묶었고, 흩어진 조각 기록은 도메인별로 군집해 패턴을 뽑았습니다. 그 결과 프롬프트에 과거 맥락과 인사이트가 얹혀 답이 더 좁혀져 돌아옵니다. 오래된 기억과 잘못된 군집은 여전히 사람이 걸러야 합니다.…