1. 트랜잭션이란? 트랜잭션은 DB의 작업 처리 단위를 말합니다. 대표적인 예가 입출금인데 제가 홍길동에게 100원을 송금한다고 가정해보겠습니다. 내 통장에서 100원이 감소한다. 홍길동 통장에 100원이 증가한다. 위 두 과정은 한 묶음으로 반드시 모두 실행됨을 보장하여야합니다. 내 통장에서는 100원이 감소되었는데, 홍길동 통장에는 100원이 증가되지 않는 불상사를 막기 위해서입니다. 이 묶음이 모두 정상적으로 실행되었다면 COMMIT을 해주고, 중간에 에러가 났다면 ROLLBACK을 하여 그동안의 작업을 모두 되돌립니다. 트랜잭션은 4가지의 특징을 가집니다. 이 4가지 특징의 앞글자만 따서 ACID라고 부릅니다. 원자성(Atomicity): 트랜잭션은 더 이상 분해가 불가능한 최소한의 작업 처리 단..
1. Index란? 혹시 테이블에 데이터를 저장할 때 특정 컬럼을 기준으로 정렬하여 저장하고싶다는 생각을 해보신적 있으신가요? 🤔 그런게 왜 필요하냐구요? 알고리즘을 공부해보신 분들은 아실겁니다.. 탐색의 전제는 정렬이라는 것을요 ! 만약에 '이름'이라는 컬럼이 있고 제가 홍길동이라는 이름을 가진 데이터를 검색하고싶을 때, '이름'을 기준으로 정렬이 되어있다면 맨 뒷쪽의 'ㅎ'부터 찾아나가면 될 것입니다. Index는 바로 이런 특정 컬럼을 기준으로 정렬하여 데이터를 저장해놓고 싶을 때 사용합니다. 2. Clustered Index란? 아래와 같이 DB에 10개의 데이터를 저장한다해보겠습니다. 위와 같은 데이터를 SQL문을 통해 DB에 저장하게되면, 내부적으로 아래와 같은 Data Page 단위로 저장됩..
1. JOIN이란? JOIN은 2개 이상의 테이블을 엮어서 조회하는 연산입니다. 다음과 같은 종류가 있습니다. Inner JOIN: 서로 매칭되는 것만 조회한다. (교집합) Outer JOIN: 매칭되는 데이터를 기준으로 좌측 또는 우측의 데이터도 같이 조회합니다. Outer JOIN은 세 종류가 있습니다 --> Left Outer JOIN, Right Outer JOIN, Full Outer JOIN Natural JOIN: 두 테이블을 JOIN할때 컬럼명, 타입이 같은 모든 컬럼을 JOIN 조건으로 사용합니다. Selft JOIN: 자기 자신의 테이블을 JOIN하는 것입니다. employees 테이블이 사원번호, 상사번호를 가지고 있다고 가정해보겠습니다. 이때, 특정 사원의 상사를 구하고 싶다면 Se..
NoSQL은 'Not Only SQL'의 약어로, RDB로 처리하기에 효과적이지 않은 부분을 대신해 처리하기 위해 탄생했다. 대용량의 로그 처리와 같이 write가 많이 일어나는 작업에 적합하다. NoSQL은 크게 3가지로 분류할 수 있다. Key-Value Store Key값으로 Value를 즉시 찾을 수 있도록 Hash 데이터 구조를 사용한다. ( Java의 HashMap같은 구조 ? ) Memcached, Redis와 같은 Cache 솔루션이 여기에 속한다. Column Oriented Store MySQL과 같은 RDB는 행 단위로 저장하는 Row Oriented Store다. 그에 반면, 열(column) 단위로 정보를 저장해놓는 구조를 말한다. HBase, Cassandra와 같은 제품이 여기..
H2는 Java 기반의 오픈소스 RDBMS다. H2의 특징은 다음과 같다. Server 모드, Embeded 모드의 in-memory 기능을 지원한다. ( 디스크 기반의 테이블 또한 지원한다. ) 브라우저 기반의 콘솔모드를 사용할 수 있다. 별도의 설치과정이 필요없고, 용량도 약 2MB로 매우 가볍고 빠르다. JDBC API를 지원한다. 특징을 보면 알겠지만, 매우 가볍게 돌릴 수 있다는 점에서 애플리케이션 개발에서 테스트 DB로 많이 사용된다. H2 실행하기 H2를 다운받은 후, bin/h2.bat를 실행하면 프로세스가 실행된다. ( Unix 플랫폼은 h2.sh를 실행한다. ) localhost:8082 로 접속해보면 H2 콘솔로 들어가지는데, 여기서 설정을 해주면된다. 여기서 기본 값으로 놔두고 [연..
1. 저장 프로시저(SP)란? SP(Stored Procedure)는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합입니다. 쉽게 말해, 특정 로직의 쿼리를 함수로 만들어 놓은 것입니다. 페이징 쿼리와 같이 자주 사용되는 쿼리가 있다면 함수로 한 번 만들어놓고 사용하게 되면 성능 상으로나 코드 재사용성 등에 이점이 있을 것입니다. SQL을 옵티마이저가 해석하고 최적의 결과물을 만들어내는 데에는 많은 비용이 드는데, SP로 만들어놓으면 매번 그런 비용을 소모할 필요가 없게 되겠죠? 👏 SP를 사용했을 때의 장점을 요약하면 다음과 같습니다. 하나의 요청으로 여러 SQL문을 실행할 수 있다. (네트워크 부하를 줄일 수 있음) SQL을 구문 분석하고 실행 가능한 코드로 변환하는 데에는 많은 비용이..
Tablespace 데이터를 관리한다는 것은 디스크에 데이터를 저장하고, 추출하고, 삽입하고, 삭제하는 작업을 한다는 것. 그럼 데이터는 어디에 저장되어 관리되어지는 것일까? 데이터 파일이다. ( 파일은 데이터가 저장되는 물리적인 공간 ) MySQL 8.0 기준으로 총 5가지의 Tablespace가 존재한다. System Tablespace File-Per-Table Tablespace General Tablespace Undo Tablespace Temporary Tablespace 당연히 데이터 파일에 아무런 체계없이 데이터를 무작정 저장하지는 않는다. 오라클 DBMS를 예로 들면, 오라클은 데이터 파일 내부의 공간을 4개의 논리적인 공간으로 나눠놨다. 테이블스페이스 (Tablespace) C++의 ..
파티셔닝 저장해야할 정보가 많은 대규모 시스템의 경우, 하나의 DB에 모든 정보를 저장해버리면 응답속도는 아주 느려질 것이다. 그럼 데이터를 분할해서 저장하기위해 2가지 방법을 생각해볼 수 있다. DATABASE를 여러 대로 분할 TABLE을 여러 대로 분할 위에서 첫 번째 방법은 잘 쓰이지 않는데, DB를 여러 대로 분할할 경우 read는 분산 처리할 수 있을지언정 write는 모든 DB에 동기화해야하니 분산 처리가 불가능하기 때문. 그래서 일반적으로 DB 파티셔닝이라하믄 TABLE을 여러 대로 분할하는 방법을 말한다. TABLE을 분할하는 방법은 다시 또 2가지로 나눌 수 있다. 수평 단편화 수직 단편화 수평 단편화 TABLE을 수평으로 쪼개는 것. 어떤 쪼개진 TABLE에 어떤 데이터가 있는지를 쉽..
RDBMS에서 DB와 테이블을 생성하고, 사용자를 추가하거나 각각의 DB에 접근 권한을 주는 등의 행위는 MySQL Workbench와 같은 GUI 툴에서 간단하게 해줄 수 있습니다. 하지만, 기본적인 명령어는 알아두는 것이 좋겠죠? 🤓 1. DATABASE 생성 CREATE DATABASE [DB명] default CHARACTER SET UTF8; 2. 특정 사용자에게 DB와 테이블의 접근 권한 주기 다음은 DB와 테이블에 접근 권한을 가지는 쿼리입니다. 단순히 접근할 수 있냐를 넘어, 해당 테이블에 어떤 DML 쿼리문 실행을 허용할지, 어떤 DDL 쿼리문 실행을 허용할지 등을 자세하게 설정해줄 수도 있습니다. -- 사용자 계정 생성하는 쿼리 명령어 CREATE USER '[아이디]'@'localho..