TIL

[TIL] 데이터베이스 선택 솔루션 가이드 - 데이터 베이스 대분류, SQL과 noSQL 차이점과 각 DBMS별 장단점

S_N_Y 2023. 12. 28. 21:42

to do list 📋

 SQL/NO SQL 종류 찾고 장단점 정리하기

✅ 코드블럭 스킨 적용하기

 Java 복기 (4/4지점까지)

✅ 깃허브 1커밋

 

오늘의 순공부시간 🕰️

10시간 17분

 

Today I Learned 👨‍💻

내가 쓰는 DBMS가 현재 프로젝트의 최선일까?

oracle, mySQL, postgreSQL, elastic, redis, mongoDB, amazonDynamoDB, neo4j, cockroach DB, cassandra, couchDB, BigTable, cloudFirestore..등등 정말 수 많은 DBMS들이 많은데 개발 초기에는 익숙한 DBMS를 쓰겠지만 적어도 내가 쓰는 DBMS가 어떤 특성을 보이는지, 나중에 성능 개선을 위해 또 다른 DBMS를 선택해야 할지 갈피를 조금이라도 잡기 위해 정리해본다.

 

📕 1. key - value Database (noSQL)

데이터를 key - value 형태로 저장하는 데이터베이스

- key - value Database 종류 : redis, Riak, Oracle Berkely, AWS DynamoDB

-> 표 형태가 아닌 key - value 형태라 간단해서 실용성이 딱히 없을 것같은데 메인으로 쓰기 보다 서브용 DB로 많이 사용한다

대표적인 DBMS 가 redis이다.

- redis 특징 : 1차적으로 하드디스크에 저장하지 않고 RAM에 저장해두어 반응 속도가 빠르다 - 하지만 보통 하드디스크에 백업은 해둔다

자주 필요한 데이터는 redis에 추가로 복사해서 넣고 아닌 데이터는 메인DB에만 넣어둔다. -> 자주 쓰는 그 데이터들이 필요하면 메인DB가 아니라 redis에 요청하는 형태로 자주 이루어진다.

- redis에 들어가는 데이터들 예시) 자주 쓰는 데이터 캐싱, 채팅을 위한 pub/sub, 영상 스트리밍, 로그인 기록저장 등등

📗 2. Relational Database (관계형 데이터베이스 SQL)

관계형 DB의 단점 : 보통 데이터를 '정규화'해서 저장한다.

-> 정규화란 쉽게 말해 중복되는 데이터가 있으면 다른 테이블로 쪼개는 것 -> 데이터를 sql로 불러올 때 더 복잡하고 길어지는 사태가 일어남

ACID Transaction 기능이 있어서 돈 거래같은 중요한 기능을 구현하고 싶을 때 안전하게 구현할 수 있다입출력 속도보다 데이터 정확도가 더 중요하다 -> 일반적으로 관계형 DB 많이 쓴다

📘 3. Graph Database (noSQL)

종류 : neo4j, orientDB, ArangoDB, Sparsity 등노드라는 걸 만들고 노드 안에 데이터를 저장하여 노드끼리 어떤 관계인지도 기록(=Graph Query Language)해둘 수 있다.

Graph Database 에 들어가는 데이터들 예시) 비행기 노선, SNS친구 관계, 코로나전염맵, 추천 서비스 등등

📙 4. Document Database(비관계형 데이터베이스, noSQL)

Document Database 종류 : mongoDB, couchDB, cloudFirebase 등

동작 원리 : collection이라는 폴더 안에 document라고 부르는 파일들을 만들어서 그 파일 안에 JSON형태로 데이터를 저장할 수 있게 되어있음

장점 : 관계형 DB와 다르게 어떤 데이터를 저장할지 미리 정해놓을 필요가 없다.

정규화없이 쓰는게 일반적이다 -> 중복이 있어도 테이블을 나누지 않는다는 뜻(그래서 입출력문법 등이 간단한 편)

분산을 염두해둔 DB이기 때문에 대부분 분산처리를 매우 잘해준다는 특징이 있다.

=> 데이터 입출력이 많은 서비스에 많이 씀

Document Database 에 많이 쓰는 데이터들 예시) SNS, 실시간 채팅, 게시판, 온라인 게임 등등

단점 : DB간 일관성(정확도)가 떨어질 수 있다

📕 5. Column-family(Wide-Column) Database (noSQL)

관계형 DB같이 표 형식처럼 저장하면서 유연하게 쓰고 싶을 때 택하는 데이터베이스

Column-family Database 종류 : cassandra, apache HBASE, Google Cloud Bigtable 등등

동작 원리 : table을 만들고 그 안에 row를 만들어 그 안에 자유롭게 컬럼을 만들어 기입하는 식으로 자료를 저장한다 -> 행마다 컬럼이 달라도 상관 없다.

단점 : SQL이 아니라 자체언어를 써야 한다 - cassandra는 cassandra Query Language.., Document Database 와 마찬가지로 데이터 일관성이 부족하다

장점 : 정규화 안한다, 복제와 분산처리를 잘한다 -> 많은 입출력을 감당해야 할 때 이런 DB들을 사용하기도 한다

📗 +) Search engine

- > 이런 애들도 DB로 활용할 수 있다

주로 index 보관하는 용도로 쓰임 - index : 데이터를 빠르게 검색할 수 있도록 도와주기 위한 색인(목차)

- Search engine 종류 : elastic, Amazon CloudSearch, Google Cloud Search 등등

- 쉽게 만들 수 있는 종류 예시 ) 실시간 검색어, 추천 검새거, 검색어 오타교정 등등

📘 SQL과 noSQL 장/단점 비교 정리

<SQL 장점>

- 명확하게 정의된 스키마, 데이터의 무결성 보장

- 관계는 각 데이터를 중복 없이 한 번만 저장

<noSQL 장점>

- 스키마가 없어서 훨씬 유연하다 -> 언제든지 저장된 데이터를 조정하거나 새로운 필드를 추가할 수 있다

- 데이터는 애플리케이션이 필요로 하는 형식으로 저장 -> 데이터를 읽어오는 속도가 빠르다

- 수직/수평 확장이 가능하다 -> 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기와 쓰기 요청을 처리할 수 있다

<SQL 단점>

- 상대적으로 덜 유연하다

- 데이터 스키마는 사전에 계획되어야 한다 -> 나중에 수정하기 번거롭거나 불가능할 수도 있다

- 관계를 맺고 있기 때문에 join문이 많은 복잡한 문장이 만들어질 수 있다

- 수평적 확장이 어렵고 대체로 수직적 확장만 가능하다

<noSQL 단점>

- 유연성 때문에 데이터 구조 결정을 잘 하기가 힘들어 미룰 가능성 농후..

 

다음 계획 🌈

Java 섹션별 약한 부분 정리

✅ SQL 비교글 재정리

 Java 1주차 이상 완료

✅ 깃허브 1커밋

✅ 프로그래머스 SQL 10문/Java 10문 완료