Replies: 6 comments
1. 데이터베이스에는 어떤 종류가 있으며, 각각 어떤 특징이 있나요?데이터베이스는 데이터를 어떻게 저장하고 관계를 표현하는지에 따라 나눌 수 있다. 가장 대표적인 것은 관계형 데이터베이스(RDBMS)로, 데이터를 행과 열로 된 표에 저장하고 여러 표를 연결해 관리한다. 예를 들어 회원 표와 주문 표를 회원 번호로 연결할 수 있다. 구조가 명확하고 복잡한 조회나 거래 처리에 강하며, MySQL, PostgreSQL 등이 여기에 속한다. NoSQL 데이터베이스는 표 형태에 얽매이지 않고 목적에 맞는 방식으로 데이터를 저장한다. 문서형은 JSON과 비슷한 문서 단위로 저장해 게시글처럼 항목별 구조가 조금씩 다른 데이터에 편리하다(MongoDB). 키-값형은 이름표인 '키'로 값을 빠르게 찾는 방식이라 캐시나 로그인 세션에 많이 쓴다(Redis). 그래프형은 사람과 친구 관계처럼 데이터 사이의 연결을 표현하고 탐색하는데 강하다(Neo4j). 열 계열은 많은 양의 데이터를 여러 서버에 분산해 처리하는 데 적합하다(Cassandra). 어떤 종류가 가장 좋은지는 데이터의 모양과 주로 어떤 조회를 할지에 따라 달라진다. 2. 데이터베이스 종류에 따라 어떤 트레이드오프가 발생하나요?데이터베이스를 고를 때는 보통 데이터 구조의 유연성, 조회 방식, 데이터의 정확성, 확장 방법 사이에서 절충이 생긴다. 관계형 데이터베이스는 문서마다 항목이 조금씩 달라도 저장하기 편하다. 제품마다 속성이 다른 상품 목록에 유용하지만, 여러 문서에 흩어진 정보를 복잡하게 연결해 조회하거나 함께 수정해야 한다면 설계에 더 신경 써야 한다. 키-값형은 키로 값을 빠르게 찾는 데 강하지만, 값의 내부 조건을 기준으로 다양하게 검색하는 데는 적합하지 않다. 그래프형은 친구의 친구 찾기처럼 관계를 따라가는 조회에 강하지만, 일반적인 표 형태의 집계가 주된 작업이라면 장점이 크지 않을 수 있다. 열 계열은 대량 데이터를 여러 서버에 분산해 읽고 쓰는 데 유리하지만, 원하는 조회 방식에 맞춰 데이터를 설계해야 하는 경우가 많다. 즉, 모든 작업에 가장 좋은 종류는 없다. 주문·결제처럼 여러 데이터를 정확히 함께 처리해야 하면 관계형이 좋은 출발점이고, 데이터 형태가 자주 달라지거나 특정 방식의 조회가 압도적으로 많다면 그에 맞는 NoSQL을 고려한다. 다만 실제 기능과 성능은 데이터베이스 제품과 설정에 따라 달라진다. 3. 실제 시스템에서는 어떤 기준으로 데이터베이스를 선택하나요?실제 시스템에서는 데이터의 모양보다 그 데이터를 어떻게 사용해야 하는지를 먼저 본다. 예를 들어 주문·결제 시스템은 재고 감소와 결제 기록이 함께 정확하게 반영되어야 하므로 거래 처리와 데이터 일관성이 중요하다. 이런 경우 관계형 데이터베이스를 우선 고려한다. 반면 로그인 세션처럼 키로 빠르게 찾아야 하는 데이터는 키-값형, 친구 관계처럼 연결을 여러 단계 따라가야 하는 데이터는 그래프형이 적합할 수 있다. 그다음에는 자주 실행할 조회의 종류와 데이터량, 예상 사용자가 늘었을 때의 확장 방법, 운영 난이도와 비용을 따진다. 기능이 잘 맞아도 팀이 익숙하지 않거나 백업·복구가 어렵다면 실제 운영에 부담이 될 수 있기 때문이다. 보통은 관계형 데이터베이스로 시작해 요구사항을 확인하고, 특정 작업에서 필요가 분명해지면 캐시용 키-값형 데이터베이스 등을 추가한다. 한 시스템에서 여러 종류를 함께 쓰는 것도 흔하지만, 종류가 늘수록 데이터를 맞춰 관리할 일이 많아지므로 필요한 이유가 명확할 때 선택하는 것이 좋다. |
1. 데이터베이스에는 어떤 종류가 있으며, 각각 어떤 특징이 있나요?데이터베이스는 데이터를 저장하는 구조와 조회 방식에 따라 여러 종류로 나눌 수 있습니다.
데이터베이스는 크게 관계형 데이터베이스와 NoSQL 데이터베이스로 구분할 수 있습니다. 관계형 데이터베이스는 데이터를 테이블 형태로 저장하고 SQL과 JOIN을 사용하며, 트랜잭션과 데이터 일관성이 중요한 주문이나 결제 시스템에 적합합니다. 2. 데이터베이스 종류에 따라 어떤 트레이드오프가 발생하나요?주요 트레이드오프
데이터베이스를 선택할 때는 일관성, 가용성, 확장성, 조회 편의성 사이에서 트레이드오프가 발생합니다. 예를 들어 관계형 데이터베이스는 트랜잭션과 JOIN을 통해 데이터의 정확성과 관계를 관리하기 쉽지만, 대규모 분산 환경에서는 확장이 복잡할 수 있습니다.
3. 실제 시스템에서는 어떤 기준으로 데이터베이스를 선택하나요?데이터베이스는 단순히 속도가 빠르거나 유명하다는 이유로 선택하면 안 됩니다. 실제 시스템에서는 먼저 데이터의 형태와 주요 조회 패턴을 확인해야 합니다. 그다음 트랜잭션과 일관성이 얼마나 중요한지, 데이터와 요청이 어느 정도까지 증가할지, 읽기와 쓰기 중 어떤 작업이 많은지를 판단합니다. 주요 선택 기준
시스템별 예시
|
1. 데이터베이스에는 어떤 종류가 있으며, 각각 어떤 특징이 있나요?→ 관계형 DB는 스키마가 고정되어 있고 테이블 간 관계와 트랜잭션을 보장하는 데 강합니다. NoSQL 계열은 목적별로 나뉘는데, 문서형DB는 스키마가 유연한 JSON 구조 저장에, 키-값형은 빠른 조회/캐싱에, 컬럼형은 대용량 쓰기와 분산 확장에, 그래프형은 관계가 복잡한 데이터 탐색에 특화되어 있습니다. 2. 데이터베이스 종류에 따라 어떤 트레이드오프가 발생하나요?→ 관계형 DB는 정합성과 트랜잭션 보장이 강한 대신 수평 확장이 상대적으로 어렵고 스키마 변경 비용이 큽니다. NoSQL은 확장성과 쓰기 처리량 스키마 유연성이 좋은 대신 강한 일관성을 포기하고 최종적 일관성을 택하는 경우가 많아 트랜잭션 보장이 약합니다. 결국 CAP 이론처럼 일관성, 가용성, 파티션 내성 중 무엇을 우선할지에 따라 선택이 갈립니다. 3. 실제 시스템에서는 어떤 기준으로 데이터베이스를 선택하나요?→ 데이터 간 관계가 중요하고 트랜잭션 정합성이 필수적인 결제나 정산 같은 도메인은 관계형 DB를 선택하고 트래픽이 크고 스키마가 자주 바뀌거나 읽기와 쓰기 속도가 중요한 로그, 캐시, 세션, 데이터는 NoSQL을 선택하는 식으로 데이터 구조의 고정성, 트랜잭션 필요 여부, 확장성 요구, 조회 패턴을 기준으로 판단합니다. 실무에서는 하나만 쓰기보다 RDBMS와 Redis 캐시를 합한것처럼 여러 DB를 목적별로 조합해서 쓰는 경우가 많다고 합니다. |
기본 질문1. 데이터베이스에는 어떤 종류가 있으며, 각각 어떤 특징이 있나요?데이터베이스는 크게 관계형 데이터베이스(RDBMS), 비관계형 데이터베이스(NoSQL), 특수 목적 데이터베이스로 분류 체계를 나눠볼 수 있습니다. 각 분류에서는 관계형 데이터 베이스에서는 관계형 DB, 비관계형 데이터베이스에서는 문서 지향 DB, 키-밸류 DB, 열 지향 DB, 그래프 DB 그리고 특수 목적 데이터베이스에서는 인메모리 DB, 벡터 DB, 시계열 DB가 있습니다. 각각의 특징은 관계형 DB는 데이터를 행과 열의 테이블로 관리하고 표준 질의 언어가 존재합니다. 문서 지향 DB는 데이터를 JSON, BSON 형태의 문서로 저장하고, 키-밸류 DB는 키와 밸류의 쌍으로 데이터를 저장합니다. 열 지향 DB는 행이 아닌 열 단위로 묶어 데이터를 저장하고, 그래프 DB는 데이터를 노드와 간선으로 표현합니다. 인메모리 DB는 데이터를 디스크가 아닌 메모리에 저장하고, 벡터 DB는 임베딩 모델을 통해 데이터를 고차원 수치 벡터로 변환하여 저장합니다. 마지막으로 시계열 DB는 시간의 흐름에 따라 데이터를 저장하는 특징을 가집니다. 2. 데이터베이스 종류에 따라 어떤 트레이드오프가 발생하나요?관계형 DB는 엄격한 스키마 기반의 높은 데이터 일관성과 ACID 트랜잭션을 얻는 대신, 스키마 변경이 까다롭고 대용량 데이터 처리 시 수평적 확장이 어렵다는 트레이드오프가 있습니다. 비관계형 DB 중 문서 지향 DB는 JSON 형태의 자유롭고 유연한 데이터 구조 저장 능력을 얻지만, 조인 연산이 약해 데이터 중복이 발생하기 쉽고 서비스 단에서 일관성을 유지해야 하는 부담이 생깁니다. 키-밸류 DB는 키 기반의 빠른 단순 읽기·쓰기 속도를 얻는 대신, 값 내부 필드 조건 검색이나 범주 검색 같은 복잡한 조회가 불가능에 가깝다는 한계가 있습니다. 열 지향 DB는 초당 수만 건의 쓰기와 대규모 집계 분석 성능을 얻지만, 특정 단일 행에 대한 개별 CRUD 작업 효율이 낮아집니다. 그래프 DB는 N단계 건너뛴 데이터 관계 탐색에 뛰어난 속도를 보여주지만, 단순 데이터 대량 집계나 일괄 삽입 시 성능이 떨어집니다. 특수 목적 DB 중 인메모리 DB는 메인 메모리 사용을 통해 마이크로초 단위의 극단적인 속도를 얻는 대신, 높은 메모리 비용과 전원 차단 시 데이터가 손실될 수 있는 휘발성 위험을 감수해야 합니다. 벡터 DB는 고차원 벡터 변환을 통한 맥락 기반의 의미적 유사도 검색을 얻지만, 키워드 단위의 정확한 일치 검색이 어렵고 고차원 연산에 따른 컴퓨팅 자원 소비가 큽니다. 마지막으로 시계열 DB는 시간 축 데이터의 대량 쓰기 성능과 높은 데이터 압축률, 자동 삭제 관리 기능을 얻는 대신, 기존 데이터의 수정이나 무작위 삭제 연산 효율이 극도로 낮아지는 트레이드 오프가 있습니다. 3. 실제 시스템에서는 어떤 기준으로 데이터베이스를 선택하나요?실제 시스템에서는 각 종류의 트레이드 오프를 잘 고려해서 설계해야합니다. 그 기준을 목록화 해보면 데이터의 일관성 및 정밀도, 데이터 구조 및 조회 패턴, 트래픽 및 데이터 규모, 데이터 수명 및 연산 특성, 운영 비용 및 개발 생산성의 5가지 기준을 잡아 볼 수 있습니다. 각 기준의 예시로는 데이터의 일관성 및 정밀도 측면에서 ‘데이터가 조금이라도 오염이 되면 안된다?’라면 관계형 DB를 선택하고 데이터 구조가 자주 바뀌거나 오염이 치명적이지 않다면 문서 지향 DB를 선택합니다. 데이터 구조 및 조회 패턴의 예시는 데이터 간의 관계가 중요하다면 관계형 DB 혹은 그래프 DB, 단일 키 기준으로 빠른 조회가 자주 이루어진다면 키-밸류 DB 등이 있습니다. 트래픽 및 데이터 규모는 응답 속도가 빨라야 한다면 인메모리 DB를 사용합니다. 데이터 수명 및 연산 특성의 예시는 기존 데이터 수정, 삭제가 자주 이루어 진다면 관계형 DB, 데이터가 오직 추가만 되고 일정 기간 후 자동 삭제된다면 시계열 DB를 선택합니다. 마지막으로 운영 비용 및 개발 생산성에서는 예시는 아니지만 주로 팀원들의 숙련도, 인프라 유지 비용, 클라우드 호스팅 지원 여부를 바탕으로 트레이드 오프 선택합니다. |
1. 데이터베이스에는 어떤 종류가 있으며, 각각 어떤 특징이 있나요?가장 오래되고 널리 쓰이는 것은 관계형 데이터베이스(RDBMS)이다. MySQL이나 PostgreSQL,Oracle 같은 것들이 여기에 속하는데, 데이터를 테이블,행,열 구조로 정리하고 SQL과 JOIN을 통해 데이터 간의 관계를 표현한다. 스키마가 미리 정해져 있어야 하고 그만큼 엄격하지만, 대신 트랜잭션의 일관성을 잘 보장해준다. 그 다음으로 많이 쓰이는 게 문서형 데이터베이스인데 MongoDB가 대표적이다. 데이터를 JSON형태로 저장해서 스키마가 유연하고, 중첩된 구조도 그대로 담을 수 있어 JOIN을 덜 필요로 한다. 데이터 형태가 자주 바뀌거나 정형화 하기 어려운 경우에 적합하다. 키-값 저장소는 Redis나 DynamoDB처럼 단순하게 키 하나에 값 하나를 매핑해서 저장하는 방식으로, 구조가 단순한 만큼 속도가 빠르고 캐싱이나 세션 저장, 카운터 같은 용도로 많이 쓰인다. 컬럼형 데이터베이스는 Cassandra나 HBase처럼 데이터를 컬럼 단위로 저장하는 방식으로, 쓰기 처리량이 크고 분산 환경에서 수평 확장이 쉬운 게 장점이다. 대용량 로그나 이벤트 데이터를 다룰 때 자주 선택된다. 그래프 데이터베이스는 Neo4j처럼 노드와 엣지로 데이터 간의 관걔 자체를 표현하는 방식이라 관계 탐색이 중요한 경우에 강하다. 마지막으로 Elasticsearch같은 검색 엔진형이나 InfluxDB같은 시계열형 처럼, 특정 용도에 아주 특화된 데이터베이스들도 있다. 2. 데이터베이스 종류에 따라 어떤 트레이드오프가 발생하나요?이렇게 여러 종류가 존재하는 이유는 트레이드오프 때문이다. 분산 시스템에서는 네트워크 장애가 생겼을 때 데이터의 일관성을 지킬지 서비스의 가용성을 지킬지 선택해야 하는데, RDBMS계열은 대체로 일관성 쪽에, NoSQL은 가용성 쪽에 무게를 둔다. 또 스키마를 유연하게 가져가면 데이터 형식이 들쭉날쭉해질 위험이 생기고, 반대로 스키마를 엄격하게 하면 유연성을 잃는다. 쓰기 성능을 극대화한 구조는 보통 복잡한 조회 쿼리에는 약하고, 반대로 표현력 좋은 SQL쿼리는 데이터가 많아지면 느려지기 쉽다. 그리고 수평확장이 쉬운 시스템일수록 여러 테이블에 걸친 복잡한 트랜잭션을 지원하기 어려워지는 경향도 있다. 결국 모든 면에서 우수한 데이터베이스는 없고, 하나를 얻으면 다른 하나는 어느정도 포기하게 되는 구조를 갖고 있다. 3. 실제 시스템에서는 어떤 기준으로 데이터베이스를 선택하나요?실제 시스템을 설계할 때는 몇가지 기준을 놓고 판단한다. 먼저 다루려는 데이터가 관계가 복잡하고 정합성이 중요한지, 아니면 문서 단위로 유연하게 다뤄야 하는지를 본다. 그다음 결제 처럼 강한 트랜잭션 일관성이 필요한지, 아니면 어느정도 느슨해도 되는지를 따진다. 트래픽의 규모와 읽기/쓰기 패턴도 중요한데, 초당 수십만 건씩 쓰기가 몰리는 로그성 데이터라면 컬럼형이나 시계열 DB가 읽기 위주에 빠른 응답이 필요하면 캐시 성격의 키-값 저장소가 유리하다. 데이터나 트래픽이 앞으로 한 서버 용량을 넘어설 가능성이 크다면 수평 확장이 쉬운 구조를 미리 고려하고, 반대로 규모가 예측 가능한 수준이면 RDBMS로도 충분히 감당 가능하다. 쿼리 패턴이 관계 탐색 중심인지 전문 검색 중심인지도 선택을 좌우하고, 마지막으로 팀이 얼마나 익숙한 기술인지, 운영 인력과 매니지드 서비스 지원이 있는지 같은 현실적인 요소도 실무에서는 꽤 큰 비중을 차지한다. 그래서 실제로는 시스템 하나에 데이터베이스 하나만 쓰기보다, 용도별로 여러 데이터베이스를 함께 쓰는 폴리글랏 퍼시스턴스방식이 흔하게 쓰인다. |
1. 데이터베이스에는 어떤 종류가 있으며, 각각 어떤 특징이 있나요?데이터베이스는 데이터를 저장하는 형태와 조회 방식에 따라 여러 종류로 나눌 수 있다.
NoSQL은 보통 RDB가 아닌 데이터베이스를 묶어서 부르는 말이고, 그 안에서도 저장 구조와 목적이 꽤 다르다. 2. 데이터베이스 종류에 따라 어떤 트레이드오프가 발생하나요?가장 큰 차이는 정합성과 유연성, 조회 기능과 확장성 사이의 선택이라고 생각한다. RDB는 스키마와 제약조건이 있어서 데이터가 일정한 형태를 유지하고 트랜잭션도 강하다. JOIN을 이용한 복잡한 조회도 편하다. 다만 데이터 구조를 자주 바꾸기 번거롭고, 여러 서버로 수평 확장하는 것은 상대적으로 어렵다. 반대로 Document DB나 Key-Value DB는 구조가 단순하거나 자유로워서 개발과 확장이 편하다. 대신 데이터 간 관계를 애플리케이션에서 직접 관리해야 하거나, RDB에서 한 번에 끝날 조회를 여러 번 나눠서 해야 할 수 있다. 중복 데이터가 늘어날 가능성도 있다. 속도에도 대가가 있다. Redis처럼 메모리를 사용하는 DB는 매우 빠르지만 저장 비용이 비싸고 장애 시 유실 가능성을 고려해야 한다. Vector DB나 Graph DB는 특정 조회에는 강하지만 일반적인 주문·결제 데이터까지 전부 맡기기에는 맞지 않는다. 결국 모든 기능을 잘하는 DB는 없고, 한쪽 장점을 얻으면 다른 쪽의 복잡성이나 비용을 감수하게 된다. 3. 실제 시스템에서는 어떤 기준으로 데이터베이스를 선택하나요?우선 아래 기준을 볼 것 같다.
예를 들어 쇼핑몰이라면 회원·주문·결제의 원본은 RDB에 두고, 자주 조회하는 상품 정보는 Redis에 캐시할 수 있다. 추천이나 의미 기반 검색이 필요하면 Vector DB를 추가할 수 있다. 이런 식으로 실제 서비스에서는 하나만 고집하기보다 목적에 맞게 같이 사용하는 경우가 많다. 다만 요구사항이 특별하지 않다면 익숙하고 범용적인 RDB로 시작하고, 성능이나 조회 방식 때문에 명확한 문제가 생겼을 때 다른 DB를 추가하는 것이 안전하다고 생각한다. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
📆 일자: 26년 9월 21일(월)
🤓 오늘의 질문
1. 데이터베이스에는 어떤 종류가 있으며, 각각 어떤 특징이 있나요?
2. 데이터베이스 종류에 따라 어떤 트레이드오프가 발생하나요?
3. 실제 시스템에서는 어떤 기준으로 데이터베이스를 선택하나요?
All reactions