본문 바로가기

책 리뷰

데이터베이스 첫걸음

 

  • 데이터베이스란

    • 기본 기능

      • 데이터의 검색과 갱신

      • 동시성 제어

      • 장애 대응

      • 보안

    • 종류

      • 계층형 데이터베이스

        • ex. 조직도, 전체구조도

      • 관계형 데이터베이스

        • ex. 2차원 테이블

      • NoSQL 데이터베이스

  • 관계형 데이터베이스란

  • 데이터베이스에 얽힌 돈 이야기

    • 초기비용

      • 라이선스료

        • 프로세서 라이선스

        • 사용자 라이선스

      • 서브스크립션료

      • 에디션과 옵션

    • 운영비용

      • 기술지원(유지보수)에 대한 비용

      • 기술지원 수준은 매년 내려간다.

  • 데이터베이스와 아키텍처 구성

    • 역사와 개요

      • Stand-alone

      • 클라이언트 / 서버

      • 웹 3계층

        • 웹 서버 계층

        • 애플리케이션 계층

        • 데이터베이스 계층

    • 가용성과 확장성의 확보

      • 심장전략

      • 신장전략

    • DB 서버 다중화

      • Stand-alone

      • Clustering

        • Shared-Nothing

        • Shared-Disk

          • Active - Actvie

            • 시스템 다운 시간이 짧다.

            • 성능이 좋다.

            • 저장소 병목현상

          • Active - Stanby

            • Heartbeat

            • Cold-stanby

            • Hot-stanby

      • Replication

        • 마스터 슬레이브

        • 멀티 마스터

  • DBMS 기본지식

    • SQL문과 관리명령

    • 관계형 데이터베이스 계층

      • 인스턴스

      • 데이터베이스

      • (스키마)

      • 테이블

  • SQL문의 기본

    • 검색 : SELECT

      • SELECT (열 명) FROM (테이블 명);

        • ex. SELECT * FROM city;

      • 조건 : WHERE

        • SELECT (열 명) FROM (테이블 명) WHERE (조건);

        • ex. SELECT * FROM city WHERE district = 'chollanam';

      • 중복제거 : DISTINCT

        • ex. SELECT DISTINCT district FROM city WHERE countrycode = 'KOR';

      • 결과 정렬 : ORDER BY

        • SELECT ~ ORDER BY (열 명);

        • ex. SELECT * FROM city WHERE countrycode = 'KOR' ORDER BY population desc;

      • 테이블 요약

        • COUNT : 테이블 행의 수

        • SUM : 테이블의 수치 데이터 합계

        • AVG : 테이블 수치 데이터의 평균

        • MAX : 테이블 임의 열 데이터 중 최대값

        • MIN : 테이블 임의 열 데이터 중 최소값

        • ex. SELECT MAX(name) FROM city WHERE countrycode = 'KOR';

      • 그룹으로 나눠 집약 : GROUP BY

        • SELECT ~ FROM (테이블 명) GROUP BY (열 명);

        • ex. SELECT district, COUNT(*) FROM city WHERE countrycode = 'KOR' GROUP BY district;

      • 집약한 결과에 조건 지정 : HAVING

        • SELECT ~ FROM ~ GROUP BY ~ HAVING (조건);

        • ex. SELECT district, COUNT(*) FROM city WHERE countrycode = 'KOR' GROUP BY district having count(*) = 6;

    • 갱신, 삽입과 제거 : UPDATE, INSERT, DELETE

      • 갱신 : UPDATE

        • UPDATE (테이블 명) SET (열 명) = (값) WHERE (조건);

        • ex. UPDATE city SET name = 'Siheung' WHERE countrycode = 'KOR' and district = 'kyonggi' and name = 'Shihung';

      • 삽입 : INSERT

        • INSERT INTO (테이블 명) VALUES (값1, 값2, ...);

        • ex. INSERT INTO city VALUES (default, 'Gimpo', 'KOR', 'Kyonggi', 349900)

      • 삭제 : DELETE

        • DELETE FROM (테이블 명) WHERE (조건);

        • ex. DELETE FROM city WHERE id = 4080;

    • 뷰의 작성과 서브쿼리 및 결합

      • 뷰 작성 : CREATE VIEW

        • CREATE VIEW (뷰 명) (열 명) AS (SELECT 문)

        • ex. CREATE VIEW citykyonggi AS SELECT id, name, population FROM city WHERE contrycode = 'KOR' and district = 'Kyonggi';

      • 서브쿼리

        • (SELECT 문)의 결과를 데이터 처럼 다루는 쿼리.

        • ex. SELECT * FROM citykyonggi WHERE population > (SELECT AVG(population) from city korea)

      • 결합

        • 내부결합 : INNER JOIN ~ ON

          • SELECT (열 명) FROM (테이블1) INNER JOIN (테이블2) ON (결합 조건)

          • ex. SELECT countrylanguage.*, country.name FROM countrylanguage INNER JOIN country ON countrylanguage.contrycode = country.code WHERE language = 'Korean'

        • 외부결합 : (LEFT or RIGHT) OUTER JOIN

          • SELECT (열 명) FROM (테이블1) OUTER JOIN (테이블2) ON (결합 조건)

    • SQL 문 구분

      • DDL (Data Definition Language)

        • ex. CREATE, DROP, ALTER

      • DML (Data Manipulation Language)

        • ex. SELECT, INSERT, UPDATE, DELETE

      • DCL (Data Control Langauge)

        • ex. COMMIT, ROLLBACK

  • 트랜잭션과 동시성 제어

    • 트랜잭션

      • 원자성 (Atomicity)

        • 커밋 (commit)

        • 롤백 (rollback)

      • 일관성 (Consistency)

      • 고립성 혹은 격리성 (Isolation)

        • 잠금 (LOCK)

        • 격리 수준

          • 커밋되지 않는 읽기 (Read Uncommitted)

          • 커밋된 읽기 (Read Committed)

            • 최신 쿼리의 실행 개시 시점에서 커밋된 데이터를 읽는다.

          • 반복 읽기 (Repeatable Read, RR)

            • 최초 쿼리를 실행한 시점에 커밋된 데이터를 읽는다.

            • 같은 쿼리를 복수 회 실행해도 최초 읽은 내용만 반환한다.

            • MySQL 트랜잭션 격리 수준의 기본 값

          • 직렬화 가능 (Serializable)

        • 격리 수준이 완화되면 나타나는 문제

          • 더티 읽기 (Dirty Read)

          • 애매한 읽기 (Fuzzy Read)

          • 팬텀 읽기 (Phantom Read)

      • 지속성 (Durability)

      • 암묵적 혹은 오토커밋 설정

    • MVCC 에 따른 MySQL 특성

      • 읽기와 읽기는 서로 블락되지 않는다.

      • 읽기와 갱신은 서로 블락되지 않는다.

      • 갱신과 갱신은 블락된다.

    • 잠금 타임아웃과 교착상태

    • 해서는 안되는 트랜잭션 처리

  • 테이블 설계의 기초

    • 제 1정규형

      • 테이블 셀에 복합적인 값을 포함하지 않는다.

      • 스칼라 값 이외의 값을 포함하지 않는 테이블

    • 제 2정규형

      • 부분함수 종속

        • ''기본키" 가 2개 열 이상일 때, 열의 일부에만 함수 종속이 존재하는 것.

      • 기능적인 테이블

    • 제 3정규형

      • 추이함수 종속

        • "기본 키" 이외의 키 간에 발생하는 함수 종속

    • ER 다이어그램

      • Entity

        • PK (Primary Key)

      • Relationship

        • FK (Foreign Key)

    • 가장 중요한 2가지 사실.

      • 테이블은 집합이다.

      • 테이블은 함수이다.

  • 백업과 복구

    • DBMS의 3가지 구조

      • 로그 선행 쓰기 (WAL : Write Ahead Log)

      • 데이터베이스 버퍼

      • 크래시 복구

    • 백업과 복구

      • PITR (Point-in-time Recovery)

        • 임의의 시점에서의 데이터 변경을 포함한 복원

      • 백업의 3가지 관점

        • 데이터베이스 상태

          • 핫 백업 (online)

            • 주로 데이터베이스의 기능 사용

          • 콜드 백업 (offline)

            • 주로 OS의 기능 사용

        • 데이터의 형식

          • 논리 백업

            • SQL 기반의 텍스트 형식

            • 편집 가능, 이식성 우수, 다만 크기가 크고 속도가 느리다.

          • 물리 백업

            • 바이너리 형식

            • 크기가 작고, 속도가 빠름, 다만 플랫폼 의존적.

        • 데이터의 양

          • 풀 백업

          • 부분 백업

            • 차등 백업

              • 최근에 풀 백업한 이후에 갱신된 데이터를 백업

            • 증분 백업

              • 최근 백업한 이후에 갱신된 데이터를 백업

              • 롤 포워드 리커버리

              • 현재 데이터베이스 = 풀 백업한 데이터 + 풀 백업