코드 리팩토링 및 README 수정

This commit is contained in:
peregr1nus
2025-12-12 16:43:57 +09:00
parent 6093947d90
commit 2a89d541b4
3 changed files with 100 additions and 33 deletions

125
README.md
View File

@@ -4,13 +4,24 @@
## 주요 기능
1. **설문응답자 기본 정보 입력** - 이름, 생년월일, 연락처, 출신 이단, 재적 기간
2. **기독교대한감리회 신앙고백 교리 점검** - 삼위일체, 예수 그리스도, 성경, 구원 등
3. **이단 일반 교리 점검** - 추가 계시, 지도자 신격화, 구원관, 세계관
4. **출신 이단별 교리 점검** - 각 이단별 특정 교리 점검
5. **간증문 입력** - 탈퇴 과정과 소감 작성
6. **워드 문서 자동 생성** - 응답 내용을 워드 템플릿에 자동 입력
7. **구글 드라이브 자동 업로드** - 생성된 문서를 구글 드라이브에 업로드
1. **접근 인증** - 인증키를 통한 접근 제어 (링크를 받은 사람만 사용 가능)
2. **설문응답자 기본 정보 입력** - 이름, 교구, 이단교단 (기타 선택 시 직접 입력)
3. **기독교대한감리회 신앙고백 교리 점검** - 8개 문항 (예/아니오/모르겠습니다)
4. **이단 일반 교리 점검** - 17개 문항 (예/아니오/모르겠습니다, 7번은 기타의견란 작성)
5. **이단 상세 점검** - 선택한 이단에 따라 다른 문항 (예/아니오/모르겠습니다, 일부는 기타의견란 작성)
6. **간증문 입력** - 상담 소감 작성
7. **워드 문서 자동 생성** - 응답 내용을 워드 문서로 자동 생성 (표 형식)
8. **구글 드라이브 자동 업로드** - 생성된 문서를 구글 드라이브에 업로드 (선택사항)
## 설문 흐름
1. **인증** - 인증키 입력
2. **1단계: 기본 정보** - 이름, 교구, 이단교단 입력
3. **2단계: 감리교 신앙고백** - 8개 문항
4. **3단계: 이단 일반 점검** - 17개 문항
5. **4단계: 이단 상세 점검** - 이단별 문항 (기타 선택 시 건너뜀)
6. **5단계: 간증문** - 상담 소감 작성
7. **완료** - 제출 완료 및 로그아웃
## 설치 방법
@@ -38,7 +49,7 @@ GOOGLE_DRIVE_FOLDER_ID=your-google-drive-folder-id
- 사용자는 이 인증키를 입력해야만 설문에 접근할 수 있습니다.
- `.env` 파일에서 `ACCESS_KEY`를 설정하면 기본값을 덮어씁니다.
### 3. 구글 드라이브 API 설정
### 3. 구글 드라이브 API 설정 (선택사항)
1. [Google Cloud Console](https://console.cloud.google.com/)에서 프로젝트 생성
2. Google Drive API 활성화
@@ -46,17 +57,7 @@ GOOGLE_DRIVE_FOLDER_ID=your-google-drive-folder-id
4. `credentials.json` 파일을 프로젝트 루트에 저장
5. 구글 드라이브에 업로드할 폴더를 생성하고 폴더 ID를 `.env`에 설정
### 4. 워드 템플릿 준비 (선택사항)
`word_templates/` 디렉토리에 각 이단별 템플릿 파일을 준비할 수 있습니다:
- `신천지_template.docx`
- `구원파_template.docx`
- `하나님의교회_template.docx`
- `통일교_template.docx`
- `기타_template.docx`
- `default_template.docx` (기본 템플릿)
템플릿 파일이 없으면 자동으로 기본 템플릿이 생성됩니다.
**참고:** 구글 드라이브 설정이 없어도 서비스는 정상 작동하며, 로컬에 파일이 저장됩니다.
## 실행 방법
@@ -71,13 +72,15 @@ python app.py
```
.
├── app.py # Flask 메인 애플리케이션
├── config.py # 설정 파일
├── config.py # 설정 파일 (교구 목록, 이단 목록, 이단별 문항)
├── requirements.txt # Python 의존성
├── .env # 환경 변수 (생성 필요)
├── credentials.json # 구글 드라이브 인증 파일 (생성 필요)
├── token.json # 구글 드라이브 토큰 (자동 생성)
├── credentials.json # 구글 드라이브 인증 파일 (선택사항)
├── token.json # 구글 드라이브 토큰 (자동 생성, 선택사항)
├── templates/ # HTML 템플릿
│ ├── base.html
│ ├── auth.html
│ ├── index.html
│ ├── step1.html
│ ├── step2.html
│ ├── step3.html
@@ -87,13 +90,59 @@ python app.py
├── static/ # 정적 파일
│ ├── style.css
│ └── script.js
├── word_templates/ # 워드 템플릿 파일
├── word_templates/ # 워드 템플릿 파일 (선택사항)
├── output/ # 생성된 문서 저장 폴더 (자동 생성)
└── utils/ # 유틸리티 모듈
├── word_processor.py
└── google_drive.py
```
## 워드 문서 구조
생성되는 워드 문서는 다음과 같은 구조를 가집니다:
1. **문서 상단**
- 제목: "이단 탈퇴자 교리점검표"
- 기본 정보: 이름 | 교구 | 이단교단
2. **별첨 목록**
- 별첨1: 감리교 신앙고백서 확인점검
- 별첨2: 이단 일반 점검
- 별첨3: 이단 상세 점검
- 별첨4: 간증문
3. **[별첨1] 감리교 신앙고백서 확인점검**
- 표 형식 (문항 | 응답)
- 8개 문항
4. **[별첨2] 이단 일반 점검**
- 표 형식 (문항 | 응답)
- 17개 문항
- 기타의견 (7번 문항 답변 포함)
5. **[별첨3] 이단 상세 점검** (기타 선택 시 생략)
- 표 형식 (문항 | 응답)
- 선택한 이단에 따라 다른 문항
- 기타의견 (일부 문항 답변 포함)
6. **[별첨4] 간증문**
- 간증문 내용
## 지원하는 이단
- 신천지 (17개 문항)
- 하나님의교회 (9개 문항)
- 다락방 (12개 문항)
- 구원파 (박옥수,이요한,유병언) (13개 문항)
- JMS (14개 문항, 3번은 기타의견란)
- 성락교회 (베뢰아) (10개 문항, 8번은 기타의견란)
- 통일교 (8개 문항)
- 몰몬교 (12개 문항)
- 안식교 (12개 문항)
- 사랑하는교회 (8개 문항)
- 예수중심교회 (이초석) (8개 문항)
- 기타 (위 선택지에 없을 경우) - 직접 입력, 상세 점검 생략
## 리눅스 서버 배포
### 1. Gunicorn 설치
@@ -149,6 +198,22 @@ server {
}
```
## 주요 기능 상세
### 세션 관리
- 각 단계의 입력 내용은 세션에 저장됩니다
- 뒤로가기 시 이전 입력 내용이 자동으로 채워집니다
- 제출 완료 후 complete 페이지에서 로그아웃 버튼으로 세션 삭제
### 파일 관리
- 구글 드라이브 업로드 성공 시: 로컬 파일 자동 삭제
- 구글 드라이브 업로드 실패 시: 로컬 파일 유지 (`output/` 폴더)
- 구글 드라이브 미설정 시: 로컬 파일 유지
### 검증 기능
- 기타의견란 필수 문항 검증 (step3의 7번, step4의 일부 문항)
- 클라이언트 및 서버 양쪽에서 검증
## 주의사항
- 프로덕션 환경에서는 `SECRET_KEY``ACCESS_KEY`를 안전하게 설정하세요
@@ -156,15 +221,23 @@ server {
- 구글 드라이브 API 인증 정보는 절대 공개하지 마세요
- `output/` 디렉토리의 파일은 정기적으로 정리하세요
- HTTPS를 사용하여 데이터 보안을 강화하세요
- 서버 환경에서는 구글 드라이브 인증을 로컬에서 먼저 완료하여 `token.json`을 생성해야 합니다
## 인증키 관리
- 기본 인증키: `Kx9mP2vQ7nR4tY8wZ3bC6hJ1fL5dN0sA8uE2iM7o`
- 인증키는 `.env` 파일의 `ACCESS_KEY`로 변경할 수 있습니다
- 사용자는 서비스 접속 시 인증 페이지에서 인증키를 입력해야 합니다
- 인증 후 세션에 저장되며, 로그아웃 시 인증제됩니다
- 사용자는 서비스 접속 시 인증 페이지(`/auth`)에서 인증키를 입력해야 합니다
- 인증 후 세션에 저장되며, 로그아웃 시 세션제됩니다
## 로깅
서비스는 상세한 로그를 출력합니다:
- 구글 드라이브 초기화 상태
- 구글 드라이브 업로드 시도/성공/실패
- 파일 삭제 상태
- 세션 관리 상태
## 라이선스
이 프로젝트는 기독교대한감리회를 위한 내부 사용 목적으로 제작되었습니다.

4
app.py
View File

@@ -222,7 +222,6 @@ def step5():
output_path = word_processor.generate_document(all_data, cult_name, cult_questions)
# 구글 드라이브 업로드
upload_success = False
if drive_uploader and app.config['GOOGLE_DRIVE_FOLDER_ID']:
upload_filename = f"교리점검표_{all_data['basic_info'].get('name', '무명')}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.docx"
logger.info("구글 드라이브 업로드 시도 | file=%s, folder=%s", upload_filename, app.config['GOOGLE_DRIVE_FOLDER_ID'])
@@ -233,7 +232,6 @@ def step5():
app.config['GOOGLE_DRIVE_FOLDER_ID']
)
logger.info("구글 드라이브 업로드 성공 | file_id=%s", file_id)
upload_success = True
# 업로드 성공 시 로컬 파일 삭제
try:
os.remove(output_path)
@@ -269,8 +267,6 @@ def step5():
'success': False,
'message': f'오류가 발생했습니다: {str(e)}'
}), 500
return render_template('step5.html')
@app.route('/complete')
@require_auth

View File

@@ -1,8 +1,6 @@
from docx import Document
from docx.shared import Pt, RGBColor
from docx.shared import Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import os
from datetime import datetime