NGINX Gateway Fabric: Sticky-Cookie를 사용한 세션 지속
이번 포스트에서는 NGINX Gateway Fabric(NGF)를 활용해 LLM 기반 챗봇 서비스를 새로고침(F5)하거나 브라우저를 잠깐 닫았다 열어도 대화가 끊기지 않고 자연스럽게 이어지도록 만드는 방법을 소개합니다. NGINX Gateway Fabric 2.4.2가 이제 사용 가능하며, 이전 버전(1.x)에서 2.0으로 업그레이드하려면 공식 업그레이드 가이드를 참고하세요. 1.x 문서는 이전 버전 문서를 확인하세요.
많은 사용자가 챗봇을 사용하다가 실수로 페이지를 새로고침하거나, 모바일에서 앱을 잠깐 껐다 켜는 상황이 발생합니다. 이때 이전에 나눴던 대화가 초기화되면 매우 불편하죠. NGINX Gateway Fabric의 Session Persistence 기능을 사용하면 이런 상황에서도 사용자가 동일한 백엔드 Pod로 계속 연결되어 대화 맥락이 유지됩니다. 특히 NGINX Plus 환경에서 제공하는 cookie 기반 세션 지속성을 적용하면, 새로고침 후에도 “아까 말했던 그 이야기 이어서 해줘” 같은 요청에 바로 응답할 수 있어 사용자 경험이 훨씬 편리해집니다.
목차
1. Session Persistence 개요
2. 챗봇 서비스에서 새로고침에도 끊김 없는 경험의 필요성
3. NGINX Gateway Fabric에서 Cookie 기반 Session Persistence 구성 방법
4. 실제 구성 예시 (챗봇 서비스 적용)
4-1. 배포 환경 및 매니페스트
4-2. 새로고침 테스트와 실제 동작 확인
5. 결론
1. Session Persistence 개요
Session Persistence(세션 지속성)는 동일한 사용자의 요청을 계속해서 같은 백엔드 Pod로 보내주는 기능입니다. NGINX Gateway Fabric에서는 HTTPRoute에 sessionPersistence 필드를 추가해 cookie 기반으로 구현할 수 있으며, NGINX Plus 사용자에게 제공되는 experimental 기능입니다.
쿠키를 발급받은 사용자는 이후 모든 요청에서 해당 쿠키를 자동으로 전송하므로, 페이지 새로고침이나 브라우저 재시작 후에도 동일 Pod에 연결되어 대화 맥락이 유지됩니다. NGINX OSS에서는 ip_hash 방식으로 대체할 수 있지만, 쿠키 기반이 훨씬 안정적이고 사용자 친화적입니다.
주의: cookie-based SessionPersistence는 Gateway API experimental 채널 기능이므로, NGINX Plus + experimental features를 활성화해야 합니다.
2. 챗봇 서비스에서 새로고침에도 끊김 없는 경험의 필요성
LLM 챗봇을 사용하다 보면 자연스럽게 이런 일이 발생합니다:
- 대화 중에 실수로 F5 키를 눌렀다
- 모바일에서 화면을 잠갔다가 다시 켰다
- 탭을 닫았다가 다시 열었다
이때마다 “아까 말한 내용 다시 설명해줘”부터 시작해야 한다면 사용자는 매우 불편해합니다. 쿠키 기반 세션 지속성을 적용하면 이런 상황에서도 자동으로 이전 Pod에 연결되어 대화가 그대로 이어집니다. 결과적으로:
- 사용자가 새로고침을 해도 “계속해서” 물어볼 수 있는 편안함
- 대화 흐름이 자연스럽게 유지되어 몰입감 ↑
- 재접속 후에도 바로 본론으로 들어갈 수 있는 편리함
3. NGINX Gateway Fabric에서 Cookie 기반 Session Persistence 구성 방법
Gateway API experimental 리소스 설치:
kubectl kustomize "https://github.com/nginx/nginx-gateway-fabric/config/crd/gateway-api/experimental?ref=v2.4.2" | kubectl apply -f -
NGINX Gateway Fabric에 experimental features 활성화 (Helm 또는 매니페스트 args에 –gateway-api-experimental-features 추가).
HTTPRoute에 sessionPersistence를 추가하면 끝입니다. 쿠키 이름과 만료 시간을 자유롭게 설정할 수 있어 챗봇 서비스에 딱 맞춥니다.
4. 실제 구성 예시 (챗봇 서비스 적용)
실제 클러스터에서 chatbot-ui + Ollama로 운영 중인 환경입니다.
4-1. 배포 환경 및 매니페스트
Pod 및 Service 상태:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESpod/chatbot-ui-549f594bff-9lx65 1/1 Running 0 24h 10.0.14.91 workernode2 pod/chatbot-ui-549f594bff-cvbgt 1/1 Running 0 24h 10.0.123.206 workernode1 pod/ho-ngf-gateway-nginx-7c6f754596-4nw6g 1/1 Running 0 2d3h 10.0.14.225 workernode2 pod/ollama-694fcd45f4-lssvm 1/1 Running 0 24h 10.0.14.114 workernode2 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTORservice/chatbot-service ClusterIP 10.104.174.41 80/TCP 24h app=chatbotservice/ho-ngf-gateway-nginx LoadBalancer 10.100.122.39 192.168.40.74 80:30132/TCP 2d7h ...
Sticky Cookie 적용 HTTPRoute:
apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata: name: sticky-cookie-httproute namespace: ho-ngfspec: parentRefs: - name: ho-ngf-gateway sectionName: http hostnames: - "ho-ngf.devopsshin.com" rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: chatbot-service port: 80 sessionPersistence: sessionName: "cookie-chatbot" type: Cookie absoluteTimeout: 24h cookieConfig: lifetimeType: Permanent
4-2. 새로고침 테스트와 실제 동작 확인
브라우저에서 https://{domain}에 접속해 챗봇과 대화를 시작합니다.
- “오늘 저녁 뭐 먹을까?”라고 물어봄
- 챗봇이 “피자 어때요?”라고 답변
- 페이지 새로고침 (F5)
- 바로 “아까 추천한 피자 어디서 시킬까?”라고 물어봄
- 챗봇이 이전 대화 기억 → “이전에 말한 그 피자집 추천해드릴게요!” 응답

개발자 도구 → Application → Cookies에서 “cookie-chatbot” 쿠키가 유지되는 것을 확인할 수 있습니다. 쿠키 덕분에 새로고침 후에도 동일 Pod에 연결되어 대화가 자연스럽게 이어집니다.

쿠키 삭제 후 재접속 시 → 새로운 Pod로 연결되어 이전 대화 기억 못 함 → 새로고침에도 끊김 없이 사용하려면 세션 지속성이 얼마나 중요한지 실감할 수 있습니다.
5. 결론
NGINX Gateway Fabric의 cookie-based Session Persistence를 적용하면 챗봇 서비스에서 새로고침, 브라우저 재시작, 모바일 화면 잠금 해제 같은 일상적인 상황에서도 대화가 끊기지 않고 편안하게 이어집니다. 사용자가 “계속해서” 물어볼 수 있는 자연스러운 경험을 제공해 챗봇 만족도를 크게 높일 수 있습니다.
운영 시 쿠키 보안 설정(Secure, HttpOnly)과 적절한 만료 시간 조정을 잊지 마세요. 더 자세한 내용은 NGINX Gateway Fabric 공식 문서를 확인해보세요.
더 궁금한 점이 있으시면 언제든 NGINX STORE에 문의 주세요!
댓글을 달려면 로그인해야 합니다.