본문 바로가기

데이터베이스

(6)
Transaction Transaction이란 트랜잭션은 질의어를 통해 데이터베이스에 접근하여 일을 수행하는 작업의 단위이다. 이 작업의 단위라는 것은 서비스에 맞게 설계된대로 개발자가 정한 기준에 따라 정해진다. 즉 질의어 한문장이아니라 상황에 따라 여러문장으로 이루어질 수 있다. 트랜잭션의 특징 원자성(가장 중요) 하나의 트랜잭션은 결국 성공하여 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되어서는 안된다. 여러 SQL문으로 이루어진 작업의 단위 트랜잭션을 중간단계 까지만 반영하면, 개발한 사람의 의도대로 실행되지 않아 오작동할 수 있다. 일관성 트랜잭션의 작업 처리 결과는 항상 일관성 있어야한다. 독립성 현재 수행중인 트랜잭션이 완료될 떄까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없다. 지..
정규화와 반정규화 이상(Anomaly) 정규화 되지 않은 데이터베이스에서 데이터 중복으로 인해 발생하는 데이터 불일치 현상을 말한다. 갱신 이상: 반복된 데이터 중에 일부만 갱신할시 발생하는 데이터 불일치 삽입 이상: 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능 삭제 이상: 필요한 정보를 함께 삭제하지 않고 서는 어떤 정보를 삭제한는 것이 불가능 이러한 이상현상을 정규화를 통해 방지할 수 있다. 정규화란 관계형 데이터에스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업이다. 데이터의 중복은 저장공간을 낭비하고, 어떤 한 데이터가 갱신됐을 때 다른 데이터에는 반영되지 않는 문제가 발생할 수 있다. 이러한 문제를 해결하기 위해 단계를 나누어 정규화 과정을 거쳐 정규화를 진행한다. 제 1정규화 ..
SQL vs NO SQL SQL과 NO SQL SQL과 NO SQL은 데이터베이스 세계을 양분하는 데이터 저장 방식으로, 저장방식의 차이에 따라 생성, 조회, 수정 등에서 각각 다른 특성과 장단점을 가진다. 이 두가지에 대해 간단히 알아보고 장단점에 대해 알아보도록 하겠다. SQL SQL은 'Structured Query Language(구조화된 쿼리 언어)' 의 약자로, 관계형 데이터베이스를 사용하는데 사용하는 쿼리 언어이다. 보통 관계형 데이터베이스라는 의미로도 사용한다. SQL에는 두가지 특징이 있다. 데이터는 정해진 엄격한 데이터 스키마(=structure)를 따라 데이터베이스 테이블에 저장 데이터는 관계를 통해서 연결된 여러개의 테이블에 분산 엄격한 스키마 데이터는 테이블에 레코드로 저장되며 각 테이블에는 명확하게 정의..
SQL Injection 위키백과에 따르면, SQL Injection은 응용 프로그램 보안 상의 허점을 의도적으로 이용해, 악의적인 SQL문을 실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법을 말한다.예를들어 클라이언트에서 어떠한 문자열을 입력하고 그 문자열을 기반으로 데이터베이스에서 조회 SQL을 실행하는 경우, 문자열에 SQL 구문을 입력하므로써 기존 개발자가 의도한 동작과 다른 형태로 동작하도록 하는 것이다. SQL 인젝션에는 세가지 종류가 있다. Error based SQL Injection 논리적 에러를 이용한 SQL Injection 으로 가장 대중적인 공격 기법이다. 입력값에대한 검증이 없다면 언제든지 발생할 수 있다. Union based SQL Injection Union 명령어를 이..
SQL JOIN에 대해(작성 중) JOIN 이란 SQL에서 JOIN은 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현하는 것이다. 정규화된 테이블들 사이에서 필요한 데이터의 조합을 상황에 맞게 추출해 내는 역할을 한다. JOIN의 종류에 따라 아래와 같이 분류할 수 있다. INNER JOIN CROSS JOIN OUTER JOIN FULL OUTER JOIN SELF JOIN 지금부터 각각의 조인에 대해서 자세히 알아보겠다. INNER JOIN 가장 기본적인 조인 형식이다. 내부 조인은 구문에 기반한 2개의 테이블의 컬럼 값을 결합함으로써 새로운 결과 테이블을 생성한다. 결합할 때, 조건에서 동일한 값이 있는 튜플만을 반환한다. 예를 들어 100개의 튜플을 가지는 두개의 테이블이 있을 때 결합되는 컬럼값이 50개라..
관계형 데이터베이스의 키(Key) 관계형 데이터베이스에서 테이블은 행(row)과 열(column)로 이루어져 있고, 각 행을 튜플(Tuple) 또는 레코드(Recode), 열을 속성(Attribute) 또는 필드(Field)라고 부른다. 이 글에서는 행과 열을 튜플과 속성으로 말하도록 하겠다. 키(Key)는 튜플들을 식별하여 구분하는 기준이 될 수 있는 속성을 말한다. 키의 종류에는 다섯 가지가 있다. 후보키(Candidate Key) 기본 키가 될 수 있는 키들을 후보 키라고 한다. 기본적으로 키이기 때문에 후보키를 통해 테이블에서 유일한 튜플들을 식별할 수 있다. 즉, 중복되는 값이 없어야한다(유일성). 후보키는 꼭 한개의 속성 뿐만 아니라 두개 이상의 속성을 가질 수 있다. 그 속성들을 통해 유일한 튜플들을 식별할 수 있으면 후보키..