MongoDb를 접하다

그랬다. MognoDb’이하 몽고디비’를 접했었다. 그것은 내가 샀던 Node.js 책에서 저자가 정말 너무나도 추천을 했었고 당시 유행했던 ‘MEAN STACK’ 프로젝트의 구성요소 때문이기도 했었다.

몽고디비는 정말로 핫했고 지금도 물론 너무나도 좋은 데이터베이스임에 분명하다 NoSql중 단연 으뜸이기도 하다

Oracle, Mysql, Ms Sql, PostgreSQL, MongoDb라는 순위를 데이터베이스 랭킹에서 확인 할 수 있다.

MongoDb가 가진 장점의 이해

나는 당시에 Nosql이 가진 가장 큰 장점은 ‘확장성’이라고 생각했다. 단지 확장성 하나 때문에 Mysql을 안사용하고 몽고디비를 써야겠다고 생각했다. 그러나 이것은 정말로 큰 오해였다.

Mysql에 관심을 가지게된 계기부터

나는 사실 서버도 좋아하고 프론트엔드도 좋아하는 어쩌면 잡 개발자라고 할수 있다 사실 아직은 이렇다할 정체성을 가지지 못하고 있다. 두개다 재밌기 때문인데.

최근 면접에서 단연코 많이 하는 질문은 ‘RDS’에 관한 이해였다.

RDS는 중요했다. 웹을 지탱하는 데이터베이스 중 그것은 단연 으뜸이다.

그러나 나는 사실 이런 RDS에 대해 자세히 이해하지 못했었는데 그것은 전혀 관심이 없기 때문이었다.

그러나 다음 면접을 위해선 반드시 공부해야겠다고 생각했고 최근까지도 RDS로 토이프로젝트를 만들며 배워보고있다.

RDS의 확장성

정말 확장성이 없을까?

그렇다

내 개념에선 적어도 그랬다. 왜냐면 애초에 테이블을 ‘설계’해야하고 이 테이블은 사실상 바뀌기 힘들었기 때문이다.

Nosql을 예를 들자면 그냥 도큐먼트에 새로운 객체 하나만 추가하면 만들어지는 데이터베이스 와는 정반대로

‘수정’을 해야한다고 생각했기 때문이다.

그러나 그것은 잘못된 이해였다. RDS를 반대로 이해한것이다.

데이터베이스의 정규화

‘정규화’를 이해하지 못했기 때문에 확장성이 없다고 판단한것이었다. 데이터베이스의 정규화란 몇가지의 형식이 있으며 정말로 간단하게 설명하자면

기존에 내가 이해했던 RDS란 하나의 테이블의 모든 데이터를 꾸겨넣는다고 생각했다.

예를 들어 성적에 관한 데이터베이스를 만든다면

이름 국어 영어 수학
종민 100 90 100
준형 12 32 22

와 같은 형식으로 만들었을 것이다.

그러나 정규화를 이해하고 나선 조금 달라진다.

이름 id
종민 1
준형 0

이라는 테이블을 하나 만들고

pub_id 국어 영어 수학
0 100 90 100
1 12 32 22

과 같이 만들것이다.

pub_id란 위의 종민 준형의 id값을 가리키는 Foreign key’FK’가 된다.

즉 관계형 데이터베이스를 관계정 데이터베이스 답게 이해하게 된것이다.

이제는 확장성에 대해서 고민할 필요가 없다.

혹시 아직도 RDS의 확장성에 대해서 고민할 수 있을까? 절대로 그래선 안된다.

만약 내가 새로운 데이터를 추가하고 싶다면 원 테이블을 고민하는게 아니라 새로운 테이블을 만들어 관계를 추가하면 되기 때문이다.