데이터베이스
데이터, 정보, 지식
- DIKW : 데이터(Data)→정보(Information)→지식(Knowledge)→지혜(Wisdom)
- 데이터 : 개별 데이터 자체로는 의미가 중요하지 않은 객관적인 사실
- 정보 : 데이터의 가공, 처리와 데이터의 연관 관계 속에서 의미가 도출된 것
- 지식 : 데이터를 통해 도출된 다양한 정보를 구조화하여 유의미한 정보를 분류하고 개인적인 경험을 결합시켜 고유의 지식으로 내재화한 것
- 지혜 : 지식의 축적과 아이디어가 결합된 창의적인 산물, 근본 원리에 대한 깊은 이해를 바탕으로 도출되는 창의적 아이디어
- 예) 데이터 : A마트의 물은 700원이다. B마트의 물은 500원이다. 정보 :B마트의 물이 더 싸다. 지식 : B마트에서 물을 사는것이 더 경제적이다. 지혜: B마트의 다른 상품들도 A마트보다 쌀 것이다.
데이터베이스란?
- 데이터를 저장하는 구조/자료의 모음
- 통합된 데이터 (integrated data)
- 데이터의 중복을 최소화하여 데이터 불일치 현상을 제거
- 저장된 데이터 (stored data)
- 문서로 보관된 데이터가 아닌 컴퓨터 저장장치에 저장된 데이터
- 운영 데이터(operational data)
- 공용 데이터(shared data)
- 한 사람 또는 한 업무가 아닌 공동으로 사용되는 데이터
데이터베이스 특징
- 실시간 접근성 (real time accessibility)
- 계속적인 변화(continuous change)
- 동시 공유(concurrent sharing)
- 내용에 따른 참조(reference by content)
파일시스템 vs 데이터베이스
- 파일시스템 : 데이터를 기록하고 여러 사람이 공유하여 사용 가능
- 데이터 중복이 생길 수 있다.
- 데이터 공유에 있어서 제한이 있다.
- 구현과 유지보수에 시간이 오래 걸린다.
- 저장공간과 자원이 낭비될 수 있다.
- 데이터베이스는 파일시스템의 단점을 개선하기 위해 등장했다.
- 데이터 일치성 증가
- 데이터 공유 원활
- 의도치 않은 데이터 중복 없음
- 데이터 보안 향상
데이터베이스 언어
- SQL(Structured Query Language) : 관계형 데이터베이스에 정보를 저장, 처리하기 위한 프로그래밍 언어
- 데이터 정의어 (DDL)
- 데이터 조작어 (DML)
- 데이터 제어어 (DCL)
데이터베이스 사용자
- 일반사용자
- 응용 프로그래머
- SQL사용자
- 데이터베이스 관리자(DBA, Database Administrator)
DBMS(Database Management System)
- 사용자와 데이터베이스를 연결시켜주는 소프트웨어
- 데이터 정의(Definition)
- 데이터 조작(Manipulation)
- 데이터 추출(Retrieval)
- 데이터 제어(Control)
SDLC
- Software Development Life Cycle
- 제품의 요구사항부터 개발, 검증, 유지보수 및 폐기까지의 전 과정을 프로세스화 해 소프트웨어 개발에 적용한 것
- 사전조사
- 시스템 분석
- 사용자 요구 수집
- 인터뷰
- 시스템 요구 정리
- processing modeling : ERD(Entity Relationship Diagram)
- 시스템 디자인
- ERD를 통해 Relation Model로 변환, 데이터베이스 성능 결정
- 시스템 구현
- 유지보수
데이터 모델링
- 현실 세계 데이터를 단순화하여 데이터베이스로 표현하기 위한 작업
데이터 모델링 과정
- 요구사항 분석
- 개념적 데이터 모델 설계
- 논리적 데이터 모델 설계
- 물리적 데이터 모델 설계
ER Model
- 개념적 모델링에 사용하는 모델
- 요구사항으로 부터 얻은 정보를 개체(Entity), 속성(Attribute), 관계(Relation)으로 기술하는 모델
- 개체 : 단독으로 존재하는 객체
- 속성 : 개체의 특성을 나타내는 속성
- 관계 : 개체간 관계
ER Diagram
- 개체(Entity) : 실생활에서의 대상(객체)
- 개체 타입(Entity Type) : 공통적인 특성을 공유하는 Entity 집합
- Entity Type을 ER 다이어그램으로 나타낼 때 직사각형 사용
- 관계 (Relation) : 개체 사이의 연관성
- 관계 타입 (Relation Type) : 개체 타입 간의 관계를 정의
- Relation Type을 ER 다이어그램으로 나타낼 때 마름모 사용
- 속성(Attribute) : 개체가 갖는 성질
- Attribute를 ER 다이어그램으로 나타낼 때 타원 사용
- Entity Type과 실선으로 연결
- 키 속성(Key Attribute) : 다른 객체들과 중복되지 않는 고유한 값을 갖는 Attribute
- 단일 값 속성(Singled-valued Attribute) : 한 값만 갖는 속성
- 다중 값 속성(Multi-valued Attribute) : 여러 값을 갖는 속성
실습 - 요구사항으로부터 ER Model 설계하기
ER Model 제약조건
- 여러 속성의 집합으로 표현된 개체 간 관계를 관계성으로 표현
- 카디널리티 제약조건 (Cardinality Constraint)
- 참여 제약조건 (Participation Constraint)
카디널리티 제약조건(Cardinality Constraint)
- 하나의 Entity와 관계를 맺을 수 있는 Entity 개수
- 1:1 관계 - 하나의 개체가 하나의 개체에 대응
- 1:N 관계 - 하나의 개체가 여러 개체에 대응
- N:M 관계 - 하나의 개체가 하나의 개체에 대응
참여 제약조건(Participation Constraint)
- 관계를 맺는 두 개체 중 한 개체가 다른 하나의 개체에 의존하는지를 표현
- 부분 참여(Partial Participation) - 선택적으로 참여, 하나의 실선
- 전체 참여(Total Participation) - 하나 또는 그 이상이 참여, 두 개의 실선
구조적 제약조건(Structual Constraint)
- 실선 위에 (min, max)값을 표시하여 구체적인 조건을 명시
관계의 종속성
- 약한 개체(Weak Entity)
- 다른 개체에 종속적인 개체
- 다른 개체의 도움 없이는 식별할 수 없음
- 키 속성이 없다. 대신 부모 개체의 키 속성과 구별자를 이용하여 식별
- 이중 직사각형으로 표현
- 약한 개체는 강한 개체에 의존적이기 때문에 참여 제약조건은 전체 참여이다.
- 강한 개체와 약한 개체 사이는 식별 관계, 이중 마름모로 표현한다.
- 약한 개체에서 구별자는 점선으로 표시
실습 - 요구사항 분석 보고서 작성하기
- Product는 상품번호, 상품이름, 가격을 갖고있다.
- Buyer는 아이디, 이름, 주소(도시, 우편번호), 연락처를 갖고있다.
- Seller는 아이디, 이름, 연락처를 갖고있다.
- Seller는 하나의 상품만 등록할 수 있다.
- Buyer는 여러 상품을 구매할 수 있다.
- 판매자가 없는 상품은 없다.
- 상품에는 사은품이 포함된다.
- 한 상품에는 여러 사은품이 포함될 수 있다.
- 사은품은 이름을 갖고있다.
실습 - ER Model 설계하기
DBMS
DBMS(Database Management System)
- 데이터베이스를 관리하기 위해 사용자가 사용하는 소프트웨어 프로그램
RDBMS(Relational Database Management System)
- 관계형 데이터베이스 시스템
- MySQL, PostgreSQL, ORACLE, SQL Server, SQLite
NoSQL(Not Only SQL)
- 관계형이 아닌 데이터베이스
- mongoDB, redis, neo4j
관계형 데이터베이스
- 데이터가 테이블 형태로 저장
- 데이터의 무결성이 보장된다
- 데이터의 중복이 최소화된다
- 데이터베이스의 구조 설계가 복잡하며 수정이 어렵다
비관계형 데이터베이스
- 수평적 확장을 지원하므로 대규모 데이터 저장에 용이하다
- 정해진 스키마가 없기 때문에 데이터 구조의 수정에 있어 유연하다 (스키마 : 데이터베이스 구조와 제약조건 등을 정의하는 논리적인 구조)
- 다양한 종류의 데이터를 저장할 수 있다
- 데이터의 일관성을 유지하는데 어려움이 있다
- Document형식 : json 형태로 데이터가 저장된다.
- Graph형식
- Key-Value형식
- Wide-Colunm형식
트랜잭션 (Transaction)
- 데이터베이스의 상태를 변화시키는 하나의 기능을 수행하기 위한 작업 단위 (여러 쿼리의 연산)
- 모든 작업들이 성공적으로 수행되어야 트랜잭션 성공
- 중간에 하나라도 실패하면 트랜잭션 실패
- Commit (커밋) : 트랜잭션이 성공할 경우 트랜잭션의 작업을 데이터베이스에 반영
- Rollback (롤백) : 트랜잭션이 실패할 경우 트랜잭션에서 실행된 일련의 연산을 취소하고 이전 상태로 되돌리는 것
ACID
- 원자성 (Atomicity) : 트랜잭션과 관련된 작업들은 전부 성공하거나 중간에 실패할 경우 롤백되어야 한다.
- 일관성 (Consistency) : 트랜잭션이 성공적으로 실행되면 언제나 일관성 있는 데이터베이스 상태를 유지해야 한다.
- 독립성 (Isolation) : 하나의 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못해야 한다.
- 지속성 (Durability) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 한다.
실습 - ACID 예시 들어보기
은행 애플리케이션에서 내 계좌에서 다른 계좌로 돈을 이체하려고 할 때
- 원자성 : 내 계좌에서 적정 금액이 인출되고, 동일한 금액이 다른 계좌로 입금되면 트랜잭션이 커밋되고 변경내용이 데이터베이스에 반영된다. 실패할 경우 트랜잭션이 롤백되고 변경내용이 반영되지 않는다.
- 일관성 : 거래가 성공하면 내 계좌의 금액은 이체금액만큼 감소하고 다른 계좌는 동일한 금액만큼 증가한다.
- 독립성 : 트랜잭션이 동시에 실행될 수 있는 다른 트랜잭션과 분리되어 실행된다.
- 지속성 : 트랜잭션이 커밋되면 두 계좌에 대한 변경 내용이 영구적으로 저장되고 이후의 시스템 장애 또는 충돌 시에도 유지된다.