스터디 질문


암호화 방법 중 응용프로그램의 암호화와 Mysql 서버의 암호화 방법의 차이를 설명해주세요.

응용 프로그램에서 암호화는 이미 응용 프로그램에서 직접 암호화 후 MySQL 서버에 저장을 하는 것이다. 예를 들어 날짜 컬럼이 암호화 되어 저장이 되었다면 해당 컬럼을 이용한 조건 검색은 원하는 결과값으로 도출해 낼 수 없다. 즉, 암호화 되기 전의 값으로 조건 검색이 되지 않는다.

하지만 MySQL 서버의 암호화(TDE)를 이용하면 MySQl 서버는 인덱스 관련된 작업을 모두 처리한 후 최종 디스크에 데이터 페이지를 저장할 때만 암호화하기 때문에 위와 같은 제약이 없다.

데이터베이스 서버와 디스트 사이의 데이터를 읽고 쓰기 지점에서 암호화/복호화를 수행한다. 그래서 MySQL 서버에서 디스크 입출력 이외의 부분에서는 암호화 처리가 전혀 필요하지 않다. 즉, MySQL 서버의 I/O 레이어에서만 데이터의 암호화 및 복호화 과정이 실행되는 것이다.

이를 TDE(Transparent Data Encryption)라고 한다.

TDE에서 암호화 키는 KeyRing 플러그인에 의해 관리된다. MySQL 서버는 HashiCrop Vault 같은 외부 키 관리 솔루션 또는 디스크의 파일에서 마스터 키를 가져오고, 암호화된 테이블이 생성될 때마다 해당 테이블을 위한 임의의 테이블스페이스 키를 발급한다. 그리고 MySQL 서버는 마스터 키를 이용해 테이블스페이스키를 암호화해서 각 테이블의 데이터 파일 헤더에 저장한다.

B-Tree는 Balanced Tree의 약자인 것 처럼 여러 개의 자식 노드를 가질 수 있게 된다. 이는 인덱스 페이지의 크기와 키 값의 크기로 결정된다.

인덱스의 키가 큰 값일 수록 인덱스 페이지는 더 적은 수의 키를 저장하게 된다. 더 적은 자식 노드를 저장하는 것이다. 이는 레코드 조회시 더 많은 인덱스 페이지를 읽는 상황이 발생할 수 있고 디스크로부터 읽어야 하는 횟수가 늘어나 느려진다는 것을 알 수 있다.