목록CS공부/데이터베이스 (11)
CS 공부

JOIN 알고리즘의 종류 - Nested-Loop JOIN (중첩 루프 조인) - Sort Merge JOIN (병합조인) - Hash JOIN (해시 조인) 로우가 많아 질수록 쿼리의 코스트(Cost)는 높아진다. 이렇게 모두 비례적으로 성능의 떨어지지만 떨어지는 정도에는 차이가 있다. Loop가 가장 기본적인 방법이며, 양이 적을 때에는 성능이 좋지만 데이터가 많아질 수록 비용도 급격히 증가한다. Merge 방식은 데이터가 적을 경우에는 Loop 보다는 못하지만, 양이 많아 질 수록 더 뛰어난 성능을 보인다. (여러 조건들이 있음) Hash 방식은 데이터가 얼마 없을 경우에는 그 오버헤드(Overhead)로 인하여 성능이 좋지 않지만, 데이터가 많을수록 Loop 보다는 낮고 Merge 보다는 못하게 ..
레디스(Redis)는 Remote Dictionary Server의 약자로서, "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다. 인메모리 상태에서 데이터를 처리함으로써 흔히 사용하는 관계형 DB나 문서형 DB보다 빠르고 가볍다. 운영중인 웹 서버에서 키-값 형태의 데이터 타입을 처리해야하고 I/O가 빈번히 발생해 다른 저장 방식을 사용하면 효율이 떨어지는 경우 사용 어마어마한 I/O를 발생시키는 데이터를 처리할 때 레디스를 사용해 데이터를 캐싱 처리하고, 일정한 주기에 따라 RDS에 업데이트를 한다면 RDS에 가해지는 부담을 크게 줄이고, 성능은 크게 향상할 수 있다. 많은 I/O를 예시로 들었지만 가장 많이 사용되는 건 역시 사..

Btree 추가 해야함 인덱스란 인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 즉 데이터베이스의 index는 책의 색인과 같다. 인덱스를 활용하면, 데이터를 조회하는 SELECT 외에도 UPDATE나 DELETE의 성능이 함께 향상된다. 그러한 이유는 해당 연산을 수행하려면 해당 대상을 조회해야만 작업을 할 수 있기 때문이다. 만약 index를 사용하지 않은 컬럼을 조회해야 하는 상황이라면 전체를 탐색하는 Full Scan을 수행해야 한다. Full Scan은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어진다. 인덱스(index)의 장점과 단점 장점 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있다. 전반적인 시스템의 부..

이상이란 이상이란 릴레이션에서 일부 속성들의 종속이나 데이터의 중복으로 인해 데이터 조작시 불일일치가 발생하는 것을 말한다. 테이블을 설계할 때 잘못 설계하여 데이터를 삭제,수정,삽입할 때 논리적으로 오류가 생기는 것이다. 대부분 이상현상이 발생하는 데이터의 중복성때문인데 이를 제거하는 과정이 정규화이다. 이상 현상의 종류 갱신 이상 릴레이션에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상 반복된 데이터 중에 일부를 갱신 할 시 데이터의 불일치가 발생한다. 삽입 이상 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가가 가능한 현상 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능하다. 삭제 이상 어떤 정보를 삭제하..

트랜잭션 관리를 위한 DBMS의 전략 DBSM의 구조는 크게 2가지이다. 1. 질의 처리기 2. 저장 시스템 페이지 버퍼란 DBMS의 저장시스템에 속하는 모듈로 메인 메모리에 유지하는 페이지를 관리하는 모듈이다. Buffer 관리 정책에 따라 UNDO 복구와 REDO 복구가 요구되거나, 그렇지 않게 되므로, 트랜잭션 관리에 매우 중요한 결정을 가져온다. UNDO UNDO란 아직 완료되지 않은 트랜잭션이 수정한 페이지들도 디스크에 출력될 수 있다. 따라서 만약 해당 트랜잭션이 어떤 이유든 정상적으로 종료될 수 없게 되면 트랜잭션이 변경한 (디스크에 출력된, 혹은 메모리 버퍼의) 페이지들은 원상 복구되어야 한다. 이러한 복구를 UNDO라고 한다. 하지만, 이 부분은 매력적이지만 매우 큰 메모리 버퍼가 필요하..

트랜잭션이란? 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위 데이터베이스의 상태를 변환시키는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 트랜잭션의 성질 원자성(Atomicity) 1-1. 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것이다. 트랜잭션은 사람이 설계한 논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어 져야 사람이 다루는데 무리가 없다. 1-2. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다. 일관성(Consistency) 2-1. 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것 2-2. 시스템이 가지고 있는 고정요..

SQL이란 SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 관계형 데이터 베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터 베이스 객체 접근 조정 관리를 위해 고안되었다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다. 데이터 저장 방식으로 인해 SQL 데이터베이스는 일반적으로 수직적 확장만 지원한다. 관계형 데이터베이스 관계형 데이터베이스 정의 - 통합된 데이터(integrated data) : 똑같은 데이터가 원칙적으로 중복되어 있지 않다는 것을 말한다. - 저장된 데이터(stored data) : 컴퓨터가 접근할 수 있는 기억장치에 저장된 데이터를 말한다. - 운영 ..

SQL Injection 이란 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위이다, 대부분 클라이언트가 입력한 데이터를 제대로 필터링하지 못하는 경우에 발생 공격의 쉬운 난이도에 비해 피해가 상당하다. 공격 종류 및 방법 논리적 에러를 이용한 SQL Injection 가장 많이 쓰이고, 대중적인 공격 기법 위의 사진에서 보이는 쿼리문은 일반적으로 로그인 시 많이 사용되는 SQL 구문이다. 해당 구문에서 입력 값에 대한 검증이 없다면 논리적인 에러를 이용한 SQL Injection이 가능하다. 주입된 내용은 ‘ OR 1=1 -- 로 WHERE 절에 있는 싱글쿼터를 닫아주기 위한 싱글쿼터와 OR 1=1 라는 구문을..