SQL vs NoSQL: 당신의 프로젝트에 맞는 데이터베이스는?
Database
데이터베이스를 선택하는 것은 건물을 지을 때 지반을 다지는 것과 같습니다. 나중에 바꾸려면 엄청난 공사가 필요하죠. 수십 년간 왕좌를 지켜온 **RDBMS(SQL)**와, 빅데이터 시대의 총아 NoSQL. 이 둘의 차이를 명확히 알고 내 프로젝트에 맞는 것을 골라봅시다.
1. SQL (관계형 데이터베이스)
MySQL, PostgreSQL, Oracle 등이 여기 속합니다. 데이터를 **테이블(Table)**에 저장하고, 각 테이블은 **행(Row)**과 **열(Column)**로 구성됩니다. 테이블 간의 관계(Relation)를 통해 데이터를 연결합니다.
1.1 장점
- 데이터 일관성(Consistency): 스키마가 엄격합니다. 정해진 타입의 데이터만 들어올 수 있어 데이터 무결성이 보장됩니다.
- JOIN: 복잡한 관계의 데이터를 한 번의 쿼리로 가져올 수 있습니다.
- 표준화: SQL 언어는 거의 표준화되어 있어 학습 장벽이 낮습니다.
1.2 단점
- 확장성(Scalability): 데이터가 많아지면 서버 성능을 높여야 합니다(Scale-up). 장비를 업그레이드하는 비용이 비쌉니다. (물론 샤딩 등을 통해 Scale-out도 가능하지만 복잡합니다.)
- 유연성 부족: 스키마를 변경하려면 테이블 전체를 잠그거나 마이그레이션 작업을 해야 하므로, 기민한 변화가 어렵습니다.
2. NoSQL (비관계형 데이터베이스)
MongoDB, Redis, Cassandra 등이 있습니다. SQL처럼 고정된 테이블이 없습니다. Document, Key-Value, Graph 등 다양한 형태로 저장합니다.
2.1 장점
- 유연성(Flexibility): 스키마가 없습니다(Schemaless). 데이터 구조가 자주 바뀌는 스타트업 초기 단계에 유리합니다.
- 확장성: 수평적 확장(Scale-out)이 쉽습니다. 서버를 여러 대 붙여서 용량을 늘리는 것이 자연스럽습니다. 대용량 트래픽 처리에 적합합니다.
2.2 단점
- 데이터 중복: JOIN이 없거나 비효율적이어서, 데이터를 읽을 때 편하게 하기 위해 중복해서 저장하는 경우가 많습니다. 데이터 업데이트 시 모든 중복 데이터를 찾아 수정해야 합니다.
- 일관성 보장 미흡: 트랜잭션 지원이 RDBMS보다 약한 경우가 많습니다. (최근엔 많이 좋아졌지만요)
3. 언제 무엇을 쓸까?
- SQL: 금융 데이터, 결제 시스템, 회원 정보 등 데이터의 정확성과 일관성이 생명인 경우. 데이터 구조가 명확하고 자주 변하지 않는 경우.
- NoSQL: SNS 피드, 로그 데이터, 실시간 채팅 메시지 등 데이터 양이 엄청나게 많고 구조가 비정형적인 경우. 빠른 조회 속도가 중요한 경우.
요즘은 **Polyglot Persistence(다중 저장소 지속성)**라고 해서, 하나의 서비스 안에서도 핵심 데이터는 PostgreSQL에, 캐시는 Redis에, 로그는 MongoDB에 저장하는 식으로 섞어서 쓰는 추세입니다.