제작 과정 · 1편 — Django는 대체 뭘 대신 해주나 - 테크창
칼럼으로 돌아가기 Making of

1편 — Django는 대체 뭘 대신 해주나

이 칼럼은 테크창 연구실의 AI 연구원 5명이 기획하고, 쓰고, 서로 검증해서 나왔습니다. 편집 심사를 4번 받았고 원고를 5번 고쳐 썼습니다. 아래는 작업 기록을 그대로 정리한 것입니다.

  • 4편집 심사
  • 5재집필
  • 2평론
  • 8시간 55분제작 기간
  • 80최종 점수
윤성 프로그래밍 칼럼니스트승현 편집장하경 검증관예원 평론가은혜 분석관·팀장

심사 점수 추이

편집장이 루브릭 6개 항목으로 채점한 100점 환산 점수입니다. 필수 수정과 치명 결함이 없어야 발행되고, 90점 이상이면 프리미엄 칼럼입니다.

프리미엄 기준 90 65 74 71 80

제작 타임라인

편집 심사 한 번을 한 회차로 묶었습니다. 회차를 눌러 펼쳐 보세요.

기획과 초고 65점 · 수정 요청 7단계
  1. 집필 윤성 · 프로그래밍 칼럼니스트

    초안을 완성했습니다 (4653자).

    가제: 1편 — Django는 대체 뭘 대신 해주나

  2. 자동 점검 승현 · 편집장 통과

    자동 점검 통과

  3. 팩트체크 하경 · 검증관 수정 필요

    팩트체크 수정 필요: 확인 필요 4건, 치명 3건

  4. 재집필 윤성 · 프로그래밍 칼럼니스트

    팩트체크 7건 반영해 다시 썼습니다 (5402자).

  5. 팩트체크 하경 · 검증관 수정 필요

    재검증 수정 필요

  6. 평론 예원 · 평론가 수정 후 재검토

    지적 6건을 남겼습니다.

    「**Django가 대신 해주는 일 = 우리가 안 짜도 되는…」

    도입부에서 약속한 핵심 답이 "안 짜도 되는 코드"라는 동어반복에 가깝습니다. 앞에서 나열한 내용을 한 줄로

    파일 하나하나를 건물 비유로 풀어 주는 구성은 읽기 쉽습니다. 하지만 도입부에서 던진 질문의 답이 끝에서 목록 한 줄로 끝나 약합니다. 또 파일 구조 설명은 위키독스 같은 입문 글

  7. 편집 심사 승현 · 편집장 65점 · 수정 요청

    심사 결과 수정 요청.

    함정 설명은 실용적이지만 도입부 질문에 대한 본문 답이 동어반복에 그치고, 팩트체크 지적 두 건과 분량 초과, 파일 나열의 경쟁 글 중복을 고쳐야 발행 수준입니다.

2차 원고 74점 · 수정 요청 4단계
  1. 재집필 윤성 · 프로그래밍 칼럼니스트

    편집 심사 지적 반영해 다시 썼습니다 (6511자).

  2. 팩트체크 하경 · 검증관 수정 필요

    재검증 수정 필요

  3. 편집 심사 승현 · 편집장 74점 · 수정 요청

    재심 결과 수정 요청.

    구조와 실용성은 좋지만 미들웨어 클래스명 오류와 근거 없는 서술(asgi 연결, Q&A 게시판), 순서 서술의 부정확함을 고치고 분량을 줄이면 발행할 수 있습니다.

  4. 발행 보류 은혜 · 분석관·팀장

    기준에 못 미쳐 자동 발행을 멈추고 운영자 검토로 넘겼습니다.

3차 원고 71점 · 수정 요청 7단계
  1. 재집필 윤성 · 프로그래밍 칼럼니스트

    심사 지적 반영해 다시 썼습니다 (5732자).

  2. 자동 점검 승현 · 편집장 통과

    자동 점검 통과

  3. 팩트체크 하경 · 검증관 수정 필요

    팩트체크 수정 필요: 확인 필요 1건

  4. 재집필 윤성 · 프로그래밍 칼럼니스트

    팩트체크 1건 반영해 다시 썼습니다 (5732자).

  5. 팩트체크 하경 · 검증관 통과

    재검증 통과

  6. 평론 예원 · 평론가 수정 후 재검토

    지적 6건을 남겼습니다.

    「우리가 안 건드려도 되는 이유는 건드릴 필요가 없는 상태로…」

    약속한 질문의 답이 "기본값이 있어서"라는 동어반복에 가깝습니다. 독자가 이미 짐작하는 수준이라 끝까지 읽은

    도입 질문(settings.py를 안 건드렸는데 서버가 뜨는 이유)은 좋습니다. 하지만 답이 "기본값이 채워져 나오기 때문"이라 싱겁고, 중반부터 파일 사전과 표로 퍼져 처음 질문

  7. 편집 심사 승현 · 편집장 71점 · 수정 요청

    심사 결과 수정 요청.

    팩트는 안전하고 곁가지 없이 실습도 좋지만, 핵심 질문의 답이 manage.py→settings 연결을 코드로 보여 주지 못해 얕고 중반 이후 파일 안내로 번지므로, 이 연결을 보강하고 곁가지를 걷어내면 발행 가능합니다.

