.png)
배경.
- MVP 개발 및 프로젝트 진행을 위해 초기 DB 구조 설계가 필요하다.
- 프로젝트 기능 명세서를 확인하고, 여러 DB 기술을 비교하고 가장 알맞은 방법을 사용한다.
- ORM은 대부분의 서비스 기업에서 사용하고, 보다 객체지향적인 설계를 위해 이번 프로젝트에 도입할 예정이다.
DB 기술 비교
- RDB: 구조화된 스키마, 데이터 일관성, 트랜잭션 관리에 용이
- MySQL, Oracle DB, PostgreSQL 등
- NoSQL: 유연한 스키마, 읽기와 쓰기에 강함, 데이터 검증 로직을 개발자가 직접 구현
- Key-Value DB: 키-값으로 이루어진 간단한 DB
- 테이블 간 조인이 없고, 값에 JSON이나 리스트 등도 사용이 가능
- Redis, AWS DynamoDB 등
- 캐싱, 일시적인 속성 추적, 대용량 객체 저장에 주로 사용
- Document DB: 키-값 구조, 값에 JSON, XML 등의 문서를 저장, 문서 형식 자체가 스키
- MongoDB, CouchDB 등
- JSON 데이터 구조를 쓰는 경우, 다양한 유형의 메타데이터가 필요한 경우, 비정규화된 중첩 구조가 존재하는 경우 사용
- 실시간 분석, 빠르고 유연한 스키마 업데이트가 필요한 시스템에 사용
- Column Family DB: 스키마를 사전에 정의하지는 않고, 데이터 입력 시점에 임의 컬럼 추가 가능, 한 객체에 관련된 정보는 단일 Row의 수많은 컬럼을 사용하여 보관
- Hbase, Cassandra 등
- 대용량 데이터, 읽기와 쓰기 성능, 분산 및 고가용성을 위해 사용
- INSERT, UPDATE에 유리하여 시계열 데이터, 로그 집계 업데이트가 잦은 경우 사용
제안.
DBMS 선택
- 문제 풀이 기능에 사용되는 데이터는 일관된 스키마를 가지고 있어 우선 RDB로 설계하는 것이 유리해보임
- 모의 기술 면접도 초기에는 연속 질문 형태로 구현할 것이기 때문에 당장 NoSQL 도입이 필요하다고 생각되지 않음
- 추후 성능, 확장성 등에 문제가 생기는 시점에 NoSQL 도입을 추가로 고려해보는 것이 좋을듯함
- RDBMS로는 팀원들이 모두 사용해본 적이 있고, 취업 준비에는 대중적인 기술을 사용하는 것이 유리하므로 MySQL을 사용하는 것이 좋다고 생각됨
기본 DBMS 컨벤션
- 모든 테이블에는 고유 id가 존재하고, 속성명은 항상
id