Skip to content

CMDF/back

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

145 Commits
 
 
 
 
 
 
 
 

Repository files navigation

DOCent Backend (Django)

CAU 캡스톤디자인 프로젝트의 Django 백엔드 레포지토리입니다.

이 백엔드는 사용자가 업로드한 PDF를 S3에 저장하고, S3 Presigned URL을 생성해 외부 OCR 서버에 전달하여 분석 결과(페이지 텍스트/그림/매칭 텍스트)를 DB에 저장합니다. 저장된 데이터는 하이라이트/그림 조회 및 챗봇 질의에 활용됩니다.

Tech Spec

BE:

Django Django%20REST%20Framework

DB:

MySQL

Dev-Ops

AWS%20EC2 AWS%20RDS AWS%20S3 Swagger

API 문서

  • Swagger UI: /swagger/
  • ReDoc: /redoc/

프로젝트 구조

루트 디렉터리는 project/ 기준으로 작성했습니다.

project/
	manage.py
	db.sqlite3
	pyproject.toml
	secrets.json

	config/                 # Django project 설정(라우팅/미들웨어/설정)
		settings.py
		urls.py
		asgi.py
		wsgi.py
		middleware.py

	accounts/               # 사용자/인증 (Google 로그인, JWT, 프로필)
		models.py
		urls.py
		views.py
		serializers.py
		swagger.py

	pdf_documents/          # PDF 업로드(S3), OCR 요청/저장, 페이지/텍스트 조회
		models.py
		urls.py
		views.py
		serializers.py

	pdf_figures/            # OCR 결과로 저장된 figure 조회
		models.py
		urls.py
		views.py
		serializers.py

	highlights/             # 태그/하이라이트 CRUD
		models.py
		urls.py
		views.py
		serializers.py

	chatbots/               # 본문 참조 기반 질문 응답(Stateless)
		urls.py
		views.py
		serializers.py

logs/                     # API 로깅 등(운영 보조)

주요 기능 및 URL

아래 경로들은 [project/config/urls.py]에서 앱 단위로 라우팅됩니다.

1) PDF 업로드 → OCR 서버 연동(핵심)

OCR 연동은 단순 CRUD가 아니라, S3 ↔ OCR 서버 통신 및 결과 정규화/저장을 수행하는 것이 핵심입니다.

처리 흐름

  1. 사용자가 PDF 업로드 요청
  2. 서버가 PDF를 S3에 업로드하고, originPDF(메타데이터 + s3_key)를 DB에 저장
  3. OCR 요청 시 S3 Presigned URL을 생성해 OCR 서버로 전달
  4. OCR 서버 응답(pages, figures, matches)을 파싱하여 DB에 저장
  5. 이후 figure/매칭 텍스트/하이라이트/챗봇 기능에서 재사용

Endpoints

  • POST /pdf_documents/upload/

    • PDF 파일을 S3에 업로드하고 DB에 메타데이터를 저장합니다.
    • multipart/form-data (title, file) + JWT 인증 필요
  • POST /pdf_documents/pdfs/{pdf_id}/ocr/

    • S3 Presigned URL을 생성한 뒤 OCR 서버로 요청을 보내고, 결과를 DB에 저장합니다.
    • 저장 대상: PDFpage(pages), PDFfigure(figures), MatchedText(matches)
  • GET /pdf_documents/pdfs/{pdf_id}/pages/

    • OCR 결과로 저장된 페이지(PDFpage) 목록을 조회합니다.
  • GET /pdf_documents/pdfs/{pdf_id}/matched-texts/

    • figure와 연결된 매칭 텍스트(MatchedText) 목록을 조회합니다.
  • GET /pdf_documents/pdfs/{pdf_id}

    • PDF 메타데이터(originPDF)를 조회합니다.
  • GET /pdf_documents/all/

    • 로그인 유저가 소유한 PDF 목록을 조회합니다.
  • DELETE /pdf_documents/delete/{id}/

    • S3 객체 및 DB 레코드를 삭제합니다.

