Plain – 사람과 AI 에이전트 모두를 위해 설계된 Python 풀스택 웹 프레임워크
Show HN: Plain – The full-stack Python framework designed for humans and agents
TL;DR Highlight
Django 포크 기반 Python 웹 프레임워크가 타입 명시, 단일 관습, 에이전트 친화적 구조로 재설계되어 LLM의 코드 가독성과 수정성을 향상시킴
Who Should Read
LLM(Claude, Codex 등)을 활용한 바이브코딩이나 AI 에이전트 기반 개발을 시도 중인 Python 웹 개발자. 특히 Django의 복잡한 레거시에 불만을 느끼고 있는 개발자.
Core Mechanics
- Plain은 Django를 오랜 기간 실제 운영하면서 갈고닦은 포크로, Django의 핵심 구조는 유지하되 수년간 현장에서 발견한 불필요한 복잡성과 rough edge들을 정리한 프레임워크다.
- 가장 큰 특징은 Postgres 전용 모델 설계인데, 타입 어노테이션을 활용해 `email: str = types.EmailField()` 식으로 명시적으로 선언하는 방식이라 코드를 한 번만 읽어도 구조가 바로 파악된다.
- '인간에게 좋은 코드가 AI에게도 좋다'는 철학으로, 명시적(explicit), 타입 지정(typed), 예측 가능(predictable)한 코드 스타일을 채택해 LLM이 코드를 추론할 때 틀릴 확률을 줄인다.
- 시작 방법 자체가 에이전트 친화적이다. `claude "$(curl -sSf https://plainframework.com/start.md)"` 명령어 하나로 Claude 에이전트에게 프로젝트 셋업을 맡기거나, `uvx plain-start my-app`으로 직접 실행할 수 있다.
- plain-admin, plain-auth, plain-jobs, plain-oauth, plain-tailwind 등 풀스택에 필요한 패키지들이 모노레포 구조로 함께 제공되어, 에이전트가 선택지 없이 정해진 방식으로 기능을 붙일 수 있다.
- 각 모듈 내부에 상세한 README와 예제가 포함되어 있어, 에이전트가 외부 문서를 검색하지 않고도 코드베이스 안에서 컨텍스트를 얻을 수 있도록 설계되어 있다.
- Django의 Class-based View 대신 더 단순한 View 구조를 채택해, 에이전트가 상속 체계를 역추적하며 소스를 파고들 필요가 없게 만들었다.
- CLAUDE.md 파일이 레포 루트에 포함되어 있어 Claude 에이전트가 프로젝트 컨텍스트를 즉시 파악할 수 있도록 지원한다.
Evidence
- '에이전트를 위해 새로운 걸 만드는 건 역효과'라는 비판이 있었다. LLM의 훈련 데이터에 없는 새 프레임워크는 에이전트가 Django보다 못 쓸 수밖에 없다는 논리인데, 이에 대해 '에이전트는 마크다운 문서를 읽고 처음 보는 CLI도 정확히 호출했다, 중요한 건 훈련 데이터가 아니라 인터페이스가 예측 가능하냐는 것'이라는 반론이 나왔다.
- Django의 유연성이 오히려 에이전트에게 독이라는 의견이 공감을 얻었다. 'Django는 같은 걸 6가지 방법으로 할 수 있는데, Plain이 하나만 강제한다면 에이전트가 추론해야 할 표면적이 줄어드는 것이라 진짜 유용하다'는 분석이다.
- 'Django 코드베이스를 훔쳐서 이름만 바꾸고 AI 마케팅 붙인 것'이라는 신랄한 비판도 있었지만, 실제로 Plain을 오랫동안 지켜봐온 사용자들은 'vibe-coding이 유행하기 훨씬 전부터 개발해온 것이고, 설계 결정들이 탄탄하다'며 옹호했다.
- Class-based View 방식에 대한 비판이 있었다. 에이전트 친화적 프레임워크라고 하면서 간접 참조(indirection) 레이어가 있는 CBV를 쓰면, 에이전트가 기본 클래스를 반복해서 읽어야 해서 오히려 역효과라는 지적이다.
- 모델 선언 방식(타입 어노테이션 + 필드 할당)이 strawberry GraphQL 방식과 유사하다는 댓글이 있었고, 이 스타일이 개발 UX 측면에서 훨씬 낫다는 반응이 있었다. '규칙 기반 관습으로 리뷰할 코드 줄 수를 최소화하는 것이 에이전트 시대에 지속 가능한 프로젝트를 만드는 핵심'이라는 의견도 공감을 얻었다.
How to Apply
- Claude나 Codex 같은 AI 에이전트와 함께 새 프로젝트를 시작할 계획이라면, `mkdir my-app && cd my-app && claude "$(curl -sSf https://plainframework.com/start.md)"` 명령어로 에이전트에게 초기 셋업을 맡겨볼 수 있다. 에이전트가 plain-start 스크립트의 지시를 따라 프로젝트 구조를 자동으로 잡아준다.
- Django 기반 사이드 프로젝트를 AI 보조 코딩으로 빠르게 만들고 싶은 경우, Plain의 단일 관습 구조 덕분에 에이전트가 '어떤 방식으로 할지' 고민 없이 코드를 생성하고 인간이 리뷰할 코드 양도 줄어드는 효과를 얻을 수 있다.
- 기존 Django 프로젝트에서 에이전트 도입을 검토 중이라면, Plain 레포의 각 모듈별 README 구조와 CLAUDE.md 패턴을 참고해 기존 프로젝트에도 동일하게 에이전트용 컨텍스트 문서를 추가하는 방식을 먼저 적용해볼 수 있다.
- Postgres를 DB로 쓰는 신규 Python 웹앱을 만드는 팀이라면, `uvx plain-start my-app`으로 시작해 plain-admin, plain-auth, plain-jobs 같은 내장 패키지를 조합해 풀스택 앱을 빠르게 구성할 수 있다. 선택지가 하나로 고정되어 있어 팀 코드 리뷰 비용도 줄어든다.
Code Example
# 에이전트로 프로젝트 시작
mkdir my-app && cd my-app && claude "$(curl -sSf https://plainframework.com/start.md)"
# 또는 uv로 직접 시작
uvx plain-start my-app
# Plain의 모델 선언 방식 (타입 어노테이션 + 필드)
# app/users/models.py
from plain import postgres
from plain.postgres import types
from plain.postgres.functions import Now
from plain.passwords.models import PasswordField
@postgres.register_model
class User(postgres.Model):
email: str = types.EmailField()
password: str = PasswordField()
display_name: str = types.CharField(max_length=100)
is_admin: bool = types.BooleanField(default=False)
created_at: datetime = types.DateTimeField(default=Now)Terminology
관련 논문
프로덕션 AI 에이전트를 GPT-5.6으로 마이그레이션: 2.2배 빠르고 27% 저렴
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
xAI Grok Build CLI가 xAI 서버로 전송하는 데이터: 네트워크 레벨 분석
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
중요할 때 기억하라: Long-Horizon 에이전트를 위한 Proactive Memory Agent
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: 깊고 넓은 웹 검색을 위한 재귀적 Multi-Agent Orchestration
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
웹 앱을 리버스 엔지니어링해서 AI Agent 도구로 자동 변환하기
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
FableCut – AI 에이전트가 조작할 수 있는 브라우저 기반 비디오 에디터 (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.