스프링으로 개발을 하다 보면 application.yml 또는 application.properties 설정 파일에 있는 리소스를 암호화해야 하는 경우가 있습니다. 이번에는 리소스의 내용을 암호화하여 노출시키지 않는 방법에 대해 알아보도록 하겠습니다. 1. Jasypt와 jasypt-spring-boot 라이브러리 [ Jasyp와 jasypt-spring-boot 라이브러리 ] Jasypt 라이브러리는 암호화에 대한 깊은 지식이 없어도 최소한의 비용으로 암호화 기능을 제공할 수 있도록 도와주는 자바 라이브러리이다. 자바 애플리케이션에서는 Jasypt 라이브러리를 사용해 리소스를 손쉽게 암/복화를 구현할 수 있다. 하지만 일반적으로 자바는 스프링 애플리케이션에서 주로 사용된다. 스프링으로 개발을 하다 보면..

이번에는 데이터베이스가 트랜잭션을 지원하는 방법과 동작 과정에 대해 살펴보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성한 내용입니다. 1. MVCC(다중 버전 동시성 제어)와 언두 로그(Undo Log), 리두 로그(Redo Log)[ MVCC(다중 버전 동시성 제어)란? ]데이터베이스를 사용하는 가장 큰 이유 중 하나는 바로 트랜잭션 때문이다. 하지만 모든 DBMS가 트랜잭션 기능을 제공하지는 않는데, 대표적으로 MySQL의 스토리지 엔진 중 하나인 MyISAM이 그렇다. 대신 MySQL의 InnoDB는 레코드 단위까지 트랜잭션을 지원해준다.레코드 수준의 트랜잭션을 지원하기 위해서 InnoDB는 MVCC를 사용한다. MVCC(Multi-Version ..

현재 사내 데이터베이스의 PK가 모두 자연키로 설정되어 있습니다. 데이터베이스 구조를 개선하면서 해당 부분을 대체키로 개선하려고 하는데, 이번에는 PK를 대체키로 설정해야 하는 이유에 대해 살펴보도록 하겠습니다. 아래의 내용은 RealMySQL, 자바 ORM 표준 JPA 프로그래밍, 실무 경험 등을 바탕으로 작성한 내용입니다. 1. PK(기본키)를 대체키로 설정해야 하는 이유변경 가능성을 제거할 수 있음성능을 향상시킬 수 있음테이블 구조와 관련 코드를 간결하게 만들 수 있음데이터의 무결성을 보장할 수 있음 [ 변경 가능성을 제거할 수 있음 ]과거에 주민번호를 PK로 사용하는 것이 일반적이던 시절이 있었다. 주민번호는 모든 사람에게 반드시 부여되며(NOT NULL), 유니크하고(UNIQUE), 절대..

인덱스를 저장하는 방식(또는 알고리즘)에 따라 B-Tree 인덱스, Hash 인덱스, Fractal 인덱스 등으로 나눌 수 있습니다. 일반적으로 B-Tree 구조가 사용되기 때문에 B-Tree 인덱스를 통해 인덱스의 동작 방식에 대해 살펴보도록 하겠습니다. 1. B-Tree 인덱스와 인덱스가 필요한 이유[ B-Tree 구조란? ]B-Tree(Balanced Tree) 인덱스에 대해 알기 위해서는 먼저 B-Tree 자료구조를 알아야 한다. B-Tree는 자식 2개 만을 갖는 이진 트리(Binary Tree)를 확장하여 N개의 자식을 가질 수 있도록 고안된 것이다. 그리고 좌우 자식 간의 균형이 맞지 않을 경우에는 매우 비효율적이라, 항상 균형을 맞춘다는 의미에서 균형 트리(Balanced Tree)라..

이번 내용은 RealMySQL 8.0 책을 보면서 추가적으로 공부하여 정리한 내용입니다. 따라서 MySQL의 InnoDB가 아닌 경우에는 다를 수 있으니 참고 부탁드립니다. 1. 프라이머리 키(PK, Primary Key)와 클러스터링 테이블 [ 프라이머리 키(PK, Primary Key)의 특성 ]데이터베이스, 특히 MySQL에서 프라이머리 키(PK, Primary Key)는 상당히 신중하게 결정되어야 한다. 그 이유는 PK가 레코드의 저장 위치를 결정하기 때문이다. 그래서 PK는 NOT NULL, 유니크 등의 특성을 갖는다.MySQL은 PK를 기준으로 유사한 값들이 함께 조회되는 경우가 많다는 점에서 착안하여, PK가 유사한 레코드들끼리 묶어서 저장한다. 유사한 것들을 묶는 것을 클러스터링이라고..