1. 들어가기
1-1 면접에서 질문하는 의도는?
1-2 SQL과 NoSQL 큰 틀에서 보기2. SQL(RDB)
2-1 RDB 특징
2-2 RDBMS 종류3. NoSQL
3-1 NoSQL 특징
3-2 NoSQL 종류4. SQL vs NoSQL
4-1 비교하기
4-2 각각 어떤 상황에서 쓰일까?
4-3 관련 면접 질문들
백엔드 개발자 기술면접에서 SQL vs NoSQL 를 물어보는 이유는 무엇일까?
SQL(관계형 데이터베이스)와 NoSQL(비관계형 데이터베이스)은 데이터를 저장, 조회, 관리하는 방법이 다릅니다.
면접관은 지원자가 이 두 시스템의 차이점을 이해하고 있는지 확인하고 싶어할 것입니다.
SQL은 엄격한 데이터 구조를 가지며, 정규화와 정밀한 트랜잭션을 통해 안정성을 제공하는 반면,
NoSQL은 유연성, 확장성, 빠른 읽기/쓰기 속도를 제공합니다.
데이터 무결성이 필요한 경우
SQL
을, 대용량 데이터를 다루고 빠른 성능과 확장성이 필요한 경우에는NoSQL
을 선택할 수 있습니다.
RDB(Relational Database)는 관계형 데이터 모델에 기초를 둔 데이터베이스입니다.
특징으로는 서로 다른 테이블들이 관계를 맺고 있으며, 스키마를 통해 데이터 구조를 엄격하게 정의한다는 것 입니다.
RDBMS는 강력한 트랜잭션 처리를 지원하며, 데이터의 무결성을 보장하여 데이터 처리를 안전하게 한다는 특징이 있습니다.
RDBMS의 종류들 중 MySQL, Oracle, MariaDB, PostgreSQL의 주요 특징에 대해서 살펴보겠습니다.
Java의 HashMap 자료구조와 같이 Key 하나에 Value
데이터가 전달되는 구조이며, 이 구조는 특히 빠른 검색 과 데이터 접근을 위해 최적화되어 있습니다. 대표적으로 Redis
가 있습니다.
Redis 특징
- 간결한 Key-Value 구조를 사용 사용하고, 인 메모리(데이터를 RAM에 저장) 구조를 활용하여 빠른 데이터 처리/응답이 필요한 상황에서 뛰어난 속도를 제공합니다.
- MySQL과 같은 메인DB를 두고 서브DB로 많이 쓰이는데, 캐싱, 세션 관리, pub/sub, 인증 토큰(refresh token) 저장 등에 사용됩니다.
- 한 Redis 인스턴스 내에 다양한 타입의 데이터를 저장할 수 있습니다.
이미지 출처: https://linuxhint.com/redis-getex/
💡 Redis 가 빠른 이유?
Redis는 데이터 접근 시 해시를 사용하여 시간 복잡도가 O(1)이 걸리며,
RDBMS의 MySQL의 경우 인덱스가 없는 경우 풀스캔을 해야하므로 시간 복잡도가 O(n)이 소요됩니다. (인덱스가 있는 경우 O(log n)으로 개선되지만 그래도 레디스의 O(1) 보다는 느립니다)
이로 인해 Redis는 서비스가 성장해서 데이터량이 많아져도 응답 속도가 보장이 되므로, 리스크가 적습니다.
데이터를 테이블이 아닌 문서처럼 저장하는 형태이며, JSON 형태의 데이터를 BSON(Binary JSON)으로 문서화 하여 저장하며, 컬렉션이라고 하는 그룹으로 묶어서 관리됩니다. 대표적으로는 MongoDB
가 있습니다.
MongoDB 특징
- 문서 지향 데이터베이스 입니다.
- 유연한 스키마를 가지며, 이로 인해 요구 사항이 변화함에 따라 데이터베이스 스키마를 쉽게 조정할 수 있습니다.
<구조>
MogoDB 안에는 여러개의 Collection이 들어있고, Collection은 여러개의 Document로 이루어져 있습니다.
RDB의 Table = MongoDB의 Collection,
RDB의 Row = MongoDB의 Document
이미지 출처: https://www.mongodb.com/docs/manual/core/databases-and-collections/
💡 MongoDB의 스키마 변경이 자유로운 이유
서로 연관된 관계형 데이터베이스에서 스키마를 변경하는 것은 위험할 수 있습니다.
이는 다른 테이블 데이터에 영향을 미쳐 문제를 일으킬 수 있기 때문입니다.
반면에 MongoDB는 스키마를 변경하려면 document에 필드를 추가,변경 또는 제거하면 되는데, 한 collection 안의 document들은 각각 다른 필드를 가질 수 있기 때문에
이러한 변경이 다른 document에 영향을 미치지 않습니다.
나머지 NoSQL 데이터베이스는 그래프 구조 DB로는 대표적으로 Neo4j
가 있고, 컬럼 패밀리 구조 DB는 Cassandra
가 있으며, 이 외에도 Key-Value 구조이면서 Document 기능도 포함한 DB인 DynamoDB
가 있습니다.
1. Scalability(확장성)
💡 서비스의 규모가 커지고, 사용자 수가 증가하며, 데이터 처리 요구사항이 늘어나는 상황에서 데이터를 안정적으로 처리하기 위해 사용하는 전략: Scale Up
, Scale Out
수직적 확장성(Scale Up): RDBMS
수평적 확장성(Scale Out): NoSQL
💡 분산 시스템이란?
데이터를 여러 대의 컴퓨터 노드에 분산하여 저장하고 처리하는 시스템을 말합니다.
병렬 구조로 인해 노드 중 하나가 다운되어도 시스템 전체가 중단되지 않도록 하여 가용성을 높여주고,
각 노드는 자신에게 해당되는 일부 데이터만 처리하도록 하여 빠른 처리가 가능합니다.
2. 스키마
RDBMS
NoSQL
Q1. SQL과 NoSQL을 비교해서 설명해주세요.
A. RDBMS는 정해진 스키마를 통해 데이터 무결성을 보장하며, 수직적 확장성에 의존하는 특징이 있습니다. 반면, NoSQL은 스키마가 없어 데이터 구조의 자유로운 변경과 수평적 확장성을 가능하게 하지만, 데이터 중복이 발생하거나 데이터 변경 시 연산이 지연될 수 있습니다.
Q2. RDBMS와 NoSQL은 어느 경우에 적합한가요?
A. RDBMS은 데이터 무결성과 일관성이 중요한 트랜잭션 업무에 적합하며 데이터 간 관계를 맺고 자주 업데이트되는 환경에서 효율적입니다.
반면에, NoSQL은 대용량 데이터 처리와 높은 확장성이 중요한 환경에 적합하며 데이터 읽기 작업과 쓰기 작업을 많이 하는 경우에 유리합니다.
Q3. Redis에 대해 설명해주세요
A. Redis는 인메모리 기반의 Key-Value 구조를 가진 NoSQL 데이터베이스입니다. 싱글 스레드로 동작하며, 캐싱 및 세션 관리 등에 사용됩니다.
[DB] RDB 관계형 데이터베이스란 무엇일까?
https://yunyoung1819.tistory.com/201
https://benlee73.tistory.com/178
https://aws.amazon.com/ko/nosql/
[백엔드 로드맵 - DB] SQL vs NoSQL
https://www.youtube.com/watch?v=CjsVx9sARDU
https://www.youtube.com/watch?v=cnPRFqukzek
https://bruno-jang.tistory.com/34