이번에 관계형 데이터베이스(RDBMS)에서 NoSQL로 이전을 진행하였습니다. 이런 과정에서 느낀 점들을 정리하려고합니다.

? 왜 NoSQL로 바꾸었는가
처음에는 스키마가 없는 구조의 NoSQL을 사용하여 성능 향상을 이루러던 것이 가장 큰 목적이었습니다. 하지만 RDBMS도 데이터에 따라서 어떤 솔루션을 사용하느냐에 따라서... 그리고 성능을 개선한 정도에 따라서 많은 속도 차이가 있더는 것을 알았습니다. 즉, 반드시 NoSQL이 빠르다고는 볼 수 없겠죠.


? 직접 써보고 싶은 욕구
"그렇다면 한번도 안써본 NoSQL을 사용해보자"라는 이유에서 선택하였습니다. 호스팅 역시 Cloud 형태의 AWS로 이전하였기에 AWS에서 제공하는DynamoDB를 사용할까 생각하였지만  NoSQL은 MongoDB를 먼저 접하는 것이 나중에도 좋지 않을까라는 생각에  일단 MongoDB를 최종 결정하였습니다.

MySQL -> MongoDB


? 기존의 데이터를 어떻게 옮길 것인가
테이블 구조의 RDBMS와 달리 NoSQL은 테이블이 없습니다. 즉 데이터를 이전하기 위해서는 다른 방법이 필요했는데 뚜렸한 해결책을 찾지 못하였습니다. 그래서 생각한 방법이 두 가지 입니다.
  • 다운받은 후 데이터를 편집기에서 JSON 형태로 바꾸기
  • AJAX 사용하여 이전할 수 있는 별도 페이지 만들기

​​​​​​
# 다운받은 후 데이터를 편집기에서 JSON 형태로 바꾸기
앞의 방법은 먼저 기존의 데이터베이스를 다운받은 후에 편집기에서 JSON 형태로 바꾸는 방법이었습니다. JSON으로 바꾼 db는 이전 할 몽고db에 import하면 되므로 어렵지 않은 방법입니다. 다만 걱정되었던 부분은 테이블이 많고 이를 합쳐서 하나의 document로 넣는 것은 어려워 보였고 전체를 바꾸다보니 오류가 나도 찾기 어렵거나 모두 확인해야하는 문제가 있어보였습니다.


# AJAX 사용하여 이전할 수 있는 별도 페이지 만들기
두 번째 방법은 관리자 페이지를 만들고 기존 데이터베이스의  페이지를 AJAX 비동기로 호출하는 버튼을 만드는 것입니다. 이 경우 선택한 데이터베이스의 내용이 화면에 출력될 것이고 이를 MongoDB에 저장하면 되는 방법입니다.

이 방법의 장점은 몇 가지가 있습니다.

어떤 데이터베이스라도 적용이 가능한 방법이다.
기존의 AJAX API가 존재하는 경우 이를 활용할 수 있다.
만들어진 Admin은 cms로 활용할 수 있다.


이런 이유로 두 번째 방법을 선택하였습니다.


? NoSQL로 옮긴 후 만족도
데이터에 따라 다르겠지만 조작이 많지 않고 전체 컬럼의 모든 데이터를 호출해야하는 경우가 많았던 저의 경우는 충분히 체감할 수 있는 개선을 보여주었습니다. 이런 속도에 민감했던 이유는 동시접속자가 증가하는 경우 성능에 따른 서버 과부하가 급격하게 증가하기 때문이었으며 상당히 보완하였다고 생각합니다.


혹시 NoSQL로 데이터베이스 이전을 준비중 또는 계획중이시라면 참고하시기 바랍니다.