임베딩 API 호출이 느려질 때 배치 크기와 병렬 처리 조정법

결론부터 말씀드리면, 임베딩 API 호출이 느려질 때 가장 먼저 손봐야 할 것은 코드 최적화가 아니라 배치 크기와 동시 요청 수의 조합입니다. 텍스트를 한 건씩 호출하고 있다면 배치로 묶는 것만으로도 체감 속도가 크게 달라지고, 이미 배치를 쓰고 있는데도 느리다면 동시성 설정이 레이트 리밋에 걸려 있을 가능성이 높습니다. 이 글에서는 OpenAI Python SDK(1.x 버전) 기준으로, 실제 동작하는 … Read more

LLM 함수 호출 파라미터 타입 오류, JSON 스키마로 잡는 법

LLM 함수 호출에서 파라미터 타입이 자꾸 틀리면 모델 성능이 부족해서라고 생각하기 쉬운데요, 사실은 스키마가 “반드시 지켜야 할 규칙”이 아니라 “참고용 힌트”로만 전달되는 경우가 많아서 벌어지는 문제예요. city 자리에 숫자가 들어오거나 enum 값 바깥의 문자열이 채워지는 오류는, OpenAI의 Structured Outputs 기능에서 strict 옵션을 켜면 상당 부분 구조적으로 막을 수 있습니다. 다만 이 옵션을 켠 뒤에도 검증 … Read more

배치 체크포인트 설계: 끊긴 작업도 안전하게 재시작하는 법

새벽에 돌려둔 배치 작업이 서버 재부팅 한 번에 처음부터 다시 도는 걸 보면 맥이 빠지실 거예요. 배치 체크포인트를 제대로 설계해두면 끊긴 지점부터 이어받아 돌릴 수 있어서, 처음부터 재시작할 필요가 없어집니다. 이 글에서는 어떤 정보를 어디에 저장해야 이어받기가 가능한지, 그리고 체크포인트를 넣었는데도 중복 처리가 생기는 이유는 무엇인지 정리해봅니다. 배치 작업이 끊기는 지점과 체크포인트의 역할 배치 작업은 … Read more

웹훅 처리 안전하게 하려면? 서명 검증·재시도·멱등성부터

“결제 웹훅을 받는데 같은 주문이 두 번 처리돼요”라는 질문, 검색해 보신 적 있으신가요? 답은 명확합니다. 웹훅 처리를 안전하게 하려면 서명 검증으로 발신자를 확인하고, 재시도로 인한 중복 전송을 전제로 설계하고, 멱등성 키로 같은 이벤트를 두 번 실행하지 않게 막아야 합니다. 이 세 가지 중 하나라도 빠지면 결제 중복 처리나 위조 요청 같은 사고로 이어질 수 있습니다. … Read more

작업 큐 도입, 지금이 신호일 수 있습니다

이 글에서는 백그라운드 작업이 요청 응답 시간을 갉아먹기 시작했을 때 나타나는 구체적인 신호와, Celery로 실제 작업 큐를 붙이는 최소 예제까지 확인하실 수 있습니다. 결론부터 말씀드리면, 이메일 발송이나 이미지 처리, 외부 API 호출처럼 사용자 응답과 무관한 작업이 요청 스레드를 붙잡고 있다면 작업 큐 도입을 더 미룰 이유가 없습니다. 특히 이 상태가 트래픽이 조금만 늘어도 타임아웃으로 번진다면, … Read more

시크릿 관리, 환경변수만으로는 못 막는 지점

docker inspect 컨테이너ID 명령어 하나만 실행해도 -e API_KEY=sk_live_…로 넣어둔 값이 평문 그대로 출력됩니다. /proc/PID/environ을 읽을 수 있는 계정이라면 마찬가지로 값이 그대로 보이고, CI 스크립트에서 디버깅용으로 printenv를 한 번 찍으면 그 값이 빌드 로그에 영구히 남습니다. 시크릿 관리를 “.env 파일에 넣고 커밋만 안 하면 된다”는 수준으로 끝내면 정확히 이 지점들에서 뚫립니다. 이 글에서는 환경변수 방식이 놓치는 … Read more

크롤링용 CSS 셀렉터가 자주 깨지는 이유와 안 바뀌는 선택자 고르는 기준

지난달 돌리던 크롤링 스크립트가 사흘 만에 두 번 멈췄습니다. 로그를 열어보니 두 번 다 같은 패턴이었어요. div:nth-child(3) > span 식으로 위치를 기준으로 잡은 CSS 셀렉터가, 사이트에 배너 하나 추가되면서 순서가 밀려 엉뚱한 요소를 가리키고 있었습니다. 결론부터 말씀드리면, 셀렉터가 자주 깨지는 원인은 대부분 “그 페이지의 현재 구조”에 의존한 선택자를 썼기 때문이고, 반대로 “그 요소의 정체성”에 의존한 … Read more

헤드리스 브라우저 탐지에 걸리는 진짜 이유와 정상 사용의 경계

헤드리스 브라우저를 쓰는 것 자체가 차단 사유라고 생각하는 분들이 많은데, 이건 정확한 이해가 아닙니다. 헤드리스 브라우저 탐지 로직이 실제로 잡아내는 건 ‘브라우저 종류’가 아니라 ‘자동화 흔적’입니다. Playwright든 Selenium이든 사람이 쓰는 것처럼 자연스러운 속도와 패턴으로 접근하면 웬만한 봇 차단 시스템을 그대로 통과하고, 반대로 일반 크롬을 켜놓고 스크립트로 클릭을 반복해도 똑같이 걸립니다. 헤드리스 브라우저 탐지는 정확히 무엇을 … Read more

세션 만료 자꾸 뜬다면? 쿠키 수명과 갱신 주기 재설정법

로그인해도 몇 분 뒤 다시 로그인 창이 뜬다면, 많은 분들이 “세션 만료 시간을 늘리면 해결된다”고 생각하십니다. 하지만 만료 시간을 무작정 늘리는 것과 갱신 주기를 새로 설계하는 것은 전혀 다른 문제입니다. 세션 만료 문제는 대부분 서버 세션 수명, 쿠키 수명, 토큰 갱신 로직 세 가지가 서로 다른 값으로 흩어져 있어서 생깁니다. 이 글은 서버 세션(예: Spring … Read more

토큰 사용량 집계, 대시보드에 뭘 담아야 쓸모 있을까요

결론부터 말씀드리면, 토큰 사용량 집계 대시보드는 총 토큰 수 하나만 보여줘서는 쓸모가 없습니다. 모델별, 입력·출력 방향별, 캐시 히트 여부별로 쪼개서 쌓아야 비용 분석이 가능해지고 이상 징후도 잡아낼 수 있습니다. 이 글에서는 어떤 필드를 어떤 단위로 모아야 하는지, 그리고 실시간 집계가 오히려 방해가 되는 상황은 언제인지까지 구체적으로 짚어보겠습니다. 토큰 사용량 집계, 범위를 어디까지 잡아야 할까요 가장 … Read more