오늘의 TIL (Today I Learned)     


1. 실무에서 모델을 만드는 방법

  • 스키마 정의하기
    • 스키마란 데이터베이스 설계 도면으로, 어떤 데이터가 저장되고 테이블 간 관계가 어떻게 되는지를 정의한다.
    • 스키마는 **ERD(Entity-Relationship Diagram)**를 통해 시각화하며 설계할 수 있다.
    • ERD 예시와 함께 각 테이블(특강, 튜터, 수강생)의 구조를 파악했다.
    • 특강 테이블에서는 강의 ID, 수강생 ID, 수강일을, 튜터 테이블에서는 튜터 ID와 특강 ID를, 수강생 테이블에서는 수강생 ID와 이름을 다뤘다.
    • 특히 수강생 테이블의 이름 데이터는 NOT NULL로 설정하여 항상 값이 존재하도록 설계했다.

2. Django에서 모델 구현하기

  • Django의 models.py 파일에서 테이블을 정의했다.
    • Student 모델: 수강생 정보를 저장.
    • SpecialLecture 모델: 특강 정보를 저장하며, 외래 키(ForeignKey)로 수강생 정보를 참조.
    • Tutor 모델: 튜터 정보를 저장하며, 외래 키를 통해 특강 정보를 참조.
  • 모든 모델에 __str__() 메서드를 정의하여, 객체를 출력할 때 의미 있는 정보를 볼 수 있도록 설정.

3. 데이터베이스 마이그레이션

  • 모델 정의 후, 데이터베이스와 동기화하기 위해 아래 명령어를 실행:
    • python manage.py makemigrations: 모델 변경사항을 마이그레이션 파일로 생성.
    • python manage.py migrate: 생성된 마이그레이션 파일을 데이터베이스에 반영.
  • 데이터베이스 변경이 필요할 때마다 이 과정을 반복해야 함을 배움.     

4. View 구현

  • Django의 views.py에서 비즈니스 로직을 작성.
    • 예시로 실시간 서버 시간을 표시하는 기능을 구현:
      from django.shortcuts import render
      from datetime import datetime
      
      def time_view(request):
          return render(request, 'time_template.html', {'server_time': datetime.now()})
      

5. Template 작성

  • 사용자 화면(UI)을 구성하는 HTML 파일을 작성.
  • 서버 시간을 초기값으로 표시하고, JavaScript를 이용해 클라이언트에서 실시간 시간을 업데이트하도록 구현.
    • JavaScript 코드:
      function updateClock() {
          const now = new Date();
          const timeString = now.toLocaleTimeString();
          document.getElementById('realTime').textContent = timeString;
      }
      
      setInterval(updateClock, 1000);
      updateClock();
      

6. 새로 알게 된 점 및 느낀 점

  • 데이터베이스 설계를 시각화하는 ERD의 중요성을 체감. 이를 통해 테이블 간 관계를 명확히 정의할 수 있었다.
  • Django에서 모델을 정의하고 마이그레이션을 통해 데이터베이스와 동기화하는 과정이 체계적이라는 점이 흥미로웠다.
  • 외래 키와 related_name 옵션을 사용하면 테이블 간 참조 관계를 효과적으로 관리할 수 있음을 배움.
  • 실시간 시간을 표시하는 기능을 구현하며, Django와 JavaScript의 협업 방식을 이해함.
  • 앞으로 더 복잡한 비즈니스 로직을 처리하고, UI를 구성할 때도 Django와의 연결을 더 잘 활용할 수 있을 것 같다.

7. 앞으로의 개선 방향

  • ERD 설계에서 더 복잡한 관계와 제약 조건을 고려해보기.
  • 모델 구현 시 verbose_name 등 옵션을 추가해 가독성을 높이고, 필드의 세부 설정(예: 유효성 검사)을 더 신경 써야겠다고 느꼈다.
  • JavaScript의 활용도를 높여 Django와의 상호작용을 강화할 계획.

 

+ Recent posts