TIL DAY.35 [Back-end] SQL vs NoSQL

Dan·2020년 10월 25일
1

데이터베이스

목록 보기
2/2
post-custom-banner

🧐 백엔드 공부를 시작하며 ..

브랜디(Brandi)에서 운좋게 기업협업으로 인턴을 하게 된지 벌써 일주일이라는 시간이 흘렀다. 프론트 기술스텍을 Vue.js를 사용하는 브랜디에서 React 말고도 다른 기술스텍을 공부 할 수 있는 좋은 기회라 생각이 들어서 지원하게 되었다. 하지만 기업협업을 시작하고 예상치 못했던 일이 생겼다. 프론트는 이번에 백엔드 기술인 Flask를 배워서 프로젝트에 적용해보긴 권유했다. 예전부터 백엔드도 관심이 있었기에 좋은 기회라 생각이 들어서 원래 배울려 했던 Vue.js를 포기하고 좀 더 익순한 React.js를 활용해 프론트 작업을 하는 동시에 Flask를 배워보기로 했다.

그러면서 백엔드에 제일 기본이 되는 DataBase부터 공부해보기로 한다.

DataBase란?
데이터를 저장하고 보존하는 시스템으로 크게 SQL이라는 관계형 데이터베이스(RDBMS)와 NoSQL로 명칭되는 비관계형 데이터베이스가 존재한다.

1. 관계형 데이터베이스 (RDBMS,Relational DataBase Management System)

  • MySQL, Postgres, Oracle DB 같은 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말한다.

  • 모든 데이터들은 2차원 테이블로 표현이되며 각각의 테이블은 Column 과 row 구성이 되어있다.

  • Column은 테이블의 각 항목을, row는 각 항목들의 실제 값들로 구성이 되어있다. 각 로우는 저만의 고유 키가 존재하는데 이 고유키를 통해서 해당 로우를 찾거나 reference를 하게 된다.

  • 테이블들은 서로 상호관련성을 가지고 서로를 연결하며 이를 연결하는 종류는 크게 one to one, one to many, many to many 세 가지로 나뉜다.

  1. One to One

테이블 A 의로 로우와 테이블 B의 로우가 정확히 일대일 매칭되는 관계이다. (ex. 유저와 유저의 프로필)

  1. One to Many

테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 칭한다. (ex. 각 고객은 여러 제품을 구매할 수 있지만 구매된 제품의 주인은 오직 한 고객 뿐이다.)

  1. Many to Many

테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결되는 관계를 many to many로 칭한다. (ex. 책은 여러 작가에 의해 쓰일 수 있고 작가들은 여러 책을 쓸 수 있다.)

2. No SQL (Non-relational DataBase)

[출처:academind]

  • NoSQL에서는 관계라는 개념이 없다. 위의 예시를 보면 Orders에 관련된 내용이 한곳에 모두 저장되어 있다. 즉, 확인하고자 하는 데이터가 다 담겨있기 때문에 관계를 통해 확인할 필요가 없다.

  • Users, Products 처럼 다른 Collection에 있는 정보가 필요하다면 일부 복제하여 사용한다. 그래서 Collection 별로 중복된 데이터가 존재 할 수 있다. 중복된 데이터는 삭제하거나 업데이트 할때 반영이 되지 않을 수 있어 유의해야한다.

3. 확장성 (Scalability)

데이터의 확장은 Horizontal 과 Vertical Scaling으로 나눌 수 있다.

1) SQL(Vertical Scaling)
SQL은 수직적으로 확장한다. 수직적 향상은 CPU나 RAM같은 하드웨어 부품을 업그레이드하는 것과 같은 의미이다. 즉 서버 성능을 향상 시키는 것이다.

2) NoSQL(Horizontal Scaling)
NoSQL은 수평적으로 확장된다. 수평적 확장은 더 기존에 있던 서버보다 더 많은 서버를 추가하고 데이터를 분산하여 증설하는 것이다.

4. 장점과 단점

SQL

  • 정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다. (ex. 전자상거래 정보, 은행 계좌정보, 거래 정보 등등)

장점

  • 데이터를 좀 더 호율적이고 체계적으로 저장관리 할 수 있다.
  • 미리 저장하는 데이터들의 구조를 정의함으로 데이터의 완전성이 보장된다.
  • 트랜잭션(transaction): 일련의 작업들이 마치 하나의 작업처럼 취급되어서 모두 다 성공하거나 모두 다 실패하는걸 이야기 한다.

단점

  • 테이블을 미리 정의해야해서 테이블 구조 변화에 덜 유연하다.
  • 확장성이 쉽지 않다.

NoSQL

  • 주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터를 저장하는데 유리하다. (ex. 로그 데이타)

장점

  • 데이터 구조를 미리 정의하지 않아도 됨으로 데이터 구조 변화에 유연하다.
  • 확장하기 비교적 쉽다 ( 서버 수를 늘린다.)
  • 위 두 장점 덕분에 방대한 양의 데이터를 저장하는데 유리하다.

단점

  • 데이터의 완전성이 덜 보장된다.
  • 트랜잭션이 안되거나 불안정하다.
profile
만들고 싶은게 많은 개발자
post-custom-banner

1개의 댓글

comment-user-thumbnail
2020년 11월 2일

오~ 풀스태~크으~

답글 달기