코드 위의 하루 (A Day on the Code)

🛠 Docverse – 데이터베이스 구축 과정 정리 (백엔드 포트폴리오) 본문

🗂️ Docverse

🛠 Docverse – 데이터베이스 구축 과정 정리 (백엔드 포트폴리오)

code.with.siyeon 2025. 5. 11. 19:55

1. 데이터베이스 설계 목적

Docverse는 팀 프로젝트를 위한 협업 플랫폼으로,
사용자, 그룹, 파일, 댓글, 알림 등 다양한 정보가 상호 연결되며 저장되어야 합니다.
이를 위해 **정규화된 관계형 DB(MySQL)**를 사용하여 구조화된 저장소를 구축했습니다.


2. ERD 설계 (기초)

초기 설계 단계에서 설정한 핵심 테이블

  • User: 사용자 정보
  • Group: 팀/조직 단위
  • File: 업로드된 문서
  • Comment: 파일에 대한 피드백
  • Notification: 알림 정보

📌 ERD

 


3. 모델 정의 및 구현

📁 users/models.py

from django.contrib.auth.models import AbstractUser
from django.db import models

class User(AbstractUser):
    email = models.EmailField(unique=True)
    nickname = models.CharField(max_length=50, blank=True)
    profile_image = models.ImageField(upload_to='profiles/', blank=True, null=True)

AbstractUser를 상속받아 기본 Django 유저 모델 커스터마이징
이메일은 중복 방지를 위해 unique=True 설정

 


4. MySQL과 연결

📁 config/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'docverse_db',
        'USER': 'root',
        'PASSWORD': '비밀번호',
        'HOST': 'localhost',
        'PORT': '3307',
    }
}

❗ 초기엔 PORT=3006으로 설정했지만, 연결 실패 에러 발생
👉 MySQL Workbench에서 확인해보니 이미 사용 중인 포트였음
→ 3307로 변경 후 연결 성공

⚙️ 기타 설정 파일

  • .env에서 DB 환경변수 분리 가능
  • pymysql 모듈 설정: __init__.py에 아래 코드 추가
import pymysql
pymysql.install_as_MySQLdb()

5. 마이그레이션 및 생성 결과

$ python manage.py makemigrations
$ python manage.py migrate

✅ 정상 작동 시 users_user 테이블 포함 다양한 테이블이 생성됨

📸 MySQL Table 생성 스크린샷 첨부 위치


6. 트러블슈팅 및 해결 과정

DB 연결 실패 포트 충돌 (3006) settings.py와 MySQL 포트 → 3307으로 변경
pymysql 오류 모듈 미설치 or 오타 pymysql.install_as_MySQLdb() 추가 확인
Table 미생성 앱 등록 누락 INSTALLED_APPS에 앱 누락 → 등록 후 재마이그레이션
 

7. 회고 및 적용 가능성

이번 DB 구축 경험을 통해 Django의 ORM 작동 방식과
MySQL 설정과 연동 과정의 중요성을 깊이 체감했습니다.
실무에서도 .env, docker-compose, ERD 설계 → 모델 구현 흐름을
재사용 가능한 템플릿으로 정리해둘 수 있겠다고 느꼈습니다.