본문 바로가기

CS/데이터베이스

(12)
CAP이론 1. CAP 이론이란? 시스템은 Consistency, Availability, Partition tolerance 중 두 가지만 만족할 수 있다는 것이다. 2. CAP ① Consistency(일관성) ACID 와 같이, 항상 동일한 데이터를 보여주어야 한다. ② Availability(가용성) 모든 요청에 대해서 정상적인 응답을 해야한다. DB가 다운되어도 read, write 등의 동작은 항상 성공적으로 리턴되어야 한다. ③ Partition tolerance(분단 허용성) 클러스터가 여러 대 동작하고 있을 때 통신 장애가 발생해도 시스템이 정상적으로 동작해야 한다. 관계형 데이터베이스는 CA 시스템이다.
JOIN 1. JOIN 이란? 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법 2. JOIN의 종류 ① INNER JOIN 교집합으로, 기준 테이블과 JOIN 테이블의 공통 부분을 보여준다. SELECT A.NAME, B.AGE FROM EX_TABLE A INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP ② LEFT (OUTER) JOIN 왼쪽테이블 기준으로 모든 컬럼에 대해 JOIN 연산을 수행한다. NULL값이 표시될 수도 있다. RIGHT (OUTER) JOIN은 생략 SELECT A.NAME, B.AGE FROM EX_TABLE A LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP ③ FULL OUTER ..
DB 역정규화 1. 역정규화란? 정규화를 하면 JOIN 연산 시 시간이 많이 걸릴 수 있다. 이러한 과부하를 방지하기 위해 정규화를 통해 분리되었던 릴레이션의 중복을 허용하고 다시 통합하거나 분할하여 구조를 재조정하는 과정이다. 2. 역정규화 종류 ① 릴레이션 역정규화 릴레이션 병합: 두 릴레이션 간의 잦은 참조로 성능이 저하될 경우 이를 해결하기 위해 두 릴레이션을 병합한다. 릴레이션 분할: 자주 사용하지 않는 속성이나 튜플이 릴레이션에 있을 경우 검색 성능이 저하된다. 이 때에는 자주 사용하는 속성이나 튜플을 분해하여 성능을 향상시킨다. 수직/수평 분할이 있다. ② 속성 역정규화 릴레이션의 성능을 향상시키기 위해 속성 또는 파생속성을 추가한다. 파생 속성: 현재 릴레이션에는 없는 속성이지만 작업의 효율을 위해 한 ..
DB 정규화 1. 정규화란? 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스 데이터 중복에 의한 이상현상을 해소하는 과정 2. 정규화 종류 ① 1정규형(1NF): 모든 속성은 반드시 하나의 원자값만 가져야 한다. 반복그룹(취미1, 취미2, 취미3)을 가지거나 다중값(축구, 게임, 독서)를 가진다. 이는 1정규형을 위배하는 것이다. 테이블을 분리하여 1:N 관계를 만들어 준다. ② 2정규형(2NF): 부분적 함수종속 제거, 모든 속성은 반드시 모든 기본키에 종속되어야 한다. 기본키 일부에만 종속X 점수는 기본키(강의번호+학번)에 종속적이다. 하지만 이름은 학번만으로도 종속적이다. 이는 2정규형을 위반한다. 새로운 학생을 추가하는 경우 점수에 null값이 들어간다→입력이상 강의를 삭제할 경우..
이상(Anomaly) 1. 이상이란? 릴레이션에서 일부 속성들의 종속이나 데이터들의 중복으로 인해 데이터 조작 시 불일치가 발생하는 것을 말한다. 즉, 테이블을 설계할 때 잘못 설계하여 데이터를 삭제, 수정, 삽입할 때 논리적으로 오류가 생기는 것을 말한다. 이를 해결하는 것은 후에 포스팅할 '정규화'이다. 2. 이상의 종류 {Student ID, Course ID, Department, Grade} ① 삽입 이상 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가할 수 있는 현상 ex) 기본키가 {Student ID, Course ID}인 경우 → Course를 수강하지 않은 학생은 Course ID가 없다. 새로운 학생의 Course ID는 Null일 수밖에 없는데, 기본키는 Null이 될 수 없다...
SQL vs NoSQL 1. SQL (관계형 DB) 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 데이터는 관계를 통해 여러 테이블에 분산된다. 즉, 스키마를 준수하지 않은 데이터는 테이블에 추가될 수 없다. 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다. 장점 명확하게 정의된 스키마 데이터 무결성 보장 각 데이터가 중복없이 한번만 저장된다 단점 덜 유연하다. 스키마를 사전에 계획하고 알려야 한다. (추후 수정 어려움) 관계를 맺고 있어서 복잡한 쿼리가 만들어질 수 있다. 수직적 확장만 가능하다. → 관계를 맺고 있는 데이터가 자주 변경될 경우 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우 2. NoSQL (비관계형 DB) 스키마..
트랜잭션의 격리수준 먼저 오류 3가지를 정리하자면, ① Dirty Read: 존재하지 않거나, 롤백되었거나, 저장 위치가 바뀌었을 수도 있는 데이터를 읽는 현상 ② Non-Repeatable Read: 동일한 쿼리문이 2번 이상 수행되었을 때 결과값이 다른 현상 ③ Phantom Read: Non-Repeatable Read의 한 종류로, 컬럼이 없어지거나 생기거나 등의 현상 1. Read Uncommitted 커밋 전의 데이터도 조회할 수 있다. Dirty Read 발생 2. Read Committed 커밋이 완료된 데이터만 조회할 수 있다. Dirty Read 방지 Phantom Read, Non-Repeatable Read 발생 교착 상태가 발생할 수 있다. 3. Repeatable Read 쓰는 동안 읽을 수 없고,..
Injection Injection이란, 악성 사용자가 보안상의 추약점을 이용하여 임의의 sql문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위이다. '여기어때' 홈페이지도 2017년 3월에 해당 공격을 당했다고 한다. 1. 공격 종류 ① 논리적 에러 or 뒤에 있는 구문 1=1 은 항상 true인 값이다. 따라서 항상 결과를 보여주게 된다. ② Union 명령어 원하는 컬럼값까지 한꺼번에 보일 수 있다. 현재 id, passwd까지 같이 보이도록 인젝션했다. ③ Boolean based Injection 참과 거짓만 출력하는 페이지에 공격자가 조작한 쿼리로 인해 db내용을 노출할 수 있다. ④ Time based Injection 값 뒤에 sleep() 함수를 넣어 만약 참이면 sleep..
수직적 확장과 수평적 분할 1. 수직적 확장(Scale Up) 서버 자체를 증강시켜 처리 능력을 향상시킨다. 구축, 설계가 쉽다. 인프라 비용이 별도로 발생하지 않는다. 하지만 확장성의 한계가 있다. 트래픽 부하로 인한 장애 영향이 커진다. 데이터 갱신이 빈번하게 일어나는 데이터 베이스 서버 등 2. 수평적 분할(Scale Out) 서버 대수를 증가시켜서 처리 능력을 향상시킨다. 지속적인 확장이 가능하다. 분산처리로 장애 가능성이 낮아진다. scale up 보다는 저렴하다. 설계, 구현이 복잡해서 관리 비용이 증가한다.(서버 모두 같은 데이터를 유지해야 한다) 로드 밸런서가 필요하기 때문에 기본적인 직렬화가 존재한다. 높은 병렬성 실현이 쉽고 정합성 유지가 쉬운 경우에 사용한다. 메일 게시판 서버, 데이터 읽기 전용 어플리케이션,..
인덱스란? 1. 인덱스란? 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 인덱스를 사용하지 않은 컬럼을 조회해야 한다면 전체를 탐색해야 한다(Full Scan) 하지만 인덱스를 사용한다면 일부만 탐색하면 되기 때문에 속도가 향상된다(Range Scan) 2. 인덱스의 장점과 단점 인덱스를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다. 인덱스는 약 10%의 공간을 차지한다고 한다. 하지만, INSERT : 만약 할당된 공간이 가득 차 있는 상황에서 INSERT 연산이 수행된다면, 다시 새 페이지를 할당해서 밀어내고 정렬하고... 할 일이 매우 많다! 또한 인덱스 할당을 위한 공간이 추가적으로 더 필요하다. DELETE: 데이터가 삭제되어도 인덱스는 '사용 안 함'으로 기록되고 ..