Git, SVN 등을 통해 소스코드 형상 관리를 하는 것처럼 DB도 형상관리가 가능하다. 그러한 tool 중 많이 쓰이는 것이 바로 Flyway이다. Flyway 공식 홈페이지에서 Documentation을 봐도 좋고, 간단하게 개념을 잡으려면 비록 6년전 글이지만 여기도 괜찮다.
Study/Database
이전 글들에서 DB 인덱스의 개념과 장단점, 쓰는 이유와 인덱스를 구성하고 있는 구조 등에 대해 알아봤다. (1편, 2편) 이번 글에서는 그러한 인덱스를 사용하여 원하는 데이터를 찾아가는 과정에서 어떠한 데이터 스캔 방식을 사용하는지에 대해 알아본다. 완전히 동일하지는 않지만 일맥상통한 비유를 들자면, Searching Algorithm에서 Linear Search, Binary Search 등을 떠올리면 어느 정도 감이 잡힐 것이다. 이번 글은 아래 글들을 참고하여 작성했다. [Data On-AIR] 인덱스 기본 원리 [지식 덤프] SQL Full table scan [Naver D2] 성능 향상을 위한 SQL 작성법 인덱스 스캔(Index Scan)이란? 이전 글들을 보면 알겠지만, 인덱스라는 녀석도..
거의 모든 DBMS는 인덱스 종류에 대해 특별한 언급이 없다면, B-Tree 계열 인덱스를 사용하는 경우가 대다수이다. 많고 많은 자료구조에서 왜 하필 B-Tree, B+-Tree를 사용하는지에 대해 알아본다. 이 글을 읽기 전에 이전 글을 읽고 오면 좋으며, 아래 사이트들의 내용을 토대로 작성했다. [Naver D2] 성능 향상을 위한 SQL 작성법 [Tistory] 데이터베이스 인덱스는 왜 'B-Tree'를 선택하였는가 [Tistory] 인덱스(index)란? [Tistory] B-Tree(B트리), B+트리 Tree란? 이 글을 찾아왔다는 것 자체가 Tree에 대한 개념은 이미 알고 있을 것이라 생각하고, 먼저 시간 복잡도에 대해 생각해보자. 일반적으로 위의 그림처럼 평균적으로 생긴 Tree에서 탐..
가끔 DB 배포 프로세스를 진행하다 보면 이 배포가 DCL인지 DDL인지 DMl인지 알아야 할 때가 있다. 아직 완벽하게 숙지를 못해서 정확하게 알아둘 겸 글로 남겨둔다. DCL(Data Control Language, 데이터 제어어) Control이라는 단어 뜻에 맞게 데이터를 제어하는 언어다. 데이터의 보안 / 무결성 / 회복 / 병행 수행 제어 등을 정의하는데 사용한다. 종류는 아래 네 가지가 있다. GRANT 특정 DB 사용자에게 특정 작업에 대한 수행 권한 부여 REVOKE 특정 DB 사용자에게 특정 작업데 대한 수행 권한 박탈 및 회수 COMMIT 트랜잭션 작업을 데이터에 적용 ROLLBACK 트랜잭션의 작업 취소 및 원래 데이터로 복구 DDL(Data Definition Language, 데..
Index(이하 인덱스)는 DB를 다루다 보면 필연적으로 듣는 단어이다. 본격적으로 글에 들어가기 전에 인덱스에 대해 간단하게 설명하자면, DB 데이터 조회 성능 향상을 위해 사용한다. 대용량 데이터를 담고 있는 DB 테이블에서 우리에게 필요한 데이터를 빨리 찾으려면 이 '인덱스'라는 녀석의 도움이 필요하다. 인덱스가 아예 없거나 적절한 인덱스를 찾지 못하면, 어마무시한 데이터가 담겨있는 테이블 전체를 읽어야 하기 때문에 데이터 조회 시간이 오래 걸릴 것이다. 이 인덱스에 대해 앞으로의 글들을 통해 보다 자세히 알아보자. 본 글들은 아래 글들의 내용을 토대로 작성했다. [Wiki] 인덱스 (데이터베이스) [Naver D2] 성능 향상을 위한 SQL 작성법 [Tistory] 인덱스(index)란? DB 성..
최근 운영 업무를 하며 두 컬럼을 하나의 컬럼으로 합쳐 DB 데이터를 가공하여 조회할 일이 있었다. 저렇게 말만 써놓으니까 헷갈리는데, 나랑 비슷한 고민을 한 okky의 글을 참고하면 된다. 내가 하고자 했던 것과 똑같은 질문이고, 해당 글 가장 아래 답변에 쿼리가 작성되어 있다. (AS-IS) 데이터 포맷 내가 가공하려던 기존 데이터 포맷은 아래와 같다. TYPE PLANT TOTAL M1 M2 M3 M4 M5 M6 M7 M8 M9 M 10 M 11 M 12 1 A China 25 3 4 5 2 B China 3 C China 4 D China 5 E China 6 A Brazil 7 B Brazil 8 C Brazil 9 D Brazil 10 E Brazil 어우, TOTAL부터 M1~M12까지의 숫..
어쩌다 주워 듣게 된 SQL 작성 표준을 적어둔다. 인터넷에 검색해보면 여러 표준이 나오는데, 거의 대부분이 같다. 존재 이유 어느 회사나 SQL 작성 표준 가이드가 존재하는데, 이러한 표준에 따른 형식화된 SQL 구문은 가독성을 높여서 구현 및 유지보수를 용이하게 한다. SQL 구문 표준 1. SQL 구문은 가로 최대 길이가 80자 이하가 되도록 작성 튜닝 또는 유지보수를 용이하게 한다. 2. SQL 문의 대소문자에 대한 표준을 정하여 준수 예약어는 대문자, 개체명은 소문자 등으로 작성한다. 3. 구문을 구분하는 중요한 절은 항상 새로운 행에서 시작 SELECT, FROM, JOIN, WHERE 등과 같이 중요한 절은 새로운 행에서 시작한다. 4. 쌍(Pair)으로 구성된 구문은 줄을 정렬 BEGIN ..
일주일 전쯤, MS SQL의 BEGIN TRAN 덕분에 겪었던 삽질에 대해 글을 쓰며 트랜잭션의 개념에 대해 잘 모른다는 생각이 들었다. 그래서 아래 글들을 참고하여 공부하였고, 정리 글을 남긴다. 출처) 1. 위키백과) 데이터베이스 트랜잭션 2. Naver D2) DBMS는 어떻게 트랜잭션을 관리할까? 3. Tistory) 트랜잭션(Transaction)이란? 4. Tistory) [DB기초] 트랜잭션이란 무엇인가? 데이터베이스 트랜잭션? 위키백과에서는 트랜젹션을 아래와 같이 정의하고 있다. "데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위" 여기서 "유사한 시스템"이란 트랜잭션의 성공과 실패가 분명하고, 트랜잭션이 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다. 조금 더 ..
운영 업무를 하며 '프로시저'라는 단어를 많이 접하게 되었다. 최근까지 그것을 다룰 일이 없다가, 프로시저를 수정해야 할 요청이 들어와서 본격적으로 공부하고 글을 남긴다. SQL이 무엇인지, 쿼리는 무엇인지 등 DB에 관해 어느 정도 기초 지식이 갖춰진 상태로 읽는 것을 추천한다. 저장 프로시저(Stored Procedure)란? CREATE PROCEDURE procedure_name(IN parameter) BEGIN SQL1; SQL2; END; EXECUTE procedure_name(parameter); CALL procedure_name(parameter); 위 코드의 CREATE 부터 END 까지가 저장 프로시저를 구성하는 코드이고, 하단 부의 EXECUTE 혹은 CALL 문장으로 해당 프로..