반응형
데이터베이스 기본 개념 및 실무 설명
1. RDBMS(관계형 데이터베이스) vs NoSQL(비관계형 데이터베이스)
RDBMS(관계형 데이터베이스)
- 구조: 데이터를 행(Row)과 열(Column)로 이루어진 테이블(Table) 형태로 저장합니다.
- 스키마(정형화): 미리 정의된 스키마(데이터 구조)에 따라 데이터를 저장해야 하며, 데이터의 일관성과 무결성을 엄격하게 관리합니다.
- 트랜잭션: ACID(원자성, 일관성, 고립성, 지속성) 특성을 보장해, 데이터의 신뢰성이 중요할 때 적합합니다.
- 확장성: 주로 수직 확장(서버 성능 업그레이드)에 적합합니다.
- 적합한 예시: 은행, 회계, ERP 등 데이터 정합성과 복잡한 쿼리가 중요한 곳.
NoSQL(비관계형 데이터베이스)
- 구조: 테이블이 아니라, 문서(Document), 키-값(Key-Value), 그래프(Graph), 컬럼(Column) 등 다양한 형태로 데이터를 저장합니다.
- 스키마(비정형화): 스키마가 유동적이거나 필요 없어서, 구조가 자주 변하는 데이터에 적합합니다.
- 트랜잭션: ACID가 아닌 BASE(최종적 일관성, 가용성 우선) 특성을 따르는 경우가 많아, 일관성보다는 가용성과 확장성을 중시합니다.
- 확장성: 수평 확장(서버를 여러 대 추가)으로 대용량 데이터 처리에 강점이 있습니다.
- 적합한 예시: 소셜미디어, 로그, IoT, 빅데이터 등 빠른 변화와 대량 데이터가 필요한 곳.
2. SQL 기본(SELECT, JOIN, INDEX, 트랜잭션, 정규화/비정규화)
SELECT
- 데이터를 조회하는 가장 기본적인 명령어입니다.
JOIN
- 여러 테이블의 데이터를 연결해서 조회할 때 사용합니다.
INDEX(인덱스)
- 데이터 조회 속도를 빠르게 하기 위해 사용하는 데이터 구조입니다.
- 인덱스가 없으면 테이블 전체를 검색(Full Scan)해야 하므로 느릴 수 있습니다.
트랜잭션
- 데이터베이스의 작업 단위를 의미하며, ACID 특성을 보장합니다.
- 원자성(Atomicity): 모두 성공하거나 모두 실패
- 일관성(Consistency): 트랜잭션 전후 데이터 일관성 유지
- 고립성(Isolation): 동시에 여러 트랜잭션이 실행돼도 서로 간섭 없음
- 지속성(Durability): 트랜잭션 완료 후 결과가 영구적으로 저장
정규화/비정규화
- 정규화: 데이터 중복을 줄이고, 데이터 무결성을 높이기 위해 테이블을 쪼개는 과정입니다.
- 예: 고객 정보와 주문 정보를 각각 테이블로 분리
- 비정규화: 성능 향상을 위해 일부러 중복을 허용하고 테이블을 합치는 과정입니다.
- 예: 자주 JOIN하는 테이블을 합쳐서 조회 속도 향상2.
3. NoSQL(MongoDB 등) 특성, CAP 이론, 샤딩, 레플리카
NoSQL 특성
- 유연한 스키마: 데이터 구조가 자주 바뀌어도 대응이 쉽습니다.
- 다양한 데이터 모델: 문서형(MongoDB), 키-값형(Redis), 컬럼형(Cassandra), 그래프형(Neo4j) 등 다양한 형태 지원.
- 수평 확장 용이: 서버 여러 대로 쉽게 확장 가능.
CAP 이론
- Consistency(일관성): 모든 노드가 같은 데이터를 보여줌
- Availability(가용성): 항상 요청에 응답 가능
- Partition Tolerance(파티션 허용성): 네트워크가 분리되어도 시스템이 동작
- 세 가지를 동시에 완벽하게 만족할 수 없으며, NoSQL은 보통 가용성과 파티션 허용성을 우선시(예: MongoDB는 AP)3.
샤딩(Sharding)
- 데이터를 여러 서버(샤드)에 분산 저장해 대용량 데이터와 트래픽을 처리하는 기술입니다.
- 각 샤드는 전체 데이터의 일부만 저장합니다.
레플리카(Replica)
- 데이터의 복제본을 여러 서버에 저장해 장애 발생 시 데이터 손실을 막고, 읽기 성능을 높입니다.
- MongoDB는 하나의 Primary와 여러 Secondary로 구성된 Replica Set을 사용합니다.
4. ORM(Object-Relational Mapping) 개념과 장단점
개념
- 객체지향 언어(예: Java, Python)의 객체와 데이터베이스의 테이블을 자동으로 매핑해주는 기술입니다.
- 개발자는 SQL을 직접 작성하지 않고, 객체 조작만으로 데이터베이스 작업이 가능합니다.
장점
- 코드 생산성 향상: 반복적인 SQL 작성 없이 개발 가능
- 유지보수 편리: 데이터 구조 변경 시 ORM만 수정하면 됨
- 코드와 데이터베이스 구조의 일관성 유지
- 캐싱 기능을 통한 성능 향상
단점
- 복잡한 쿼리나 대용량 데이터 처리 시 성능 저하 우려
- ORM이 잘못 설계되면 비효율적인 쿼리가 생성될 수 있음
- 데이터베이스에 대한 깊은 이해가 부족하면 문제 발생 가능
5. 데이터베이스 설계, 인덱싱, 쿼리 최적화, 캐싱 전략
데이터베이스 설계
- 요구사항 분석 → 엔티티(테이블) 도출 → 속성(컬럼) 정의 → 관계(외래키) 설정 → 정규화
- 데이터 중복 최소화와 무결성 유지가 목표
인덱싱
- 자주 검색하는 컬럼에 인덱스를 생성해 조회 성능을 높임
- 인덱스가 많으면 쓰기 성능이 떨어질 수 있으므로, 필요한 컬럼에만 적용
쿼리 최적화
- 불필요한 전체 테이블 스캔(Full Scan) 피하기
- JOIN 최소화, 필요한 컬럼만 조회(SELECT * 지양)
- 실행계획(EXPLAIN 등) 분석으로 병목 구간 확인
캐싱 전략
- 자주 조회되는 데이터는 애플리케이션이나 별도 캐시(DB, Redis 등)에 저장해 DB 부하를 줄임
- 데이터 변경 시 캐시 무효화 정책 설정 필요
반응형
'스터디 트래블 > CS' 카테고리의 다른 글
5. 자료구조와 알고리즘 (1) | 2025.05.10 |
---|---|
4. 프로그래밍 언어 및 프레임워크 (2) | 2025.05.10 |
3. 서버/백엔드 아키텍처 (0) | 2025.05.03 |
1. 네트워크 기본 (1) | 2025.04.29 |
백엔드 서버 개발자 면접 대비 CS 지식 (3) | 2025.04.22 |