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..
로그인만 했다고 끝이 아니다 — Role, Authority, Scope로 관리자 API를 나누는 방법 (FastAPI · Spring Boot · Node.js)JWT를 검증해서 “현재 로그인 사용자”까지 꺼냈다면, 이제 진짜 다음 단계가 남습니다.바로 인가(Authorization) 예요.쉽게 말하면 “누구인지” 확인하는 인증(Authentication) 다음에, **“무엇을 할 수 있는지”**를 정하는 단계입니다. Spring Security 문서도 인증 아키텍처와 별개로 권한 부여(authorization)를 별도 구조로 다루고, FastAPI는 OAuth2 scopes를 통해 인증과 인가를 함께 표현할 수 있다고 설명합니다. (Home)이 주제는 초반에 진짜 많이 헷갈립니다.Role, Autho..
발급한 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를 너무 많이 넣고 있나?출력이 너무 길게 나오나?캐시될 수 있는 프롬프트를 매번 바꾸고 있나?로그는 많은데, 정작 어디서 새는지 모르나?이번 글은 바로 그 얘기입니다.기능 얘기..
세션이 좋을까, JWT가 좋을까? 로그인 이후 인증 상태를 유지하는 두 가지 방식 제대로 이해하기 — FastAPI · Spring Boot · Node.js비밀번호 해시까지 붙이고 나면, 이제 진짜로 다음 질문이 나옵니다.“로그인 성공한 사용자를 이제 어떻게 기억하지?”여기서 거의 무조건 나오는 단어가 두 개예요.세션(Session)JWT근데 이 주제는 늘 좀 이상하게 흘러갑니다.누군가는 “요즘은 무조건 JWT죠”라고 하고,또 누군가는 “아니, 세션이 더 안전해요”라고 하죠.솔직히 말하면… 둘 다 반쯤 맞고, 반쯤은 맥락이 빠진 말입니다.저도 예전엔 JWT가 더 최신이고 멋진 방식처럼 느껴졌어요.토큰 하나 들고 다니면 되니까 뭔가 더 현대적이고, 마이크로서비스랑도 잘 맞고, 모바일 앱에도 잘 어울려 보..
비밀번호를 그대로 저장하면 왜 위험할까? 해시, 검증, 인증의 첫 단추 제대로 끼우기 — FastAPI · Spring Boot · Node.js여기까지 시리즈를 따라오면서 회원가입 구조, 서비스 계층, repository, 트랜잭션까지 왔잖아요.이쯤 되면 진짜 자연스럽게 붙는 질문이 하나 있어요.“비밀번호는 이제 어떻게 저장하지?”이 질문이 은근히 무섭습니다.왜냐하면 여기서 대충 넘어가면, 앞에서 그렇게 열심히 구조를 잘 나눠놔도 한 번에 보안 구멍이 생기거든요.저도 아주 초반엔 이런 생각을 한 적이 있었어요.그냥 DB에 저장하면 안 되나?SHA-256 한 번 돌리면 되는 거 아닌가?어차피 내 서비스 작은데, 나중에 바꾸면 되지 않을까?근데 이게 진짜 위험한 생각이더라고요.비밀번호는 “그냥 저장하면 안..
Python으로 공부하는 OpenAI 11편 — RAG 답변에 출처까지 붙여야, 이제 진짜 “믿고 쓰는 서비스”가 됩니다RAG를 붙이고 나면, 처음엔 그 자체로 꽤 감동적입니다.“오, 내 문서를 찾아서 답하네?” 여기까지 오면 일단 반은 왔어요.근데 실무에서는 여기서 꼭 한 번 더 걸립니다.사용자 입장에서 제일 중요한 질문이 남아 있거든요.“그래서 이 답이 어디 문서를 근거로 나온 건데?”이 질문에 답을 못 하면, 서비스는 금방 애매해집니다.답이 맞아 보여도 찜찜하고, 틀렸을 때 어디서 어긋났는지 추적도 어렵고, 운영하는 사람도 디버깅이 힘들어요.그래서 이번 편은 출처 이야기입니다.그냥 RAG가 아니라, citation-friendly RAG, 그러니까 근거를 같이 보여주는 RAG 응답 구조를 만들어보겠..
Python으로 공부하는 OpenAI 10편 — RAG가 붙었는데 답이 별로라면, chunking과 top-k부터 다시 봐야 합니다9편에서 RAG를 붙이면, 처음엔 되게 뿌듯합니다.“이제 우리 문서를 찾아서 답하네?” 싶거든요.근데 그 다음에 거의 꼭 오는 순간이 있어요.검색은 되는 것 같은데 답이 좀 엉성하다.문서가 분명 있는데 못 찾는다.찾긴 찾는데 엉뚱한 조각을 들고 온다.관련 문서를 너무 많이 넣으니까 오히려 답이 흐려진다.이쯤 되면 많은 분이 바로 모델 탓을 합니다.근데 실제로는 모델보다 먼저 봐야 할 게 있어요.문서를 어떻게 쪼갰는지(chunking), 몇 개를 가져오는지(top-k), 그리고 검색 결과를 어떻게 정리해서 넣는지이 세 가지에서 품질이 갈리는 경우가 정말 많습니다.OpenAI 문..
- Total
- Today
- Yesterday
- 웹개발
- llm
- REACT
- 딥러닝
- fastapi
- nextJS
- 생성형AI
- JWT
- Prisma
- Docker
- CI/CD
- Python
- SEO최적화
- NestJS
- rag
- JAX
- seo 최적화 10개
- LangChain
- flax
- nodejs
- DevOps
- ai철학
- PostgreSQL
- kotlin
- 쿠버네티스
- Express
- node.js
- 백엔드개발
- 개발블로그
- 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 |
| 31 |
