[JSP 축구 게시판] FootFoot - 2, 데이터베이스, ERD 그려주는 AI

    이번 프로젝트에 사용할 데이터베이스는 mysql이고 아래는 ERD이다.

    dbdiagram.io이라는 사이트를 통해 스키마만 갖고 ERD를 만들 수 있다, chatGPT등 AI에게 스키마를 알려주고 dbdiagram.io에 사용할 형식으로 바꿔달라고 하면 손쉽게 ERD를 완성할 수 있다.

     

    dbdiagram.io - Database Relationship Diagrams Design Tool

     

    dbdiagram.io

     

    테이블과 컬럼들의 이름이 직관적이어서 앞서 소개했던 프로젝트 주요 기능들과 ERD를 함께 보면 데이터베이스 구조를 쉽게 이해할 수 있을 것 이다.

     

    일반적이지 않은 부분에 대해서 조금 설명을 더하자면 user테이블에 gender나 team테이블에 team_local등을 enum타입으로 설정했다. 이 부분에 대해서 동기들에게 tinyint를 사용해서 1~ 각 수마다 매핑하는 방식이 더 낫지 않냐는 질문을 많이 받았다. 하지만 enum타입 255개 값 이내에서는 tinyint와 같이 1바이트를 차지하고, 들어갈 값이 정해져 있기에 데이터가 잘못 들어갈 일도 없고, 확장성에도 문제가 없으며 직관적이기 때문에 가독성도 더 좋다고 생각되어 굳이 tinyint를 사용할 이유를 찾지 못했다. 그리고 클라이언트에게 받은 정보를 저장하고, 저장된 정보를 다시 보여주는 과정들에서 별도의 가공이 필요하지 않다는 것이 enum타입을 선택한 가장 큰 이유이다. 기업들에서는 코드 테이블을 만들어 그에 맞게 코드로 저장하는 것으로 알고 있지만 공부를 목적으로 한 작은 개인 프로젝트이기 때문에 enum타입을 사용하기로 했고 실제로 enum타입 덕분에 프로젝트 안에서의 처리과정이 많이 단순화 되었다.

     

    Team테이블에 있는 meeting_day(주기적인 운동 요일), recruit_position(모집중인 포지션)등이 정수형으로 처리된 것에 의문을 가질 수도 있을 것 같다. 요일과 포지션을 하나만 받는 것이 아니라 중복 선택이 가능하게 하고 싶었다. 많은 방법들이 있지만 나는 "비트플래그" 를 통한 처리가 가장 간단하고 효율적이라고 생각하여 비트플래그를 활용하기 위해서 정수형을 선택했다. 비트플래그에 대해서는 중복선택을 처리하는 다른 게시물에서 자세히 다루어 보겠다.

     

    일반게시판, 용병게시판, 매치게시판을 따로 사용하기 때문에 처음에는 각각의 테이블로 만들어 사용했었다. 하지만 그렇게 되면 각 테이블마다 autoincrement로 준 post_id를 참조하는 댓글에 대한 테이블도 3개를 만들어야 했다. 테이블이 너무 많고 난잡해지는 것 같아 해결책을 고민하다가 자유게시판의 기능은 모든 게시판에 공통으로 사용되기 때문에 하나의 자유게시판 테이블을 만들고 post_id를 참조하고 그 외의 각 게시판에 필요한 기능을 가진 매치 테이블과 용병 테이블을 하위 테이블로 포함시켰다. post테이블에 post_type을 지정하여 어떤 게시물인지 표시했다.

     

    처음부터 데이터베이스가 지금같은 구조였던 것은 아니다. 개발하면서 문제와 개선점들을 발견하고 여러번 갈아 엎었다.. (내 기준)규모 있고 관계가 어느정도 복잡한 데이터베이스를 직접 짜보는 건 처음이어서 많은 시행착오가 있었지만 나에게 정말 많은 도움이 되었다고 생각하고 다음에 데이터베이스를 설계하게 된다면 훨씬 좋은 데이터베이스를 만들 수 있을 것 같다.

    댓글