Django Admin을 넘어서: 대안적인 파이썬 관리자 인터페이스 탐색
Grace Collins
Solutions Engineer · Leapcell

소개
대부분의 파이썬 웹 개발자, 특히 Django를 사용하는 개발자에게 Django Admin 인터페이스는 친숙하고 없어서는 안 될 도구입니다. 최소한의 구성으로 강력한 CRUD 작업을 즉시 제공하여 데이터베이스 모델을 관리하는 빠르고 강력한 방법을 제공합니다. 이러한 "기본 포함" 접근 방식은 수많은 시간을 절약하고 개발 주기를 크게 가속화했습니다. 그러나 FastAPI 및 Starlette과 같은 비동기 프레임워크의 부상으로 파이썬 웹 환경이 진화함에 따라 개발자들은 이러한 현대적인 패러다임에 더 잘 맞는 관리 솔루션을 점점 더 찾고 있습니다. Django Admin은 생태계 내에서 강력한 도구로 남아 있지만, 만능 해결책은 아닙니다. 이 글은 Django Admin의 친숙한 편안함을 넘어, 다양한 프레임워크와 개발 철학을 충족하는 현대적인 대안을 탐구하며, 특히 Starlette-Admin
에 초점을 맞춥니다.
관리자 인터페이스 이해
대안을 자세히 살펴보기 전에 웹 개발 맥락에서 "관리자 인터페이스"가 무엇을 의미하는지에 대한 공통된 이해를 확립해 보겠습니다.
관리자 인터페이스: 핵심적으로 관리자 인터페이스(또는 관리 패널)는 승인된 사용자가 웹 애플리케이션의 데이터 및 구성을 관리할 수 있도록 하는 웹 기반 그래픽 사용자 인터페이스(GUI)입니다. 일반적으로 다음과 같은 작업을 포함합니다.
- CRUD 작업: 데이터베이스의 레코드 생성, 읽기, 업데이트 및 삭제.
- 데이터 시각화: 종종 테이블, 필터 및 검색 기능을 사용하여 데이터를 구조적이고 직관적인 방식으로 표시.
- 사용자 관리: 애플리케이션 사용자, 역할 및 권한 관리.
- 시스템 구성: 애플리케이션 설정 또는 매개변수 조정.
관리자 인터페이스의 주요 목표는 비기술적이거나 준기술적인 사용자에게 코드를 작성하거나 데이터베이스와 직접 상호 작용할 필요 없이 애플리케이션의 백엔드와 상호 작용할 수 있는 기능을 제공하는 것입니다.
Django Admin (간략히): Django Admin은 Django에 내장된, 관례 우선 구성 방식의 관리 인터페이스입니다. Django 모델을 기반으로 완전한 기능을 갖춘 UI를 자동으로 생성하여 최소한의 코드로 신속한 데이터 관리가 가능합니다. 강점은 Django ORM 및 프레임워크와의 깊은 통합입니다.
Starlette-Admin 탐색
Django Admin은 자체 프레임워크 내에서 뛰어나지만, 긴밀한 결합으로 인해 Flask, FastAPI 또는 Starlette으로 빌드된 애플리케이션에는 덜 적합합니다. 이것이 Starlette-Admin
과 같은 솔루션이 빛을 발하는 곳입니다.
Starlette-Admin
은 Starlette 및 FastAPI 애플리케이션을 위해 특별히 설계된 강력하고 유연한 관리 인터페이스입니다. 이 프레임워크의 비동기 특성을 활용하고 현대적이고 사용자 정의 가능한 UI를 제공합니다.
원칙 및 디자인
Starlette-Admin
은 유연성과 확장성을 염두에 두고 구축되었습니다. 주요 원칙은 다음과 같습니다.
- 설계상 비동기: 데이터베이스 작업 및 UI 렌더링을 위해
async
/await
를 활용하여 차단되지 않는 성능을 보장합니다. - 프레임워크 독립적(제한적): 주로 Starlette/FastAPI용이지만, 디자인 패턴은 다른 프레임워크에 영감을 줄 수 있습니다. 다양한 ORM 통합을 통해 데이터베이스 추상화를 달성합니다.
- 현대적인 UI: 깔끔하고 반응성이 뛰어나며 사용자 정의 가능한 프런트 엔드를 위해
Bootstrap
을 사용합니다. - 확장성: 개발자는 보기, 양식, 필터 및 작업을 쉽게 사용자 정의할 수 있습니다.
FastAPI 및 SQLAlchemy를 사용한 구현
SQLAlchemy를 ORM으로 사용하여 FastAPI 애플리케이션에 Starlette-Admin
을 설정하는 방법을 설명해 보겠습니다.
먼저 필요한 패키지를 설치했는지 확인하십시오:
pip install fastapi uvicorn sqlalchemy asyncpg starlette-admin jinja2
이제 간단한 FastAPI 애플리케이션을 데이터베이스 모델과 함께 만들고 Starlette-Admin
을 통합해 보겠습니다.
# main.py import uvicorn from fastapi import FastAPI from sqlalchemy import create_engine, Column, Integer, String, Text from sqlalchemy.orm import sessionmaker, declarative_base from starlette.middleware.sessions import SessionMiddleware from starlette_admin.contrib.sqla import Admin, ModelView # 1. 데이터베이스 설정 (SQLAlchemy) DATABASE_URL = "sqlite+aiosqlite:///./test.db" # 또는 비동기 PostgreSQL URL engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() # SQLAlchemy 모델 정의 class Post(Base): __tablename__ = "posts" id = Column(Integer, primary_key=True, index=True) title = Column(String, index=True) content = Column(Text) author = Column(String, default="Admin") def __repr__(self): return f"<Post(id={self.id}, title='{self.title[:20]}...')>" # 테이블 생성 Base.metadata.create_all(bind=engine) # DB 세션을 위한 의존성 def get_db(): db = SessionLocal() try: yield db finally: db.close() # 2. FastAPI 애플리케이션 설정 app = FastAPI() # 인증을 위한 SessionMiddleware 추가 (Starlette-Admin에 필요) # 프로덕션에서는 "super-secret"을 강력한 비밀 키로 바꾸십시오. app.add_middleware(SessionMiddleware, secret_key="super-secret") # 3. Starlette-Admin 통합 admin = Admin(engine, title="My FastAPI Admin") # Post 모델을 위한 ModelView 추가 class PostAdmin(ModelView, model=Post): # 목록 보기 열 사용자 정의 list_display = ["id", "title", "author"] # 검색 필드 사용자 정의 search_fields = ["title", "author"] # 필터 추가 filters = ["author"] admin.add_view(PostAdmin) # 관리자 인터페이스 마운트 admin.mount_to(app) # 기본 FastAPI 라우트 (선택 사항) @app.get("/") async def read_root(): return {"message": "Welcome to my FastAPI application!"} if __name__ == "__main__": uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)
이 예제를 실행하려면:
- 코드를
main.py
로 저장합니다. uvicorn main:app --reload
를 실행합니다.- 브라우저에서
http://127.0.0.1:8000/admin
으로 이동합니다.Starlette-Admin
로그인 페이지가 표시됩니다. 기본적으로 사전 구성된 사용자이 없으므로 인증을 설정해야 합니다. 개발을 위해Starlette-Admin
은 간단한BasicAuthBackend
를 제공하거나 자체 사용자 지정AuthBackend
와 통합할 수 있습니다.
주요 기능 및 사용자 정의 지점
- 모델 보기: 각 모델이 표시되고 편집되는 방식을 정의합니다.
list_display
,form_fields
,search_fields
,filters
등을 사용자 정의할 수 있습니다. - 인증 및 권한 부여:
Starlette-Admin
은 유연한 인증 시스템을 제공합니다. 내장된 백엔드(예:BasicAuthBackend
)를 사용하거나 기존 사용자 시스템과의 통합을 위해 자체AuthBackend
를 구현할 수 있습니다. - 사용자 지정 페이지: 모델 관리 외에도 대시보드, 보고서 또는 특정 작업을 위한 사용자 지정 관리 페이지를 추가할 수 있습니다.
- 작업: 선택한 레코드에 대해 수행할 수 있는 사용자 지정 작업을 정의합니다(예: "선택한 게시물 게시").
- 파일 업로드: 파일 및 이미지 업로드에 대한 통합 지원.
- WYSIWYG 편집기:
Text
필드에 WYSIWYG 편집기를 쉽게 통합합니다. - 다국어 지원: 국제화를 위한 준비.
애플리케이션 시나리오
Starlette-Admin
은 다음을 위해 이상적입니다.
- FastAPI/Starlette 애플리케이션: 이러한 비동기 프레임워크를 위한 네이티브 관리 솔루션을 제공하는 기본 사용 사례.
- 관리 요구 사항이 있는 마이크로서비스: 마이크로서비스에 간단한 데이터 관리 인터페이스가 필요한 경우
Starlette-Admin
은 해당 마이크로서비스와 함께 신속하게 설정할 수 있습니다. - 내부 도구: 기존 FastAPI/Starlette 백엔드를 활용하는 내부 대시보드 또는 데이터 입력 포털 구축.
- 신속한 프로토타이핑: 개발 초기 단계에서 데이터 입력 및 테스트를 위한 백엔드 UI를 신속하게 생성합니다.
다른 파이썬 프레임워크에 대한 다른 주목할 만한 대안으로는 다음이 있습니다.
- Flask-Admin: Flask 애플리케이션을 위한 성숙하고 인기 있는 관리 인터페이스로, 광범위한 사용자 정의 기능을 제공합니다.
- SQLAlchemy-Admin: 특정 웹 프레임워크에 묶이지 않은 SQLAlchemy를 위한 더 일반적인 솔루션이지만 많은 프레임워크와 통합될 수 있습니다.
결론
Django Admin은 파이썬 웹 개발 생태계에서 골드 스탠더드로 명성을 얻을 만하지만, 진화하는 환경은 대안 탐색을 필요로 합니다. Starlette-Admin
은 FastAPI 및 Starlette의 비동기 세계에 완벽하게 맞춰진 매력적인 현대적인 옵션으로 부상합니다. 현대적인 디자인, 유연성 및 사용자 정의에 대한 강력한 초점은 개발자가 Django 패러다임 외부에서 효율적이고 사용자 친화적인 관리 인터페이스를 만들 수 있도록 합니다. Django Admin을 넘어서는 것은 현대 파이썬 애플리케이션에 대한 가능성의 세계를 열어주며, 개발자가 특정 프레임워크와 프로젝트 요구 사항에 맞는 올바른 도구를 선택할 수 있도록 합니다.