티스토리 뷰
1. 데이터베이스란?
여러 사람들이 다양한 방식으로 데이터를 저장, 검색, 수정할 수 있도록 구조화된 데이터의 집합
앱 또는 시스템에서 데이터를 구조화하고 효율적으로 다루기 위한 도구
사용 예시
- 사용자 로그인 정보 저장 (이메일/비밀번호)
- 최근 사용 내역 조회
- 오프라인 상태에서도 앱 작동 (ex. 메모 앱, 캘린더)
2. DBMS (Database Management System)
데이터베이스를 쉽게 사용할 수 있도록 해주는 소프트웨어
주요 역할
- 데이터를 파일이 아닌 논리적으로 관리 (인덱스, 트랜잭션, 동시성 제어 등)
- SQL을 통해 데이터 처리
대표 DBMS
분류 | 예시 |
관계형 (RDB) | MySQL, PostgreSQL, Oracle |
비관계형 (NoSQL) | MongoDB, Firebase, Redis |
로컬 DB | SQLite, Room |
3. SQL (Structured Query Language)
데이터베이스에 명령을 내리는 표준 언어
SELECT * FROM users WHERE age > 20;
INSERT INTO users (name, age) VALUES ('Anna', 25);
UPDATE users SET age = 26 WHERE name = 'Anna';
DELETE FROM users WHERE age < 18;
연산 종류
연산 | 주의할 점 |
SELECT (조회) | 인덱스가 없으면 느려짐 → WHERE 조건에 인덱싱 필요 |
INSERT (삽입) | UNIQUE 제약조건 충돌 주의. 대량 삽입 시 배치 처리 고려 |
UPDATE (수정) | WHERE 누락 시 전체 수정됨 → 항상 조건문 확인 |
DELETE (삭제) | 트랜잭션 사용 필수. 외래키 제약이 있다면 제약 해제 순서 확인 |
4. 관계형 데이터베이스 (RDB: Relational Database)
핵심 개념
- 데이터를 테이블 단위로 저장 (엑셀처럼 행과 열)
- 테이블 간 관계 설정 가능 (Join)
- JOIN이 많아질수록 성능 이슈 발생 가능 → 인덱스 튜닝 필수
- 엄격한 스키마 구조 → 데이터 간 관계가 명확한 경우 추천
- 트랜잭션 처리로 데이터 정합성을 보장할 수 있어 업무 로직에 신뢰성 요구될 때 적합
주요 용어
용어 | 설명 |
테이블 | 데이터 저장 단위 |
행(Row) | 레코드, 데이터 한 건 |
열(Column) | 속성 (이름, 나이 등) |
기본키(PK) | 각 행을 유일하게 식별 |
외래키(FK) | 다른 테이블과의 관계를 나타냄 |
스키마 | 테이블 구조 정의 |
5. 키(Key)의 종류
키 종류 | 설명 |
슈퍼 키(Super Key) | 유일성만 만족 |
후보 키(Candidate Key) | 슈퍼 키 중 최소성도 만족 |
기본 키(Primary Key) | 후보 키 중 하나 선택 (NOT NULL + UNIQUE) |
대체 키(Alternate Key) | 후보 키 중 기본 키 제외한 나머지 |
외래 키(Foreign Key) | 다른 테이블의 기본 키를 참조 |
6. 정규화(Normalization)
- 중복 제거 및 데이터 무결성을 위해 테이블을 구조적으로 나누는 과정
- 정규화는 중복 제거와 무결성 확보에 효과적
- 하지만 과도한 정규화 → JOIN 남발 → 성능 저하
- 실무에서는 3NF 또는 BCNF까지만 적용하고, 필요한 경우 비정규화로 속도 최적화
정규형 | 설명 |
제1정규형 (1NF) | 컬럼이 원자값(단일값)만 가지도록 분리 (중첩/반복되는 컬럼 제거) |
제2정규형 (2NF) | 제1정규형 만족 + 기본키의 일부에만 종속된 컬럼 제거 (부분 종속 제거) |
제3정규형 (3NF) | 제2정규형 만족 + 이행적 종속 제거 (비기본키 → 다른 비기본키 종속 제거) |
BCNF (보이스-코드 정규형) | 제3정규형 만족 + 모든 결정자가 후보키일 것 (후보키 아닌 컬럼이 결정자면 분해) |
제4정규형 (4NF) | BCNF 만족 + 다치 종속 제거 (하나의 키가 여러 독립적인 다중값을 가질 때 분리) |
제5정규형 (5NF) | 제4정규형 만족 + 조인 종속 제거 (조인 후에도 정보 손실 없이 복원 가능하게 분해) |
용어 정리
- 부분 종속: 기본키의 일부에만 종속됨
- 이행적 종속: A → B, B → C이면 A → C가 되는 관계
- 결정자: 다른 값을 결정하는 컬럼 (예: 학번 → 이름)
- 다치 종속: 하나의 속성이 여러 개의 독립된 값을 가짐
- 조인 종속: 테이블을 조인했을 때만 의미가 있는 종속 관계
7. 트랜잭션과 ACID
트랜잭션: 데이터베이스 작업의 논리적 단위
ACID 4원칙
항목 | 설명 |
원자성(Atomicity) | 전부 실행되거나 전부 취소됨 |
일관성(Consistency) | 무결한 상태 유지 |
고립성(Isolation) | 동시에 실행돼도 서로 영향 없음 |
지속성(Durability) | 커밋된 내용은 영구 저장됨 |
8. 인덱스(Index)
데이터를 빠르게 찾기 위한 자료 구조 (책의 목차 역할)
항목 | 실무 팁 |
WHERE 조건 | 자주 사용하는 컬럼에 인덱스 생성 |
정렬(SORT) | ORDER BY 대상에도 인덱스 고려 |
JOIN | 조인 대상 컬럼 인덱스 필수 |
INSERT/UPDATE | 인덱스 많을수록 느려짐 → 쓰기 빈번한 테이블은 인덱스 최소화 |
장점
- 검색 속도 향상
- 정렬 빠름
- 유니크 제약 조건으로 데이터 무결성 강화
단점
- 인덱스 생성/유지 비용
- INSERT/UPDATE 성능 저하
9. 이상 현상(Anomaly)
테이블 구조가 비정상적일 때 생기는 문제
유형 | 설명 |
삽입 이상 | 일부 정보 없으면 삽입 안 됨 |
삭제 이상 | 하나 지우면 관련 정보도 삭제됨 |
갱신 이상 | 일부만 수정돼 정보 모순 발생 |
10. ERD (Entity Relationship Diagram)
시스템에서 사용하는 개체(엔티티)와 그 관계를 도식화한 데이터베이스 설계도
주요 개념
- 엔티티(Entity): 테이블에 대응 (예: User)
- 속성(Attribute): 테이블의 열
- 관계(Relationship): 엔티티 간의 연결
관계 유형
기준 | 관계 |
외래 키 위치 | 식별자 관계 vs 비식별자 관계 |
발생 횟수 | 1:1, 1:N, N:N |
11. NoSQL (Not Only SQL, 비관계형 데이터베이스)
유연한 구조, 대규모 확장을 위해 등장한 비관계형 데이터베이스
등장 배경
- 스키마 변경 어려움, JOIN 많은 관계형 DB의 한계
- 트래픽 많고 유연성 필요한 서비스 (SNS, IoT 등)
사용 조건
사용 조건 | 설명 |
스키마 자주 변경됨 | 문서 기반(JSON)은 구조 자유로움 |
수평 확장 필요 | 서버 수 늘리기 쉬움 (샤딩 지원) |
고속 읽기/쓰기 | 단순 key-value 조회 성능 우수 |
관계 표현이 불필요 | 조인이 거의 필요 없는 데이터 |
주요 유형
유형 | 설명 | 예시 |
Document | JSON 문서 기반 | MongoDB, Firebase |
Key-Value | 키-값 쌍 | Redis, DynamoDB |
Column | 열 단위 저장 | Cassandra |
Graph | 노드-엣지 기반 | Neo4j |
12. MongoDB 특징 (Document DB)
- JSON 형태로 저장 (유연한 스키마)
- Collection 단위로 관리 (테이블 개념)
- 샤딩(Sharding), 복제(Replication), 트랜잭션 지원
{
"name": "Anna",
"age": 25,
"tags": ["developer", "blogger"]
}
13. RDB vs NoSQL 선택 기준 요약
항목 | RDB | NoSQL |
구조 | 테이블, 고정된 스키마 | JSON, 유연한 스키마 |
트랜잭션 | ACID 강력 지원 | 약함 또는 제한적 |
JOIN | 가능 | 불가 또는 복잡 |
확장성 | 수직 확장 | 수평 확장 유리 |
사용 예 | 금융, ERP | SNS, 로그, IoT |
14. 로컬 데이터베이스
로컬 데이터베이스란 네트워크 없이도 디바이스 내부에 데이터를 저장하고 조회할 수 있는 데이터베이스를 의미합니다. 서버와 통신하지 않아도 사용할 수 있어 오프라인 환경에서도 작동 가능합니다.
사용 조건
상황 | 설명 |
오프라인 데이터 저장 | 일정, 메모, 투두리스트, 기사 등 |
서버와 주기적 동기화 | 서버 연동 전 임시 저장 |
빠른 UI 표시용 캐시 | 검색 결과, 최근 본 항목 등 |
특징
- 디바이스 내 저장: 스마트폰, 태블릿, PC 등의 내부 저장소에 위치
- 빠른 접근 속도: 네트워크 지연 없이 즉시 데이터에 접근 가능
- 오프라인 지원: 인터넷 연결 없이도 데이터 조회/수정 가능
- 보안 이슈: 디바이스 분실 시 보안 문제 발생 가능 (암호화 필요)
플랫폼 | 로컬 데이터베이스 예시 | 설명 |
Android | SQLite, Room (SQLite 기반 ORM) | 안드로이드 기본 DB, Room은 SQLite를 추상화해 사용 편리 |
iOS | Core Data, SQLite | 애플의 객체 기반 저장소(Core Data), 또는 SQLite |
Web | IndexedDB, LocalStorage | 브라우저에서 클라이언트 데이터 저장 시 사용 |
Cross-platform | Realm, ObjectBox, Hive | 플랫폼 독립적이며 사용이 쉬움 (특히 Flutter 등에서 인기) |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Android
- 블루투스개념정리
- api 경로
- 빌드 타입
- okhttp
- build type
- missingbinding
- compose
- SSAFY
- release build
- 안드로이드
- 코틀린
- 백준
- this
- 릴리즈 빌드
- retrofit
- @provides
- connecttimeout
- java
- tomap
- Kotlin
- newtoken
- 싸피
- 데이터무결성체크
- hilt
- 알고리즘
- 모바일트랙
- 상단알람
- 디버그 빌드
- SWEA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함