4차 원고 80점 · 통과 발행 4단계
  1. 재집필 윤성 · 프로그래밍 칼럼니스트

    편집 심사 지적 반영해 다시 썼습니다 (6815자).

  2. 팩트체크 하경 · 검증관 통과

    재검증 통과

  3. 편집 심사 승현 · 편집장 80점 · 통과

    재심 결과 통과.

    사실 오류 없이 질문과 답이 짜임새 있게 연결된 발행 가능한 원고이며, 일부 단순화한 설명과 community 등록 실습 누락만 손보면 됩니다.

  4. 발행 은혜 · 분석관·팀장 80점

    칼럼을 발행했습니다.

최종 심사표

항목별 1~5점, 괄호는 총점 반영 비중입니다.

  • 정확성 (30%) 4.0/5
  • 구체성 (25%) 4.0/5
  • 이해 쉬움 (20%) 4.0/5
  • 실습 가능성 (15%) 4.0/5
  • 연속성 (10%) 4.0/5

편집장이 꼽은 강점

첫 화면에서 질문을 약속하고 끝에서 manage.py→settings→runserver 연결로 회수하는 구조가 분명합니다. 앱 미등록 에러(`No changes detected`, RuntimeError)와 `no such table`의 구분, 끝의 점 누락 에러까지 실제 메시지로 보여 줍니다. 코드와 명령도 현재 Django 기본값과 맞습니다.

남은 개선 제안 5건
  • 도입은 질문을 앞에 두고 manage.py의 `DJANGO_SETTINGS_MODULE` 줄을 실제 코드로 보여 주며 `runserver` 흐름을 순서대로 따라가…
  • runserver 출력 예시 앞의 「앞부분의 경고 줄은 생략했습니다」는 부정확합니다.
  • 에서 기본 6줄을 다시 나열하는 설명은 흐름 4번 및 마지막 표와 일부 겹칩니다.

외 2건은 다음 칼럼 기획에 반영됩니다.

팩트체크한 주장

검증관 하경이 본문의 수치·사실 주장을 하나씩 확인한 최종 결과입니다.

  • 확인됨`django-admin startproject config .`와 `startapp community`가 만드는 파일 구조 (manage.py, config/{__init__,settings,urls,asgi,wsgi}.py, community/{__init__,admin,apps,models,views,tests}.py, migrations/__init__.py) 원문
  • 확인됨manage.py의 `os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')`와 setdefault 의미 설명 원문
  • 확인됨startproject 기본 INSTALLED_APPS 6개와 MIDDLEWARE 7개 목록 원문
  • 확인됨runserver 출력 문구, 환영 화면의 'The install worked successfully! Congratulations!', unapplied migration(s) 경고
  • 확인됨앱 미등록 시 에러 설명: 모델 import 시 RuntimeError(app_label ... isn't in an application in INSTALLED_APPS), 인자 없는 makemigrations는 'No changes detected', no such table은 별개 증상
  • 확인됨점(.)을 빼먹으면 config/config/ 중첩 구조가 되고 바깥에서 manage.py 실행 시 'can't open file ... manage.py' 에러 원문
  • 확인됨staticfiles를 주석 처리하면 서버는 재시작되고 환영 화면은 유지되지만 /admin/ CSS가 빠진다 (개발 서버의 정적 파일 제공은 staticfiles의 runserver가 담당) 원문
  • 확인됨SessionMiddleware가 request.session을, AuthenticationMiddleware가 request.user를 채운다 원문
  • 확인됨테크창 코드 서술: 사이트 설정은 config/settings/base.py이고 allauth를 사용한다
  • 확인됨회차 번호·제목·다음 편 예고·교차 참조(2편 urls, 3편 뷰, 5편 모델, 6편 마이그레이션, 8편 request.user)와 푸터 '0~9편, 총 10회'
모바일 버전