내가 느꼈던 관계형 DB와 NoSQl의 차이점들

하이루·2022년 4월 25일
0
post-custom-banner

객관적인 정보가 아니라 사용하면서 느낀 점들을 적었다.

NoSql과 비교되는 차이점

  1. 관계형 DB는 DB의 구조를 먼저 구축한 다음에 데이터를 쌓는 느낌이 noSQL에 비해 좀 더 강하다.

    • 관계형 DB의 경우 먼저 테이블을 모두 세팅한 다음에 거기에 데이터를 끼워 넣는 느낌이다.

    • --> 코딩해보면 느껴지는데,

      • 보통 관계형 DB는 DB를 관리하는 프로그램( DB 콘솔 )에 먼저 들어가서 DB의 테이블을 모두 구축한 다음,
        그곳에 데이터를 넣는 방식으로 이루어진다.

        즉, 일종의 중앙관리가 이루어진다.

      • 그에 비해 noSQL은 해당 DB를 사용하는 프로그램의 차원에서 DB를 구축하는 경우가 많았다.
        쉽게 말해
        ( 데이터를 넣는다 = DB의 새로운 영역을 생성한다. )는 느낌이다.

        따라서 NoSql에서는 DB를 수정할 필요가 있을 때,
        DB 콘솔에서는 DB구조에 대한 참고만 하고,
        해당 DB를 사용하는 프로그램들에서 DB에 데이터를 넣는 코드를 수정하는 것으로 DB의 구조를 수정한다.

        즉, 특별히 어딘가 한 곳에서 DB 전체를 관리하진 못한다.

    결과적으로 여기서의 두 DB설계에서 주목할 점이라면,

    1. 관계형 DB는 애초에 수정할 상황을 만들지 않는 것이 최선이므로 처음 설계에서부터 빡시게 설계해야 한다.
    2. NoSql은 수정할 때 프로그램 단계에서 수정할 필요성이 있으므로, 차후에 DB를 수정하는 상황을 대비하여
      프로그램을 코딩할 때, DB에 대한 부분을 좀 깔끔하게 코딩해놓을 필요성이 있다.
      ( 이렇게 안하면 나중에 매우 힘들어질 가능성이 높다. )
  2. 관계형DB에서 테이블의 형식은 정말 특별한 일이 있지 않다면 결코 변하지 않는다.

    • 여기에 따라 장단점이 생기는데ㅡ,
      테이블이 변하지 않으므로 대부분의 경우 매우 안정적이다.
      하지만 변경사항이 생겨서 테이블의 변경이 필요한 경우, 그것을 반영하는 것이 매우매우 어렵다.
      ( 좀 더 정확히 말하자면, 구조의 변경과 삭제가 매우 어렵다. )

      --> 따라서 관계형 DB는 처음부터 정말 철저하게 설계되어 제작되어야 한다.

  3. 관계형 DB는 관계를 바탕으로 데이터를 저장하기 때문에 데이터의 변경이 편하다.

    위에서 관계형 DB는 테이블 구조의 변경이 어렵다고 했는데, 그에 반해 데이터의 변경은 훨씬 간단하다.

    • 먼저 관계형이라는 부분에 대해 설명하자면

      • 예를 들어, 연필종류에 대한 테이블과 지우개 종류에 대한 테이블, 그리고 사람들에 대한 id 테이블의 3가지 테이블이 있다면
        관계형 DB에서는 3개의 DB를 통해 다음과 같이 1개의 테이블을 관계적으로 만들어낼 수 있다.

        [ "특정 id의 사람이 특정 종류의 연필과 특정 종류의 지우개를 가지고 있다" 라는 데이터를 담는 테이블 ]
        --> 해당 테이블에 들어가는 데이터는 모두 위의 3가지 테이블에서 관계적으로 가져온 데이터를 이용하는 것이므로
        이것이 관계형 DB라는 이름이 붙는다.

        --> 이것은 DB의 구조파악이 쉽다는 장점으로도 이어진다.

    • 이제 데이터 변경이 쉽다는 부분에 대해 설명하자면,
      만약에 위의 연필에 대한 테이블을 200개의 테이블이 관계적으로 참조하고 있다고 한다면,
      관리자는 연필에 대한 테이블의 데이터를 변경하는 것으로 200개의 테이블에서 해당 연필을 참조하고 있는 데이터를 변경시킬 수 있는 것이다.

      --> Java의 객체지향과 비슷한 특징이라고 보면 된다.

    --> 반면에 NoSql은 일일이 데이터를 넣는 방식이기 때문에 데이터에 대해서 이런 일괄적인 변경이 불가능하다.
    ( 굳이 해야한다면 일일이 변경하거나 해야한다. )

  4. 3번에서 나왔던 관계형 DB의 강점은 DB에서 데이터를 가져다가 쓰는 부분에 있어서는 단점으로 작용한다.

    • 관계형 DB는 관계적으로 테이블이 정리되어 있기 때문에 사용할 때 그 관계들을 Join하여 가져와야한다.

      • 여기서 Join이라는 것은 테이블의 데이터들을 하나씩 매칭시킨다는 의미인데ㅡ,
        예를 들어, 100개의 데이터를 가진 A라는 테이블이 10개의 데이터를 가진 B라는 테이블을 참조한 상태라면,
        A의 데이터를 가져오기 위해서 A와 B를 먼저 Join한 후, 그 중에서 A에 해당하는 데이터를 추려서 가져오게 된다.

        이때 Join하는 데이터는 100( A테이블의 데이터 수 ) X 10( B테이블의 데이터 수 )으로 1000번의 연산이 일어나게 된다.

        --> 물론 관계가 복잡해지거나, 데이터 수가 늘어남에 따라 가짓수는 훨씬 더 많아질 것이고,
        반면에 Query( 위와 같이 관계형 DB에서 데이터를 불러오기 위한 언어를 Query라고 함 )를 짜는 방식에 따라 훨씬 적어질수도 있지만,
        대략적으로 이런 식의 무식한 방식으로 데이터를 긁어서 가져오게 된다.

        따라서 DB의 규모에 따라서는 데이터를 가져오는 시간이 어마어마하게 오래걸릴 수도 있다.

    • NoSql은 그냥 데이터를 찾아서 가져오면 된다.
      따라서 데이터를 가져오는 부분에 있어서는 NoSql이 압도적으로 빠르다.

결론

  1. 데이터를 관리하는 부분이나 안정성의 부분에 있어서는 관계형 DB가 장점이 휠씬 많다.

  2. 데이터를 가져오는 부분이나, DB의 확장성에 대한 부분에 있어서는 NoSql이 장점이 훨씬 많다.

profile
ㅎㅎ
post-custom-banner

0개의 댓글