NoSQL은 뭐지? SQL을 안 쓰는 걸까
·
CS/DB
기존 RDB(Relational Database)의 한계관계형 데이터베이스(RDB)는 오랫동안 안정적인 데이터 저장소로 사용되어 왔다. 스키마가 명확하고, 트랜잭션과 정합성을 보장한다는 점에서 여전히 많은 시스템의 핵심 구성 요소다. 하지만 서비스 규모가 커질수록, RDB가 가진 구조적인 한계도 점점 분명해진다. 가장 먼저 마주치는 문제는 스키마 변경의 부담이다. 새로운 기능을 추가하면서 컬럼을 하나 더 넣어야 하는 상황이 생기면, RDB에서는 테이블 스키마 자체를 변경해야 한다.ALTER TABLE users ADD COLUMN profile_image_url TEXT; 데이터가 적을 때는 큰 문제가 되지 않지만, 이미 수백만 건 이상의 데이터가 쌓인 테이블이라면 이러한 스키마 변경은 락(lock)을 ..
DB 성능 문제, 구조를 나누는 것부터 시작하기
·
CS/DB
서비스를 운영하다 보면 데이터베이스의 크기는 자연스럽게 커진다. 사용자 수가 늘고, 로그와 이력 데이터가 쌓이며, 하나의 테이블에 수백만 건 이상의 데이터가 들어가게 된다. 이 시점부터는 단순히 “인덱스를 잘 잡으면 된다”는 접근만으로는 성능 문제를 해결하기 어려워진다. 테이블이 커질수록 읽기와 쓰기 비용은 증가하고, 인덱스 역시 함께 커지면서 쿼리 처리 시간이 점점 늘어난다. 이런 상황에서 데이터베이스 구조 자체를 나누는 전략이 필요해지는데, 그 대표적인 방법이 Partitioning, Sharding, 그리고 Replication이다.Vertical PartitioningVertical Partitioning은 컬럼(column) 기준으로 테이블을 분리하는 방식이다. 하나의 테이블에 너무 많은 컬럼이..
DBCP가 뭐지..?
·
CS/DB
백엔드 애플리케이션과 DB 서버 사이에서 벌어지는 일백엔드 애플리케이션은 클라이언트로부터 요청을 받으면 비즈니스 로직을 처리합니다. 그 과정에서 DB 서버에 쿼리를 요청한 뒤 결과를 받아 다시 클라이언트에게 전달하는데, 이때 두 서버는 대부분 서로 다른 컴퓨터이기 때문에 네트워크 통신을 하게 됩니다. 그리고 이 통신은 일반적으로 데이터 송수신의 신뢰성을 보장하는 TCP 기반으로 이루어집니다. TCP는 매우 안정적인 프로토콜이지만 이러한 안정성은 공짜가 아닙니다. 연결 지향적 프로토콜이기 때문에 통신을 시작할 때 연결을 맺는 과정이 필요하고, 통신이 끝날 때는 연결을 종료하는 과정이 필요합니다. 문제는 이 연결과 해제 과정이 생각보다 많은 비용을 요구한다는 점입니다. 만약 백엔드 서버가 DB 서버에 쿼리를..
데이터베이스 성능을 저하시키는 N+1 쿼리 문제란?
·
CS/DB
애플리케이션을 개발할 때, 데이터베이스 성능은 전체 서비스의 응답 속도에 큰 영향을 미칩니다. 여러 성능 저하 원인 중, 개발자가 인지하지 못한 채 반복적인 쿼리를 날려 발생하는 N+1 쿼리 문제는 가장 흔하면서도 치명적인 원인 중 하나입니다.N+1 문제가 뭐지..?N+1 문제란, 첫 번째 쿼리의 결과(N개)를 기반으로, 연관된 데이터를 얻기 위해 N번의 추가 쿼리가 발생하는 상황을 말합니다. 즉, 원래는 하나의 쿼리로 끝낼 수 있는 작업을 1 + N개의 쿼리로 처리하여 데이터베이스에 불필요한 부하를 주는 비효율적인 데이터 조회 방식입니다. 간단한 예시를 통해 자세히 알아보겠습니다. 모든 회원의 주문 내역을 조회하고 싶어!쇼핑몰의 회원(user) 테이블과 주문(orders) 테이블이 있다고 가정해봅시다...