Python으로 공부하는 OpenAI 15편 — 테스트 가능한 구조로 바꿌 순간, AI 백엔드가 비로소 개발자 손에 들어옵니다여기까지 오면 기능은 꽤 많이 붙었습니다.채팅도 되고, RAG도 되고, 스트리밍도 되고, 백그라운드 작업도 나눴고, 재시도랑 멱등성까지 봤죠.근데 이쯤에서 거의 꼭 막히는 지점이 하나 있습니다.“이걸 어떻게 테스트하지?”“실제 OpenAI API를 안 부르고도 서비스 로직을 검증할 수 있나?”“RAG 검색 결과가 바뀌어도 앱 로직은 안전한지 어떻게 확인하지?”“Pydantic 검증이 깨졌을 때 테스트로 먼저 잡을 수 있나?”솔직히 AI 기능 붙인 코드가 무서운 이유는 이거예요.눈으로 몇 번 눌러보면 되는 것 같지만, 실제로는 가장 회귀가 자주 나는 영역이기도 하거든요.OpenAI ..
Access Token만으로는 왜 부족할까? Refresh Token으로 재로그인 없는 인증 흐름 만들기 — FastAPI · Spring Boot · Node.jsJWT 인증을 붙이고 보호된 API까지 만들면, 얼핏 보면 이제 끝난 것 같아요.로그인도 되고, /me도 되고, 관리자 API도 role로 막았고… 뭔가 제법 서비스 같죠.근데 여기서 진짜 운영으로 가면 꼭 부딪히는 문제가 하나 있습니다.access token 만료 시간을 어떻게 잡을 건데?이걸 길게 잡으면 편해요.사용자는 오랫동안 다시 로그인 안 해도 되고, 프론트도 토큰 갱신 로직이 단순해집니다.근데 반대로 생각하면, 토큰이 탈취됐을 때 그만큼 오래 악용될 수 있다는 뜻이기도 해요.그래서 대부분의 실무 구조는 이렇게 갑니다.access t..
에이전트가 똑똑해 보이지만 위험한 이유 — 무한 루프, 잘못된 tool 호출, 비용 증가를 어떻게 봐야 하나에이전트를 처음 붙이면, 솔직히 좀 신납니다.질문을 보고,필요한 tool을 고르고,결과를 받아서 다시 답을 만들고…딱 봐도 “오, 이제 진짜 AI 서비스 같네” 싶은 느낌이 와요.근데 여기서 한 번 더 가야 합니다.왜냐면 에이전트는 멋져 보이는 만큼, 운영에서는 생각보다 무섭기 때문이에요.특히 처음 만들 때는 이런 일이 자주 생깁니다.같은 질문에 쓸데없이 tool을 여러 번 부름굳이 안 불러도 될 tool을 자꾸 씀tool 오류가 나면 이상하게 우회하거나 헛소리를 함대화가 길어질수록 느려지고 비싸짐어디서 잘못됐는지 추적이 잘 안 됨LangChain 문서는 에이전트가 기본적으로 모델 호출 → tool..
LangChain Agent 처음 만들기 — create_agent로 진짜 에이전트처럼 동작하는 흐름 이해하기여기서부터는 분위기가 조금 달라집니다.지금까지는 체인을 만들고,문서를 찾고,tool도 붙여봤죠.그런데 아직은 어딘가 “기능 조각” 느낌이 남아 있습니다.질문이 오면 우리가 미리 정한 흐름대로 움직이는 쪽에 더 가까웠어요.에이전트는 여기서 한 단계 넘어갑니다.질문을 보고, 지금 뭘 해야 하는지 판단하고, 필요한 tool을 고르고, 결과를 받아서, 최종 답을 만드는 루프가 생깁니다. LangChain 문서는 agent를 “언어 모델과 tools를 결합해 과제를 추론하고, 어떤 tool을 쓸지 결정하며, 반복적으로 해결해 나가는 시스템”으로 설명하고, 전형적인 agent loop는 모델 호출 → too..
로그인만 했다고 끝이 아니다 — Role, Authority, Scope로 관리자 API를 나누는 방법 (FastAPI · Spring Boot · Node.js)JWT를 검증해서 “현재 로그인 사용자”까지 꺼냈다면, 이제 진짜 다음 단계가 남습니다.바로 인가(Authorization) 예요.쉽게 말하면 “누구인지” 확인하는 인증(Authentication) 다음에, **“무엇을 할 수 있는지”**를 정하는 단계입니다. Spring Security 문서도 인증 아키텍처와 별개로 권한 부여(authorization)를 별도 구조로 다루고, FastAPI는 OAuth2 scopes를 통해 인증과 인가를 함께 표현할 수 있다고 설명합니다. (Home)이 주제는 초반에 진짜 많이 헷갈립니다.Role, Autho..
Python으로 공부하는 OpenAI 14편 — 재시도, 멱등성, 실패 복구를 붙여야 운영에서 안 무너집니다AI 기능은 처음엔 “되기만 하면 신기한 코드”처럼 느껴집니다.근데 서비스로 돌리기 시작하면, 진짜 문제는 기능 그 자체보다 실패했을 때 어떻게 버티는가에서 터집니다.특히 OpenAI 붙인 백엔드에서는 이런 일이 생각보다 자주 생깁니다.네트워크가 잠깐 흔들림429 rate limit이 걸림같은 job이 두 번 실행됨웹훅이 중복으로 들어옴워커가 중간에 죽어서 상태가 어정쩡하게 남음재시도를 걸었더니 오히려 중복 결과가 생김이때 필요한 게 바로 세 가지예요.재시도, 멱등성, 실패 복구.OpenAI 공식 Python 라이브러리는 일부 오류에 대해 기본 재시도를 제공하고, Rate limits 가이드는 ra..
LangChain으로 Tool Calling 제대로 다루기 — tool 설계, 설명문, 반환 형식이 품질에 미치는 영향지난 글에서 Tool Calling의 필요성을 봤다면,이번엔 한 단계 더 들어가야 합니다.왜 어떤 tool은 잘 호출되고,어떤 tool은 이상한 순간에 불리고,어떤 tool은 인자를 자꾸 틀리게 넣는지요.처음엔 모델 문제처럼 보일 수 있어요.근데 실제로는 꽤 자주 tool 설계 문제입니다.LangChain 공식 문서는 tool의 이름, 설명, 인자 이름, 인자 설명이 단순한 메타데이터가 아니라, 모델이 “언제 이 도구를 써야 하는지”와 “어떻게 써야 하는지”를 판단하는 데 직접 영향을 준다고 설명합니다. 또 @tool을 쓸 때 type hint는 입력 스키마를 정의하므로 필수이고, doc..
발급한 JWT를 이제 어디에 쓰지? 보호된 API에서 토큰 검증하고 현재 로그인 사용자를 꺼내는 방법 — FastAPI · Spring Boot · Node.js지난 글에서 세션과 JWT의 차이를 정리했죠.그런데 사실 인증은 “로그인 성공”에서 끝나지 않습니다.진짜 중요한 건 그다음이에요.보호된 API에서 토큰을 어떻게 읽는지이 토큰이 진짜인지 어떻게 검증하는지현재 로그인 사용자를 어디서 꺼내는지인증 안 된 요청은 어디서 막는지이 단계가 들어가야 비로소“로그인 기능이 있는 서비스”가 아니라“인증이 실제로 적용된 API 서버” 가 됩니다.이번 글에서는 그걸 FastAPI, Spring Boot, Node.js 기준으로 이어서 정리해보겠습니다.FastAPI는 OAuth2PasswordBearer를 통해 Be..
Python으로 공부하는 OpenAI 13편 — 오래 걸리는 AI 작업은 API 서버에서 바로 처리하지 말고, 백그라운드 작업으로 분리해야 합니다여기까지 시리즈를 따라오면, 슬슬 이런 순간이 옵니다.“기능은 다 되는데, 어떤 요청은 너무 오래 걸린다.”“문서 업로드하고 벡터 스토어 색인까지 한 번에 하려니까 API가 답답하다.”“긴 요약, 대량 생성, 대량 임베딩 작업을 요청-응답 한 번에 묶어두니 운영이 불안하다.”이때 필요한 감각이 바로 백그라운드 작업 분리입니다.솔직히 이 단계부터는 코드만 잘 짜는 문제가 아니라,AI 기능을 운영 가능한 백엔드 구조로 바꾸는 문제에 가까워집니다.OpenAI 공식 문서도 “Run and scale” 아래에 Background mode, Streaming, Webhoo..
Python으로 공부하는 OpenAI 12편 — 비용은 기능보다 늦게 터지지만, 한 번 터지면 훨씬 아픕니다OpenAI 기능은 처음 붙일 때 되게 재밌습니다.채팅 붙고, RAG 붙고, 스트리밍 붙고, 출처까지 붙으면 꽤 근사해 보여요.근데 서비스가 진짜 서비스가 되는 순간,거의 반드시 부딪히는 문제가 하나 있습니다.“이거 비용이 어디서 이렇게 많이 나가지?”이 질문은 늘 늦게 옵니다.처음엔 API 몇 번 호출하니까 체감이 잘 안 돼요.근데 사용자 수가 조금만 늘어도 바로 보입니다.히스토리를 너무 많이 보내고 있나?RAG chunk를 너무 많이 넣고 있나?출력이 너무 길게 나오나?캐시될 수 있는 프롬프트를 매번 바꾸고 있나?로그는 많은데, 정작 어디서 새는지 모르나?이번 글은 바로 그 얘기입니다.기능 얘기..
- Total
- Today
- Yesterday
- 쿠버네티스
- DevOps
- 백엔드개발
- Express
- Prisma
- llm
- 웹개발
- Docker
- node.js
- JWT
- ai철학
- 딥러닝
- PostgreSQL
- rag
- CI/CD
- Python
- NestJS
- 개발블로그
- SEO최적화
- LangChain
- REACT
- JAX
- seo 최적화 10개
- nextJS
- kotlin
- flax
- fastapi
- nodejs
- 생성형AI
- Next.js
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |

