2023. 3. 29. 02:22ㆍ부트캠프/DevOps (TIL)
관계형 데이터베이스, 비관계형 데이터베이스를 설명하기 앞서 데이터베이스의 필요성에 대해 짚고 넘어가고자 합니다.
데이터베이스가 왜 필요할까? 라는 의문은 전 챕터에서 was을 구현하고 실행하면서 느꼈습니다.
was을 구축하고 실행하면서 생긴 인스턴스는 종료되면서 저장된 데이터와 함께 사라지게 된다는 걸 알게 되었습니다.
데이터를 저장할 때 파일에 저장하거나, 인 메모리에 저장하는 방식도 있는데 굳이 데이터베이스가 필요할까요?
이유는 파일에 저장된 데이터는 파일 I/O 즉 입출력 방식으로 데이터를 조회하는데 데이터가 필요할 때마다 전체를 스캔해야하기 때문에 파일의 크기가 커질수록 이 작업은 버겁게되고, 비효율적이게 됩니다. 이는 큰 단점으로 작용하게 되며 만약 파일이 손상되거나 여러 개의 파일들을 동시에 다뤄야 하거나 하는 등 복잡하고 데이터량이 많아질수록 데이터를 불러들이는 작업이 점점 힘들어 집니다.
인 메모리 역시 큰 단점이 있습니다. 만약 실행된 프로그램에 변수를 만들어 값을 저장한 경우, 해당 값을 메모리 상에 일시적으로 저장이되지만, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라지게 됩니다. 즉 변수 등에 저장한 데이터가 프로그램의 실행에 의존한다는 말이됩니다.
이 문제를 해결하기 위해 만들어진 개념이 데이터 베이스며 종류로는 관계형 DB, 비관계형 DB가 있습니다.
두 종류의 개념과 장단점은 아래와 같습니다.
관계형 DB
일반적으로 우리가 배워왔던 Mysql, Oracle, Mssql 같은 고전적인 데이터베이스를 관계형 데이터베이스라고 합니다.
테이블, 행, 열을 가진 DB에 A데이터와 B데이터가 있다고 가정을 하면,
A데이터에 B데이터의 위치를 저장하는 방식으로, 행과 열로 구성된 테이블과의 관계를 나타낼 때 사용합니다.
특징
- 트랜잭션(전부 아니면 무): 전체 트랜잭션이 하나의 단위로 기록. 실패 시 전체 롤백
- 정규화: DB설계 시 중복을 최소화해서 구조화하는 프로세스
장점
- 데이터의 성능이 일반적으로 좋아 정렬, 탐색, 분류가 빠름
- 신뢰성이 높아 데이터의 무결성을 보장
- 정규화에 따른 갱신 비용을 최소화
단점
- 기존에 작성된 스키마를 수정하기 어려움
- 데이터베이스의 부하를 분석하기 어려움
- 빅데이터를 처리하는데 매우 비효율적임.
비관계형 DB
NoSQL이라고도 부르며, Not Only SQL(SQL 뿐만이 아닌. 이라는 뜻)의 줄임말이라고 합니다.
이 말은 곧 SQL뿐만 아니라 다른 여러 장점을 가지고 있다는 소리입니다.
기존의 관계형 데이터베이스의 한계를 뛰어넘기 위해 만들어진 새로운 형태의 데이터베이스라서,
관계형 데이터베이스보다 더 융통성 있는 데이터 모델을 사용하며, 데이터의 저장 및 검색에 특화된 메커니즘을
제공합니다. NoSQL은 분산 환경에서의 데이터 처리를 더욱 빠르게 하기 위해 개발되었습니다.
대표적으로 MongoDB, CouchDB 등이 있습니다.
특징
- 거대한 Map으로서 key-value 형식을 지원함.
- 관계형 db와 달리 PK,FK JOIN등 관계를 정의하지 않음.
- 스키마에 대한 정의가 없다.
장점
- 대용량 데이터 처리를 하는데 효율적임.
- 읽기 작업보다 쓰기 작업이 더 빠르고 관계형 데이터베이스에 비해 쓰기와 읽기 성능이 빠름.
- 데이터 모델링이 유연함.
- 뛰어난 확장성으로 검색에 유리함.
- 최적화된 키 값 저장 기법을 사용하여 응답속도나 처리효율 등에서 성능이 뛰어남.
- 복잡한 데이터 구조를 표현할 수 있음.
단점
- 쿼리 처리시 데이터를 파싱 후 연산을 해야해서 큰 크기의 document를 다룰 때는 성능이 저하됨.
이렇게 관계형 DB와 비관계형 DB에 대해 알아보았는데요,
NoSQL이 언뜻 봐도 관계형 데이터베이스의 단점을 보완하기 위해 나온 데이터베이스라서
장점이 월등히 많은 것 같습니다. 단점이 거의 없는 것 같죠?
그러므로 시간이 갈 수록 점점 NoSQL의 쓰임이 점점 많아질 거라고 생각합니다.
출처
https://newehblog.tistory.com/38
16_Study(Partitioning) (0) | 2023.03.30 |
---|---|
16_Study(인덱스) (0) | 2023.03.30 |
11_Study(RESTAPI) (0) | 2023.03.22 |
11_Study(Headers) (0) | 2023.03.22 |
11_Study(쿠키) (0) | 2023.03.22 |