Computer Science/Database
-
DB 핵심 요약Computer Science/Database 2022. 1. 7. 16:56
DB 핵심 요약 [정규화, join] ∙정규화 -데이터 중복을 최대한 줄여 데이터를 구조화하고 논리적으로 저장하는 방법 ∙무결성 -테이블에 있는 모든 행들이 유일한 식별자를 갖는 특성 ∙join -두 개 이상의 테이블이나 데이터베이스를 연결하여 검색하는 방법 ➀INNER JOIN ➁LEFT OUTER JOIN ➂RIGHT OUTER JOIN ➃FULL OUTER JOIN ➄CROSS JOIN ➅SELF JOIN [인덱스] ∙인덱스 -자주 사용하는 데이터의 주소를 메모리에 비트리 자료구조로 색인화해서 올림 ∙인덱스를 조회하는 과정(레인지 스캔풀 스캔) -인덱스 페이지를 참조해가며 리프 노드에 도착해 적은 범위의 데이터에서 탐색 (루트 노드->브랜치 노드->...->리프 노드) ∙인덱스를 선정하는 기준 -기..
-
7.DB 트랜잭션(Transaction)Computer Science/Database 2022. 1. 7. 16:49
∙트랜잭션 ∘데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 -데이터베이스의 상태 변화: SELECT, INSERT, DELETE, UPDATE -작업 단위 예시: 사용자 A가 사용자 B에게 만원을 송금한다. ➀사용자 A의 계좌에서 만원을 차감한다 : UPDATE 문을 사용해 사용자 A의 잔고를 변경 ➁사용자 B의 계좌에 만원을 추가한다 : UPDATE 문을 사용해 사용자 B의 잔고를 변경 현재 작업 단위 : 출금 UPDATE문 + 입금 UPDATE문 이를 통틀어 하나의 트랜잭션이라고 한다. 위 두 쿼리문 모두 성공적으로 완료되어야만 "하나의 작업(트랜잭션)"이 완료되는 것이다. ->Commit 작업 단위에 속하는 쿼리 중 하나라도 실패하면 모든 쿼리문을 취소하고 이전 상태로 돌려놓는다.->Ro..
-
9.RedisComputer Science/Database 2022. 1. 7. 16:44
∙Redis ∘메모리 기반의 키-값 구조 비관계형 데이터베이스 -디스크가 아니라 메모리에 저장해서 디스크 스캐닝 없이 빠른 read, write 속도를 보장한다. -캐싱도 가능해 실시간 채팅에 적합하며 세션 공유를 위해 세션 클러스팅에도 활용된다. -캐싱: 처음 쿼리를 전송할 때는 데이터베이스에서 직접 가져오지만 두 번째 쿼리부터는 캐시에 저장된 데이터를 가져오는 기법 -클러스팅: 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하도록 만드는 기법 ○휘발성을 막기 위한 백업 과정 -스냅샷: 특정 지점을 설정하고 디스크에 백업하는 기법 -AOF(Append Only File): 쿼리들을 저장해두고 서버가 다운되면 재실행해서 다시 만들어 놓는 기법 ○value 5가지 ➀string(512MB까지 저장 가..
-
8.트랜잭션(Transaction) 격리 수준(Isolation level)Computer Science/Database 2022. 1. 7. 16:42
∙격리 수준 ∘트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준 -무조건 locking으로 동시에 수행되는 수많은 트랜잭션들을 순서대로 처리하면 성능이 너무 저하된다. -데이터베이스는 어느 정도 트랜잭션이 독립적인 수행을 하도록 한다. -동시성을 증가시키면 데이터 무결성에 문제가 발생하고, 데이터 무결성을 유지하면 동시성이 떨어진다. ➀Read Uncommitted(레벨 0) -SELECT 문장이 수행되는 동안 해당 데이터에 shared lock이 걸리지 않는 계층 -트랜잭션에 처리중이거나 아직 commit 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용함 -데이터베이스의 일관성 유지가 불가능하다. -사용자1이 A라는 데이터를 B라는 데이터로 변경하는 동안 사용자2는 아직 완료되지 않은(unco..
-
6.IndexComputer Science/Database 2022. 1. 7. 16:28
∙Index ∘RDBMS에서 검색 속도를 높이기 위해 테이블의 컬럼을 색인화하는 기술 -색인화 된(B+Tree구조로) Index 파일 검색으로 검색 속도를 향상시킨다. -해당 테이블의 record를 full scan하지 않는다. ○테이블 생성 과정 ➀.frm: 테이블 구조 저장 ➁.MYD: 실제 데이터 저장 ➂.MYI: Index 정보 저장(비워져 있다가 인덱싱하는 경우 생성) ○장점 -검색 속도가 빨라진다. -전반적인 시스템 부하를 줄일 수 있다. -여러 필드로 이루어진(다중 필드) 인덱스를 사용하면 첫 필드 값이 같은 레코드도 구분할 수 있다. -where 절에서 자주 사용 되거나, 외래키가 사용되거나, join을 자주하는 컬럼에 유리하다. ○단점 -.MYI 파일 크기가 증가한다. (DB의 10퍼센트..
-
5.Anomaly(이상)Computer Science/Database 2022. 1. 7. 16:27
∙Anomaly ∘잘못된 테이블 설계로 인해 발생하는 데이터베이스 이상 현상 ➀Insertion Anomaly(삽입 이상) -불필요한 데이터를 추가해야 삽입할 수 있는 상황 -기본키가 {Student ID, Course ID} 인 경우, Course를 수강하지 않은 학생은 Course ID가 없음 결국 Course ID를 Null로 할 수밖에 없는데, 기본키는 Null이 될 수 없으므로, Table에 추가될 수 없음 ->미수강 같은 Course ID를 만들어야 함 ➁Update Anomaly(갱신 이상) -일부만 변경하여 데이터가 불일치하는 모순이 발생한 상황 -만약 어떤 학생의 전공(Department)이 컴퓨터에서 음악으로 바뀌는 경우, 모든 Department 를 음악으로 바꾸어야 함. 그러나 일부..
-
4.SQL과 NOSQL의 차이Computer Science/Database 2022. 1. 7. 16:19
∙SQL ∘RDBMS에서 데이터를 CRUD할 수 있다 -데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. -정해진 구조에 맞는 레코드만 추가 가능하다. -중복을 피하기 위해 데이터는 관계를 통해 여러 테이블에 분산된다. -장점: 데이터 무결성 보장, 데이터를 중복 없이 저장 -단점: 유연하지 않다. 복잡한 쿼리문 발생 가능, 대체로 수직적 확장만 가능 -변경 사항이 반영되는 동시에 반영되어야하는 문제 등으로 일관성 보장이 어려워 수평적 확장이 어렵다. -스키마가 명확하거나 데이터가 자주 변경될 때 유리하다. ∙NOSQL ∘SQL의 반대로 스키마와 관계가 없다 -다른 구조의 데이터를 같은 컬렉션에 추가할 수 있다. -데이터를 여러 테이블에 나누어 담지 않고 동일한 컬렉션에 넣는다. -정보를 나누어 ..
-
3.SQL InjectionComputer Science/Database 2021. 9. 28. 16:52
∙SQL Injection ∘해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 ➀인증 우회 -input 창에 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력한다. -기본 쿼리문의 WHERE 절에 OR문을 추가하여 true문을 작성해 DB를 조작한다. ->input 값을 받을 때, 특수문자 여부를 검사한다. ->preparestatement를 사용하면 특수문자를 자동으로 escaping 해준다. ➁데이터 노출 -일부로 에러를 발생시켜 에러 메시지를 분석해 데이터베이스 구조를 유추한다. ->일반 사용자는 view로만 접근하여 에러를 볼 수 없도록 만든다. -View: 하나 이상의 테이블에서 유도된 가상 테이블 출처 링크