< 2024.08.27 업로드 >
안녕하세요! SSAFYcial 12기 기자단 안수진 입니다.
저는 싸피 생활을 하면서 알고리즘 스터디 뿐만 아니라
개발자로서 CS지식을 쌓기 위해서 틈틈이 CS공부도 하고 있는데요!
기획기사 [그것을 알려드림 : 기술편]을 진행하면서 제가 공부하면서 궁금했던 CS지식, IT기술을 다룰 예정입니다!
😍 RDB와 NoSQL가 무엇인지 탐구하러 가볼까요? 😍
✍️ RDB(Relational Database)
데이터를 표(table) 형식으로 저장하며, 각 표는 행(row)과 열(column)로 구성된다.
이렇게 표현된 데이터베이스는 SQL을 통해 관리 및 접근한다.
- 스키마 기반: 데이터를 저장하기 전에 정해진 데이터 스키마에 따라 구조화된다.
- 관계형 모델: 여러 테이블 간의 관계를 설정해 데이터 분산 저장이 가능
- ACID 특성 보장:
- 원자성(Atomicity): 모든 작업이 완전히 수행되거나 전혀 수행되지 않음
- 일관성(Consistency): 데이터는 항상 일관성을 유지
- 고립성(Isolation): 트랜잭션 간의 간섭 방지
- 지속성(Durability): 작업 완료 후 데이터는 영구적으로 저장
- 비관적 락 사용: 충돌 방지를 위해 데이터에 락을 걸어 동시성 제어를 한다.
✍️ NoSQL
table 형식이 아닌 비정형/반정형 데이터를 저장하며 다양한 모델(키-값, 문서, 컬럼, 그래프 등)을 지원한다.
- 유연한 스키마: 스키마가 없거나 자주 변경 가능한 구조
- BASE 특성 준수:
- 기본적 가용성(Basically Available): 데이터의 기본적인 가용성을 보장
- Soft State: 데이터 상태는 일시적으로 일관성이 없을 수 있음
- Eventually Consistent: 일정 시간이 지나면 최종적으로 일관성 보장
- 낙관적 락 사용: 충돌 발생 시 개발자가 직접 처리(versioning, 예외 처리 등)
- 데이터 중복: 데이터를 한 문서(Document)에 포함하여 JOIN 연산이 불필요하다.
NoSQL은 위 RDB 예시 사진에서 Orders에 모든 Users, Product 데이터를 포함해서 저장하게 됩니다.
즉, NoSQL은 이미 필요한 모든 것을 갖춘 문서를 작성한 것이기 때문에 조인 이라는 개념이 존재하지 않습니다.
🤔 그럼에도 조인하고 싶은 경우에는?
- 애플리케이션 코드에서 조인을 구현하거나
- 조인을 위한 관련된 데이터를 중복 저장할 수 있다.
- 컬렉션을 통해 데이터를 복제하여 각 컬렉션 일부분에 속하는 데이터를 정확하게 산출하도록 한다.
✍️ 데이터 확장
RDB와 NoSQL은 각각의 장점을 기반으로 데이터 관리 방식을 제공하지만, 서비스가 성장하고 데이터의 양과 사용자가 늘어날수록 데이터베이스의 확장성이 중요한 고려 사항이 됩니다.
그렇다면 이러한 데이터베이스는 어떻게 확장성을 지원하며, 어떤 방식이 더 적합할까요? 이제 데이터 확장의 개념과 두 가지 주요 방식인 수직적 확장(Scale-Up)과 수평적 확장(Scale-Out)에 대해 알아보겠습니다.
📌 수직적 확장(Scale-Up)
기존의 서버 성능을 향상시키기 위해 CPU, 메모리, 스토리지 등 하드웨어를 업그레이드하는 방식.
서버 아키텍처를 크게 변경하지 않고 성능을 향상시킬 수 있으며, 관리해야 할 서버가 하나뿐이기 때문에
단순하고 일관성을 유지하기 유리하다.
Scale-Up은 데이터 정합성이 중요한 RDBMS에서 적합합니다.
여러 서버에서 요청을 처리하는 것이 아니라, 한 대의 서버에서 모든 요청을 처리하기 때문에 동일한 데이터를 유지할 수 있습니다!
더 자세하게 설명하자면,
RDBMS는 ACID(원자성, 일관성, 격리성, 지속성) 특성을 보장하는데
이는 하나의 서버에서 모든 요청을 처리하기 때문에 동일한 데이터를 유지하는 데 유리합니다.
여러 서버에서 데이터를 처리할 경우 트랜잭션 간의 일관성이나 격리성을 보장하기 어려워지므로,
단일 서버 환경에서 RDBMS의 장점을 잘 살릴 수 있습니다. 또한, 데이터베이스가 커져도 성능을 유지하면서 일관성을 보장할 수 있습니다.
단일 서버에서 트랜잭션 처리하는 경우
BEGIN TRANSACTION;
-- A 계좌에서 1000원 출금
UPDATE accounts SET balance = balance - 1000 WHERE id = 'A';
-- B 계좌로 1000원 입금
UPDATE accounts SET balance = balance + 1000 WHERE id = 'B';
COMMIT;
두 개의 UPDATE 작업이 하나의 트랜잭션으로 묶여 있습니다.
이 경우 서버가 하나뿐이기 때문에 트랜잭션의 원자성과 일관성을 쉽게 보장할 수 있습니다.
만약 여러 서버에서 작업을 처리한다면, 트랜잭션 처리의 일관성을 보장하기 어려워질 수 있습니다.
📌 수평적 확장(Scale-Out)
수평적 확장은 서버를 추가로 설치하여 여러 대의 서버가 함께 요청을 처리하는 방식.
서버의 부하를 분산시켜 처리하므로 확장성 및 장애 내성이 뛰어나며, 서비스의 안정성을 높일 수 있다.
단일 서버에서 더이상 성능을 높일 수 없을 때, 여러 서버를 추가하여 성능을 확장할 수 있습니다.
하나의 서버에 의존하지 않으므로, 서버 하나가 고장나더라도 나머지 다른 서버로 서비스를 유지할 수 있습니다.
NoSQL 시스템에 적합하며, 대규모 웹 서비스나 클라우드 환경에서 주로 사용됩니다!
수평적 확장은 대규모 데이터 처리와 빠른 확장이 필요한 시스템에서 적합합니다.
NoSQL 데이터베이스는 스케일 아웃(Scale-Out)을 쉽게 지원하기 때문에, 여러 서버에 데이터를 분산하여 처리할 수 있습니다.
NoSQL 시스템은 동일한 데이터를 유지하기 위한 복잡한 트랜잭션 처리가 필요 없는 경우가 많고,
비정형 데이터를 처리할 때 뛰어난 성능을 보입니다. 데이터가 대규모로 늘어날수록 수평적 확장을 통해 서버를 추가하며
시스템의 성능을 확장할 수 있기 때문에 클라우드 환경이나 대규모 웹 서비스에서 많이 사용됩니다.
✍️ RDB vs NoSQL
RDB (Relational Database) | NoSQL (Not Only SQL) | |
데이터 모델 | 테이블 기반, 정형 데이터 | 키-값, 문서, 컬럼, 그래프 등 다양한 모델 |
스키마 | 고정된 스키마, 사전 정의 필요 | 스키마가 없거나 유연한 스키마 |
확장성 | 수직적 확장 (서버 성능 향상) | 수평적 확장 (서버 추가) |
트랜잭션 처리 | ACID 속성 준수, 강력한 트랜잭션 관리 | 일관성보다 성능을 우선, CAP 이론에서 가용성 중시 |
관계 관리 | 외래 키 등을 통한 테이블 간의 관계 설정 | 비관계형, 필요 시 애플리케이션에서 관계 처리 |
언어 | SQL (Structured Query Language) | 고유의 쿼리 언어 또는 API 사용 |
예시 | MySQL, PostgreSQL, Oracle Database, SQL Server | MongoDB, Cassandra, Redis, Couchbase |
각 솔루션은 어떤 데이터를 다루느냐에 따라 선택을 고려할 수 있습니다.
이럴때 RDB를 사용하자!
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
- 데이터 일관성과 정합성이 중요한 트랜잭션 시스템일 경우
이럴때 NoSQL을 사용하자!
- 데이터 스키마가 자주 변경되거나 유연성이 필요한 경우
- 빠른 읽기/쓰기 성능이 중요한 경우
- 데이터베이스를 수평으로 확장해야 하는 경우 (막대한 양의 데이터를 다뤄야 하는 경우)
🗂️ References
DB확장을 하는 두가지 방법 - 스케일 아웃과 스케일 업
👀 SSAFY의 다양한 소식과 이야기를 더 알고 싶다면
'SSAFY' 카테고리의 다른 글
[싸피셜이 알려드림: 기술편] Servlet이 뭘까? (0) | 2024.12.21 |
---|---|
[싸피셜이 알려드림: SSAFY편] 벌써 13기 모집? 알려줄게 SSAFY의 모든 것!! (0) | 2024.12.16 |
[싸피셜이 알려드림: 기술편] Socket 통신이 뭘까? (1) | 2024.12.16 |
[싸피셜이 알려드림: SSAFY편] SSAFY 12기 싸피셜이 알려주는 SSAFY 지원 꿀팁! (2) | 2024.12.16 |
[싸피셜이 알려드림: 인물편] SSAFY 12기 조유정 교육생 (1) | 2024.11.05 |