2) Figure 조회 (OCR 결과 기반)

  • GET /pdf_figures/figures/{pdf_id}/
    • 특정 PDF에 속한 figure 목록을 조회합니다.
    • OCR 처리 이후(figure 저장 이후) 사용되는 조회 API입니다.

3) 하이라이트/태그

  • GET|POST /highlights/tags/
    • Tag 조회/생성 (?pdf_id=로 필터 가능)
  • PUT|DELETE /highlights/tags/{pk}/
    • Tag 수정/삭제
  • POST /highlights/highlight/
    • Highlight 생성
  • PUT|DELETE /highlights/highlight/{pk}/
    • Highlight 수정/삭제
  • GET /highlights/highlights/{pdf_id}/
    • 특정 PDF에 연결된 Highlight 목록 조회

4) 챗봇 (Stateless)

  • POST /chatbots/ask/
    • 질문(question)과 함께 참고자료(figure_ids, highlight_ids, selected_texts)를 받아 답변을 생성합니다.
    • 서버에 대화 히스토리를 저장하지 않는 Stateless 형태이며, OCR 결과(MatchedText)와 하이라이트를 문맥으로 구성해 모델 호출에 사용합니다.

5) 인증/계정

  • POST /accounts/google/login/
    • Google ID Token 기반 로그인/회원가입 및 JWT 발급
  • POST /accounts/logout/
    • refresh 토큰 블랙리스트 처리
  • POST /accounts/token/refresh/, POST /accounts/token/verify/
    • JWT 갱신/검증
  • GET|PUT|PATCH /accounts/me/
    • 내 프로필 조회/수정

배포 환경(요약)

  • AWS EC2 (Ubuntu 22.04)
  • AWS RDS (MySQL)
  • AWS S3 (PDF 파일 저장)

secrets.json 설정 (중요)

본 프로젝트는 project/config/settings.py에서 secrets.json을 읽어 런타임 설정을 구성합니다. 즉, DB 접속 정보, AWS 키, OCR 서버 주소, 외부 API 키 등 민감 정보는 secrets.json에 저장되어야 합니다.

1) secrets.json 파일 위치

  • 위치: project/secrets.json

2) secrets.json 예시 (템플릿)

아래는 키 이름(스키마) 참고용 예시입니다. 실제 값은 환경에 맞게 채워주세요.

{
  "SECRET_KEY": "<django-secret-key>",

  "RDS_HOST": "<rds-endpoint>",
  "RDS_PORT": "<rds-port-number>",
  "RDS_DB_NAME": "<db-name>",
  "RDS_USERNAME": "<db-username>",
  "RDS_PASSWORD": "<db-password>",

  "GOOGLE_CLIENT_ID_WEB": "<google-oauth-client-id>",
  "GOOGLE_CLIENT_SECRET_WEB": "<google-oauth-client-secret>",

  "AWS_ACCESS_KEY_ID": "<aws-access-key-id>",
  "AWS_SECRET_ACCESS_KEY": "<aws-secret-access-key>",
  "AWS_STORAGE_BUCKET_NAME": "<s3-bucket-name>",

  "OCR_SERVER": "https://<ocr-server-host>/...",
  "UPSTAGE_API_KEY": "<upstage-api-key>"
}

3) Django SECRET_KEY 생성 방법

가상환경 활성화 후, 아래 명령으로 안전한 키를 생성할 수 있습니다.

python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"

4) 보안 주의사항

  • secrets.json은 민감 정보가 포함되므로 Git에 커밋하지 않는 것을 권장합니다. (예: .gitignore에 추가)
  • 운영 환경에서는 가능하면 AWS Parameter Store/Secrets Manager 또는 환경변수 기반으로 분리하는 구성이 안전합니다.

ERD

ERD

Architecture

Architecture

About

2025년 2학기 CAU 캡스톤디자인 백엔드 레포지토리 입니다.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages