스프링으로 개발을 하다 보면 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)라고..