SQL vs NoSQL

김금동·2021년 11월 28일
0

간단하게 이번 프로젝트를 얘기하자면 로그인을 하면 게시글 crud와 그 게시글의 댓글 crud를 이용할 수 있는 평범한 사이트였다.

이 프로젝트의 데이터베이스를 nosql인 mongodb를 이용하면서 느낀점과 예전에 이와 비슷한 프로젝트를 sql인 mysql을 이용하면서 느낀점을 비교하면서 둘의 차이를 쓰려고 한다.

  1. mysql을 쓰면서 느낀점
  2. mongodb를 쓰면서 느낀점
  3. 정리

1.mysql을 쓰면서 느낀점
먼저 mysql을 쓰면서 바로 느낀점은 나를 불편하게 만든다는 느낌이였다. 마치 웹 프레임워크처럼 mysql이 원하는 대로 해줘야 데이터베이스를 쓰게해주는 것 같았다.

이런 느낌을 받게 한 이유를 정리해보면
(1) sql 언어를 배워야 쓸 수 있는 데이터베이스
(2) 테이블 형식으로만 넣을 수 있는 데이터
(3) 테이블을 수정할 때의 절망감

(1) 배워야 쓸 수 있는 sql언어
시작하자마자 포기할 뻔 했다.
막연히 데이터베이스는 모든 언어마다 지원하여 쓸 수 있는 거라고 생각했다. 그래서 sql문을 배워야 한다는 것 뿐만 아니라 각각의 sql문이 또 언어가 다르다는 것까지 알고난 후 포기할 뻔 했다. 이때 mysql문을 배우다가 orm이 있다는 것을 알고 일단 orm을 배워서 다음 프로젝트때 sql을 바꾸더라도 대비하고 싶은 마음으로 orm으로 썼다.

(2) 테이블 형식으로만 넣을 수 있는 데이터
이렇게 불편할 정도로 테이블에만 의존해서 데이터를 넣는게 처음에는 왜 그러나 싶었지만 점점 다른 데이터끼리 관계를 가지면서 수정하거나 삭제할 때 이런 형식이 관계형 데이터베이스라는 말에 적합하게 큰 장점이 되었다.
그래서 내 간단한 프로젝트에서 효율적으로 데이터들을 다룬다는 느낌이 들었다. 예를 들어 user의 이름만 변경하면 이 user를 참조하는 테이블은 모두 바뀌어 (내부적으로 변경하는 코드없이) 댓글같은 곳에서 user의 이름이 바뀐상태로 나오는 효율적인 관리가 됐다.

(3)테이블을 수정할 때의 절망감
이게 진짜 지옥같았다. 하면서 배운다는 생각으로 데이터베이스를 쓰면서 관리하다가 테이블에 있는 컬럼을 고쳐야 한다는 인식이 생길때마다 과거의 내가 원망스러웠다. 테이블을 수정할 때 그와 관련된 코드들이 수정할 게 너무 많아서 시간이 너무 많이 소모되고 정신건강에 좋지 않았다. sql을 쓸 때 데이터베이스 스키마 설계를 처음부터 제대로 해야한다는게 확실한 단점이다. 분명 프로젝트를 진행하다보면 어떤 컨텐츠를 추가할 게 생기거나 삭제할 게 생길텐데 이런 상황이 많아질 거 같으면 절대 sql은 안쓸거같다.

  1. mongodb를 쓰면서 느낀점
    극한의 자유로움
    많이 안써서 그런지도 모르겠지만 정말 이 한마디로 모든 느낀점을 설명할 수 있을 것 같다.

(1)웬만하면 에러안남으로 인한 삽질
일단 처음으로 mongodb를 쓰고 있다는 것을 느꼈을 때는 내가 실수로 컬럼을 하나 더 추가하고 다른 데이터에 값을 안 넣었을 때였다. 만약 sql에서 이런 상황이였다면 무조건 에러였겠지만 mongodb의 gui인 robo3t로 봤을 때 같은 collection에 이름이 같은 데이터가 컬럼이 다른 것이 들어있는 걸 보고 이것이 mongodb..? 이것이 nosql..?라는 생각을 했다. 심지어 같은 컬럼에 타입이 다른것도 가능했다. 에러를 내고 싶어도 나지 않을 것 같은 포스였다.

하지만 이런 에러가 나지 않음에는 당연히 부작용이 있다. 에러가 나지 않아서 다른 타입이 들어갔음을 못보고 데이터가 안 가져왔을 때는 당연히 눈뜨고 당할 수 밖에 없었다.
그래서 이런 자유로움을 스스로 제한하는 방법으로 스키마를 써서 에러를 나게했다.

(2)sql은 꿈에도 생각못할 자유로운 데이터 형식
이런 데이터 타입이 될까?하면 된다. object도 되고 array도 되고 array안에 object타입도 된다. 다 된다. 그래서 nosql 즉, not only sql이란 이름이 붙을 수 있었던 것 같다.
근데 이번 프로젝트에서는 딱히 쓸만한 장점은 아니였다.

(3)수정삭제의 번거로움
sql문을 말하면서 얘기한 장점으로 수정삭제가 효율적이라고 했는데 이건 완전 반대다. 수정삭제를 하려면 직접 코드로 지정해줘서 내가 해야한다. 코드도 늘어나고 코드가 늘어났으므로 당연히 연산이 늘었다.

3.정리
솔직히 데이터베이스를 미리 설계잘하고 sql언어 혹은 orm을 안다면 이렇게 데이터들간의 관계가 간단 명료한 프로젝트는 sql이 훨 좋은 것 같다.

profile
나원래chu해

0개의 댓글