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문 완료
'TIL' 카테고리의 다른 글
24/02/12 TIL (0) | 2024.02.13 |
---|---|
[MySQL] [42000][1049] Unknown database 'database name'. 에러 해결 방법 (0) | 2024.01.24 |
top-down/bottom-up 방식 채택에 관해 (1) | 2024.01.08 |