---
# System prepended metadata

title: DB 선택 이유 및 구조
tags: [의논사항]

---

# DB 선택 이유 및 구조
디비를 선택을 하기 전에 미리 데이터베이스에서 필요한 데이터와 데이터 구조를 작성해보았다. 

## Mysql
![](https://i.imgur.com/bfMJ3MH.png)


### Mongo
```
User {
   id,
   email,
   password
}

GameType {
    gameTypeNumber,
    name,
    image,
    rule
}

Game room {
    gameType {
        gameTypeNumber,
        name,
        image,
        rule
    }
    id,
    title,
    isPublic,
    timeLimit,
    playerList : [
        player {
            isMaster,
            playerNumber, // 순서
            id,
            team
        },
        ...
    ],
    recordList : [
        record {
            order,
            playerId,
            position,
        }
        ...
    ]
    
}

```


가장 복잡하고 가장 중추적인 부분은 게임이 진행될 때의 데이터를 담는 부분이었다. 이 데이터들은 게임이 시작할 때 생기기 시작해서 게임을 하는 도중에 record가 계속 추가가 되고 **게임이 끝이나면 모두 사라지는 데이터였다**. 따라서 ERD를 그려본 결과 mysql에서 관계가 복잡하게 있는 데이터를 모두 찾아가면서 삭제를 하는 것보다 **mongoDB를 이용해서 game room document를 삭제를 한 번에 하는 것이 훨씬 쉽다고 생각**을 했다.

또한 몽고디비의 embeded 방식으로 해도 **게임 도중에 game room 내부의 game type이나 player 정보 같은 것을 바꿀 일은 없기 때문에 데이터 이상이 발생할 일이 없어 몽고디비의 단점이 부각되지 않는다고 생각**했다.

그리고 서비스가 처음에는 오목 게임으로 시작을 하지만 **다른 게임을 추가했을 경우**에 recordList에 들어가는 record의 **스키마가 달라질 수도 있다**고 생각했다. 그래서 mysql보다 스키마가 유연한 몽고디비가 더 적합하다고 생각해 **몽고디비로 최종 결정**을 했다.


###### tags: `의논사항`
