# 구글 캘린더를 위한 데이터베이스 설계 튜토리얼

> Clean Markdown view of GeekNews topic #16005. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16005](https://news.hada.io/topic?id=16005)
- GeekNews Markdown: [https://news.hada.io/topic/16005.md](https://news.hada.io/topic/16005.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-07-25T09:54:32+09:00
- Updated: 2024-07-25T09:54:32+09:00
- Original source: [kb.databasedesignbook.com](https://kb.databasedesignbook.com/posts/google-calendar/)
- Points: 13
- Comments: 0

## Summary

이 튜토리얼은 Google Calendar의 주요 기능을 모델링하여 복잡한 데이터베이스 설계를 단계별로 설명해 초보자도 쉽게 이해할 수 있게 합니다. 논리 모델링을 통해 데이터베이스 설계의 오류를 방지하고, 물리적 테이블 설계로 자연스럽게 이어지는 과정을 설명합니다.

## Topic Body

#### 소개

이 데이터베이스 설계 튜토리얼에서는 복잡한 실제 프로젝트의 데이터베이스 테이블을 설계하는 방법을 보여줌. Google Calendar의 클론을 설계할 것임. 이 시리즈는 "Database Design using Minimal Modeling" 책의 접근 방식을 설명함. 먼저 캘린더 데이터를 설명하는 완전한 논리 모델을 구축한 후, 논리 모델을 기반으로 테이블 설계를 진행할 것임.

#### 대상 독자

이 책의 목표는 모호한 아이디어에서 데이터베이스 테이블의 완전한 정의로 이동하는 데 도움을 주는 것임. 텍스트의 첫 3/4은 데이터베이스에 대한 일반적인 이해만 필요하며, 논리 모델에 대해 설명함. 마지막 1/4은 논리 모델에서 물리적 테이블 구조로 이동하는 방법을 설명함.

#### 목차

- 소개
- 이 책의 접근 방식
- 문제 설명
- Part 1: 기본 하루 종일 이벤트
- Part 2: 시간 기반 이벤트
- Part 3: 반복되는 하루 종일 이벤트
- Part 4: 캘린더 페이지 렌더링
- Part 5: 시간 기반 이벤트의 캘린더 페이지 렌더링
- Part 6: 지금까지의 완전한 논리 모델
- Part 7: SQL 테이블 생성
- 결론
- 다음 단계

#### 이 책의 접근 방식

사람들은 종종 테이블 설계부터 시작하지만, 우리는 다른 접근 방식을 취함. 논리 모델을 먼저 작성하고, 데이터 속성과 엔터티 간의 관계를 정의함. 논리 모델이 결정되면 물리적 테이블을 설계함.

#### 문제 설명

Google Calendar의 주요 기능을 구현할 것임. 사용자 관련 데이터는 최소한으로 구현할 것임. 이벤트는 제목, 설명, 위치 등의 속성을 가짐. 가장 복잡한 부분은 시간과 날짜임.

#### Part 1: 기본 하루 종일 이벤트

##### 앵커

먼저 앵커를 찾아야 함. 앵커는 엔터티로, 예를 들어 사용자(User)와 이벤트(Event)가 있음. 앵커는 ID와 카운팅을 처리함.

##### 사용자 속성

사용자에 대한 최소한의 데이터를 모델링할 것임. 예를 들어 이메일.

##### 하루 종일 이벤트 속성

이벤트 이름, 시작 날짜, 종료 날짜를 저장해야 함.

##### 링크

특정 사용자가 특정 이벤트를 생성한 정보를 저장할 위치를 결정해야 함. 이는 속성이 아닌 링크로 처리함.

#### Part 2: 시간 기반 이벤트

##### 시간대

시간대는 여러 국가와 지역에서 사용됨. 시간대 정의는 가끔 변경됨. 시간대와 관련된 최소한의 모델을 구현할 것임.

##### 시간대 속성

시간대의 인간이 읽을 수 있는 이름을 저장할 것임.

##### 시간 기반 이벤트 속성

이벤트 이름, 시작 시간, 종료 시간을 저장할 것임. 로컬 시간을 사용함.

##### 링크

시간대와 시간 기반 이벤트 간의 링크를 정의함.

##### 날짜 이벤트와 시간 이벤트의 유사점

두 이벤트 유형 간의 유사점을 고려할 것임. 논리 모델링을 통해 결정을 미룰 수 있음.

#### Part 3: 반복되는 하루 종일 이벤트

##### 속성 #1, 주기

이벤트가 얼마나 자주 반복되는지에 대한 속성을 정의함.

##### 속성 #2, 얽힌 속성

반복되는 이벤트의 주기를 정의함.

##### 속성 #3

월별 이벤트의 경우, 같은 날 또는 같은 요일에 반복되는지 정의함.

##### 요일: 마이크로 앵커

요일을 저장할 위치를 결정함. 새로운 앵커를 도입함.

##### 링크

요일과 이벤트 간의 링크를 정의함.

##### 완료 여부 확인

모델링이 완료되었는지 확인하기 위해 원래 요구 사항을 다시 검토함.

##### 반복 제한: 더 얽힌 속성

이벤트가 언제까지 반복되는지에 대한 속성을 정의함.

#### Part 4: 캘린더 페이지 렌더링

지금까지 캘린더의 기록 부분을 논의했음. 이제 사용자의 캘린더 주간 보기를 보여줄 필요가 있음.

---

### GN⁺의 정리

이 튜토리얼은 복잡한 데이터베이스 설계를 단계별로 설명하여 초보자도 쉽게 이해할 수 있게 함. Google Calendar의 주요 기능을 모델링하여 실제 프로젝트에 적용할 수 있는 유용한 예제를 제공함. 논리 모델링을 통해 데이터베이스 설계의 오류를 방지하고, 물리적 테이블 설계로 자연스럽게 이어지는 과정을 설명함. 이와 유사한 기능을 가진 프로젝트로는 Microsoft Outlook Calendar 등이 있음.

## Comments



_No public comments on this page._
