여태껏 국비 학원, 프로젝트를 통해 MySQL과 Oracle을 실습하며 관계형 데이터베이스(RDBMS)를 직접 경험했다. 프로젝트 중에는 Access Token 탈취에 대비해 Refresh Token을 발급하도록 했고, 이때 Refresh Token은 Redis에 저장하는 것이 용이하다는 자료들을 볼 수 있었다. 그리고 MongoDB, Redis 등 NoSQL 사용 경험을 필수 또는 우대사항에 넣은 채용 공고들도 확인하면서 NoSQL에 대해 알아본 후 정리해봐야겠다고 생각했다.
+ 프리티어 계정에서 t2.micro 노드로 AWS Elasticache 사용시 redis를 무료로 사용할 수 있다..! 여태껏 잘못 알고 있어 프로젝트에 적용하지 않았었는데 바로 시도해봐야겠다.
참고자료:
NoSQL
: 비관계형 데이터베이스
- not only SQL
- 관계형 데이터베이스를 보완할(점점 증가하는 데이터의 다양성, 속도, 양을 감당 가능한) 데이터베이스가 필요해 등장
- 특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 데이터베이스
- 현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖춤 (사전에 스키마를 정의하지 않아도 데이터 저장 가능)
- 다양한 질의 언어 사용 가능
- 데이터베이스는 그래프 기반, 열 지향, 문서 지향, 키-값 저장소 등 다양한 유형으로 분류 가능
※ RDBMS : 관계형 데이터베이스
- 구조화된 쿼리 언어(SQL) 기반
- 데이터는 테이블(행, 열로 구성된 관계형 데이터 항목 모음)에 저장됨
- 스키마를 사전에 정의해야 함 => 모든 열, 데이터 유형이 사전 파악되어야 애플리케이션 데이터를 DB에 작성 가능
- 키를 사용해 여러 테이블 연결하는 방식으로 정보 저장 => 여러 테이블 간 관계 형성
- 특징
높은 확장성, 가용성 => 실시간 웹 애플리케이션 및 빅 데이터에 적합
변화하는 요구 사항에 빠르게 적응함 => 민첩한 개발 패러다임에 자연스럽게 활용 가능
데이터가 직관적이고 이해하기 쉬운 방식 또는 애플리케이션이 사용하는 것에 가까운 방식으로 저장됨
저장/검색 시 데이터 변환의 필요성 감소
- NoSQL에 적합한 애플리케이션
유연한 스키마, 대량의 데이터, 낮은 대기시간/응답시간을 요구하는 애플리케이션
상대적으로 적은 수의 데이터(or 컨테이너)를 사용하는 애플리케이션
참조로 데이터 관계를 모델링하지 않고, 포함된 기록(or 문서)으로 모델링하는 애플리케이션
ex) 온라인 게이밍 및 전자상거래 웹 애플리케이션
- NoSQL에 부적합한 애플리케이션
금융, 회계 관련 전형적 백오피스 비즈니스 애플리케이션
=> 데이터 변형 및 중복을 방지하기 위해 고도로 정규화된 데이터에 의존함
쿼리의 복잡성이 높은 애플리케이션
=> NoSQL DB는 복잡한 조인, 하위 쿼리, WHERE 중첩 질의에 부적합 (단일 테이블에 대한 쿼리 작업에는 잘 작동)
- NoSQL DB의 장점
1. 유연성
하나의 데이터 저장소에서 구조적, 반구조적, 비구조적 데이터 등 모든 형식의 데이터를 손쉽게 처리 (유연한 스키마)
=> 자유로운 형식으로 저장할 수 있어 혁신적, 빠른 애플리케이션 개발 가능해짐
=> 개발자들은 스키마 걱정없이 시스템 개발에 집중 가능
2. 확장성
서버를 증설해 확장하는 대신 상업용 하드웨어를 사용해 확장 가능
=> 증가한 트래픽을 지원하고 다운타임 없이 수요를 충족
=> 확장 통해 더 큰 용량과 성능을 갖출 수 있음 =>데이터 세트 확장 가능
3. 고성능
데이터 양이나 트래픽이 증가할 때 유연하게 대응
빠르고 예측 가능한 10밀리초 미만의 응답 시간 보장
데이터를 수집, 빠르고 안정적으로 제공 => 매일 테라바이트 규모의 데이터 수집 + 고도의 대화식 사용자 경험을 제공하는 애플리케이션에 활용됨
4. 가용성
여러 서버, 데이터 센터, 클라우드 리소스 전반의 데이터를 자동 복제
=> 사용자의 위치와 상관없이 사용자 대기시간이 최소화
=> 데이터베이스 관리 부담 감소
5. 고도의 기능성
데이터 저장 수요가 매우 큰 분산형 데이터 저장소를 위해 설계됨
=> 빅 데이터, 실시간 웹 앱, 360도 고객 정보, 온라인 쇼핑, 온라인 게이밍, 사물인터넷, 소셜 네트워크, 온라인 광고 애플리케이션 등 처리 가능
- NoSQL DB 유형
1. 키-값 DB : 각 항목에 키와 값이 포함된 간단한 유형
가장 유연한 NoSQL 데이터베이스 유형
애플리케이션이 값 필드에 저장된 모든 데이터를 제약없이 완벽하게 제어
단순 문자열/단일 키/키 세트/삭제 키/다중 키를 사용해 관련 값에 액세스 가능
대량의 데이터를 저장해야 하지만 빈번한 업데이트, 복잡한 쿼리를 수행할 필요가 없는 사용 사례에 적합
사용자 선호도 저장, 캐싱, 장바구니, 세션 저장소에 사용됨
ex) Redis, DynanoDB
2. 문서 DB (=문서 저장소, 문서 지향적 데이터베이스) : JSON 객체와 비슷한 문서에 데이터 저장
각 문서에는 필드와 값의 쌍이 포함됨
문서에 포함할 필드를 특정할 필요 없음
문자열, 숫자, 불리언(boolean), 어레이, 객체 등 다양한 값 유형
다양한 필드 값 유형과 강력한 쿼리 언어 => 범용 데이터베이스로도 사용 가능
구조는 개발자가 코드에서 사용하고 있는 객체에 맞춰 조정 가능 => 반구조적 데이터 저장, 검색, 관리
대량의 데이터를 수용하도록 수평 Scale-out 가능
ex) MongoDB
3. 그래프 DB : 데이터를 노드 및 노드 간 연결을 보여주는 관계로 구성
노드와 에지에 데이터 저장 (노드: 일반적으로 사람, 장소, 사물 관련 정보 저장 / 에지: 노드 간의 관계에 대한 정보 저장)
고도로 연결된 데이터세트를 사용하는 애플리케이션에 적합
소셜 네트워크, 예약 시스템, 사기 감지, 추천 엔진 등 관계를 상세 검토해야 하는 사례에 적합
ex) Neo4j, JanusGraph
4. 넓은 열 DB (=와이드 컬럼) : 테이블, 행, 동적 열에 데이터 저장
열 형식을 사용하는 애플리케이션에 광범위하게 배포되어, 스키마 없는 데이터를 수집함
각 행이 동일한 열을 가질 필요가 없다는 점에서 관계형 데이터베이스에 대해 뛰어난 유연성을 제공
대량의 데이터를 저장해야 할 때 적합, 쿼리 패턴 예측 가능
사물인터넷 데이터, 사용자 프로필 데이터 저장 시 사용
ex) Cassandra, HBase
'Programming' 카테고리의 다른 글
[MSSQL] MSSQL 에이전트 작업 알림 메일 (SMTP) 설정하기 (1) | 2024.03.23 |
---|---|
[프로그래머스/자바] 점프와 순간 이동 (0) | 2024.02.04 |
[Git] Head? Stage? Branch? (0) | 2023.05.15 |
nGrinder 부하 테스트 - (1) 설치, 스크립트 작성 (오류 발생) (0) | 2023.05.04 |
소프트웨어 아키텍처, 도메인 (0) | 2023.03.09 |