⚙️Backend

챗봇 미사용 시 관찰자 기능 비활성화로 비용 절감하기

챗봇 미사용 시 관찰자 기능 비활성화로 관리자 페이지 비용 절감. UI 노출 방지 및 URL 패턴 제거 방법.

📅 2026년 7월 6일·📖 3분 읽기·👁 1

챗봇을 사용하지 않을 때 관찰자 기능을 비활성화해서 비용을 절감해야 했다. 관리자 페이지의 '관찰자 관리' 탭이 계속 노출되는 게 영 신경 쓰였다.

시도와 함정

처음에는 단순히 관찰자 기능을 끄면 관련 UI도 사라질 거라고 생각했다. 하지만 관리자 페이지의 '관찰자 관리' 탭은 그대로 남아 있었다.

# observer/views.py (가상 코드, 실제 코드 아님)
from django.shortcuts import render
from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required def observer_management_view(request): # ... 관찰자 관리 로직 ... return render(request, 'admin/observer_management.html', {})

위처럼 staff_member_required 데코레이터가 붙어있는데, 챗봇 사용 여부와 관계없이 관리자 권한만 있으면 접근 가능했다. 이걸 어떻게 숨길지가 문제였다.

원인

관찰자 기능 자체는 챗봇 사용 여부와 연동되어 비활성화되도록 로직을 수정했지만, 관리자 페이지의 '관찰자 관리' 탭은 별도의 URL 패턴과 뷰 함수로 관리되고 있었다. 이 뷰 함수를 조건부로 렌더링하거나, URL 패턴 자체를 숨기는 로직이 없었던 것이다.

해결

결국 관찰자 기능 비활성화 시, 해당 탭에 접근하는 URL 패턴 자체를 제거하도록 urls.py 설정을 변경했다.

# admin/urls.py (실제 코드)
from django.urls import path
from . import views
from observer import views as observer_views # observer 앱의 views 모듈

챗봇 사용 여부를 확인하는 로직 (예시)

def is_chatbot_enabled(): # 실제로는 설정값이나 DB에서 확인 return False # 현재는 비활성화 상태라고 가정

urlpatterns = [ path('dashboard/', views.dashboard_view, name='dashboard'), # ... 다른 관리자 페이지 URL ... ]

챗봇이 비활성화되어 있다면 관찰자 관리 탭 URL을 추가하지 않음

if not is_chatbot_enabled(): urlpatterns.append( path('observer-management/', observer_views.observer_management_view, name='observer_management') )

이렇게 is_chatbot_enabled() 함수의 반환값에 따라 '관찰자 관리' 탭의 URL 패턴을 동적으로 추가하거나 제외하도록 했다.

결과

  • 관리자 페이지에서 '관찰자 관리' 탭이 완전히 사라졌다.
  • 불필요한 기능 관련 UI 노출을 막아 사용자 혼란을 줄였다.
  • 운영 비용 절감에 기여했다.

정리 — 같은 함정 안 빠지려면

  • [ ] 기능 비활성화 시, 해당 기능과 연관된 모든 UI 요소(메뉴, 탭, 버튼 등)가 함께 제거되는지 확인한다.
  • [ ] 관리자 페이지 등 권한 기반 접근 페이지에서는 기능 활성화/비활성화에 따라 URL 패턴이나 뷰 렌더링을 조건부로 제어하는 로직을 고려한다.
  • [ ] 비용 절감을 위해 사용하지 않는 기능은 과감히 비활성화하고 관련 흔적을 지운다.

태그

#챗봇#관찰자 기능#비용 절감#관리자 페이지#백엔드#Django#URL 패턴