[엉박사] 1.1 데이터베이스 설계

impala·2023년 1월 12일
0
post-thumbnail

1.1 데이터베이스 설계

주제를 선정하고 가장 먼저 시작한 작업은 데이터베이스를 설계하는 일이었다.

주제 선정 단계에서 전체적인 UI의 모양을 잡고, 서비스의 주요 기능을 정한 뒤 실제 개발에 들어가기 위해 DB에 필요한 테이블, 필드, 테이블 사이의 관계를 정리하는 작업을 진행하였다.

가장 먼저 여러 데이터베이스 중에서 어떤 DB를 선택할 지 골라야 했는데, 이전에 사용해 본 DB가 없고 서비스의 구체적인 기능이 확정되지 않은 상황이라 개발을 진행하면서 DB의 구조를 변경할 일이 많을 것이라 판단해서 처음에는 MongoDB를 사용하기로 했다.

하지만 이후 개발과정에서 장고와 호환성이 높고 장고에서 ArrayField라는 특수한 형태의 필드를 사용할 수 있다는 점 때문에 PostgreSQL을 사용하게 되었다.

데이터베이스를 정한 뒤 본격적인 설계에 들어갔다. 초기 단계에서 설계한 엉박사의 주요 기능으로는

  • 회원가입 및 로그인
  • 독서
  • 감상문 작성 및 피드백
  • 퀴즈 풀이

정도였기 때문에 각 기능별로 하나의 테이블을 만들고 필요한 필드를 추가한 뒤 BookReport 테이블을 통해 정보들을 연결해서 관리했다.

구체적인 초기버전의 DB스키마는 아래 그림과 같다.

  • User : 회원정보를 담은 테이블
  • BookReport : 사용자의 독서 및 독후활동 전체를 관리하는 테이블. User와 Book을 조합해서 복합키(Composite Key)로 사용하였다.
  • Book : DB에 등록된 책의 정보를 담은 테이블
  • Quiz : 책에 관련된 퀴즈를 저장한 테이블
  • Text : 사용자가 작성한 감상문 원문 및 교정본, 피드백 내용을 담은 테이블

이후 개발을 진행하면서 여러 기능들이 추가되고 필요한 테이블과 필드도 많아져 이것저것 추가하다 보니 최종적인 DB스키마는 이렇게 바뀌었다.

  • 책을 챕터별로 나누고 챕터 중간중간 퀴즈 및 간단한 작문 활동이 추가되면서 Book과 Quiz 사이에 한 챕터에 들어가는 내용인 Content 테이블과 각 챕터별 작문활동 내용을 담은 Activity 테이블이 추가되었다.

데이터베이스에 대해서는 이전에 공부해 본 적이 없어서 테이블간의 관계가 이상하기도 하고 불필요한 필드가 테이블에 있기도 하는 것 같다. 추후에 데이터베이스에 대한 공부를 한 뒤에 DB구조를 설계해야 할 것 같다.

0개의 댓글