우연하게 학원에서 5명 씩 짝지어 강사님, 매니저님과 식사 하는 자리를 만들어 주었다. 당연하게도 취업에 대한 이야기를 나누었는데 신입 개발자 면접에서 의외로 자바에 대한 질문보다 DB에대한 질문이 가장 많다고 하셨다. 질문에 답을 못 해도 배웠다는 것을 그저 솔직히 어필하면 된다고 얘기하셨지만 기초를 배우는 것조차 똑바로 하지 못 하고는 실무에서 무슨 일을 할것인가 그런 생각이 들어 한 번 정리해보기로했다.
DBMS란 DataBase Management System의 약자로 사용자와 데이터베이스의 연결시켜주는 소프트 웨어이다. 데이터에 관한 정보를 보다 효율적이고 효과적이게 구성하고 조작과 제어하게 해준다.
① 실시간 접근성(Real-Time Accessibility) : 다수의 컴퓨터, 다수의 사용자가 데이터에 쉽고 빠르게 접근하여 추가(Insert), 수정(Delete), 삭제(Update) 할 수 있게 해준다.
② 지속적인 변화(Continuous Evloution) : 데이터베이스의 상태는 동적이다. 처음 기록한 데이터에서 다시 새로운 데이터가 추가(Insert), 수정(Delete), 삭제(Update) 되므로 항상 최신의 데이터를 유지한다.
③ 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 업무, 여러 사용자에게 동시에 공유하기위한 목적이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다. 데이터베이스에 접근하는 사용자 데이터 요청 프로그램이 동시에 여러 개 있다는 의미다.
④ 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때 데이터의 물리적인 위치가 아닌 데이터 값에 따라 참조 된다. 사용자가 데이터 값을 사용하여 조건을 제시하면 데이터베이스는 이에 해당하는 데이터를 검색해준다.
(1) 구성 : 데이터베이스에 저장 될 자료의 구조와 응용 프로그램이 그것을 이용하는 방식을 정의한다.(레코드 구조, 데이터 모형, 물리적 구조 등)
(2) 조작 : 사용자 도구에 따라 데이터베이스에 저장된 자료를 검색, 갱신, 삽입, 삭제 할 수 있도록 지원한다.
(3) 제어 : 데이터베이스의 내용에 대한 일관성, 중복제거, 접근제어에 대한 기능을 지원한다.
관계형 데이터 베이스는 가장 많이 사용되고 있는 DB의 한 종류이다. 데이터를 테이블 형태로 저장하며 키(key)와 값(value)의 관계를 나타낸다. 행(row)에 데이터가 저장되며 열(column)로 데이터의 속성을 나타낸다.
장점 데이터 분류, 정렬, 탐색 속도가 빠르다
데이터의 무결성과 신뢰성을 보장한다
정규화에 따른 갱신 비용이 적다.
유지보수가 편하다.
단점 기존 작성된 스키마 수정이 어렵다.
데이터 베이스의 부하를 분석하기 어렵다.
시스템 자원을 많이 차지한다.
구조가 복잡해질수록 성능 최적화가 반드시 필요하다.
SQL은 Structured Query Language의 약자로 관계형 데이터베이스 시스템(RDBMS)의 데이터 베이스가 이해할 수 있는 언어이다.
① DDL (데이터 정의 언어) :
CREATE
/ALERT
/DROP
등이 있다. 데이터베이스의 DDL 명령에 의해 수행 된 변경 사항이 영구적으로 저장된다.
② DML (데이터 조작 언어) :SELECT
/INSERT
/DELETE
/UPDATE
. 이 명령은 자동 커밋되지 않으며 롤백 할 수 있다.
③ DCL (데이터 제어 언어) :GRANT
/REVOKE
. 데이터를 사용하기위한 액세스 권한 취소와 같이 데이터베이스에서 데이터의 가시성을 제어하는데 사용된다.
후보키(Candidate Key) : 유일성과 최소성을 만족하며 튜플(= row)을 식별할 수 있는 최소 속성의 집합들이다.
기본키(Primary Key) : 유일성과 최소성을 만족하며 개체 무결성 제약조건을 만족해야 한다. 후보키 중에서 DBA가 선택하여 대표로 삼은 키를 의미한다.
대체키(Alternate Key) : 후보키 중 기본키를 제외한 나머지 키를 말한다. 보조키라고도 한다.
슈퍼키(Super Key) : 유일성은 만족하지만, 최소성은 만족하지 못하는 키를 말한다.
외래키(Foreign Key) : 외래키는 참조 무결성의 특징을 가지며 다른 테이블과 관계(Relationship)를 맺기 위해서 설정하는 키(Key)이다. 다른 테이블의 기본키(PK) 또는 유일키(Unique)와 관계를 맺을 수 있다. 참조 관계에서 기본키를 가진 테이블을 부모 테이블, 외래키를 가진 테이블을 자식 테이블이라고 한다.
트랜잭션이란 여러 개의 작업을 하나로 묶은 실행 유닛을 말한다. 다수의 사람들이 동시에 사용하는 데이터베이스의 특성 상 데이터에 문제가 없어야 하기 때문에 모든 명령문을 완벽하게 처리하거나 하나의 명령문이라도 문제가 발생하면 모든 명령문을 수행하지 않고 데이터를 보존하는 기능을 한다.
ACID는 데이터의 유효성을 보장하기 위한 트랜잭션의 특징들(Atomic, Consistency, Isolation, Duarabity)의 앞글자를 딴 단어이다. 데이터베이스 내에서 일어나는 하나의 트랜잭션(transaction)의 안전성을 보장하기 위해 필요한 성질이다.
- Atomicity(원자성) : 한 트랜잭션의 연산들이 모두 성공하거나, 반대로 전부 실패되는 특성을 말한다. 원자성은 작업이 모두 반영되거나 모두 반영되지 않음으로서 결과를 예측할 수 있어야 한다.
- Consistency(일관성) : 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다. 즉, 트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다는 뜻이다.
- Isolation(격리성, 고립성) : 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션이 간섭하지 못하도록 하여 각각의 트랜잭션이 독립적으로 수행되어야 한다는 의미이다.
- Durability(지속성) : 트랜잭션이 성공적으로 완료된 이후에 해당 트랜잭션에 대한 로그가 남아야하는 특성을 말한다. 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다.