DB암호화 이전에 암호화에 대한 성능 영향을 측정하는 것인 정말 쉬운일이 아니다.
가장 많이 사용하는 플러그인 방식에 촛점을 맞추어 생각해 보자.
플러그인 방식은 잘 알려진 바와 같이 DB서버에 암/복호화 라이브러리를 설치하고, 뷰와 내부 저장 함수를 사용하여 라이브러리를 연결한다. 또한 Instead of 트리거를 사용하여, Insert, Update SQL을 뷰 대신 원래의 테이블에 대해 수행하도록 변환한다.
이런 일련의 과정은 DB에 매우 심대한 영향을 주고, 특히 성능에 많은 영향을 미친다. 초기 많은 DB암호화 실패 사례가 나왔던 것도 결국 이런 영향이 얼마나 큰지 알지 못하고 무턱대고 암호화를 하다가 빚은 참사가 아닐는지.
DB암호화를 고려할 때, 가장 먼저 드는 생각이 “암호화 후에 성능이 얼마나 감소할 것인가?” 하는 의문이다.
필자도 이런 문제로 한참 고민을 한 적이 있었는데, 어떤 계기로 모 공공기관의 DB암호화 영향도 분석이라는 과제를 수행할 기회가 있었다.
주로 성능 관점에서 DB암호화 시의 영향도를 예측하는 작업이었는데, 현재 수행되는 SQL에 대한 정보를 DBMS에서 수집한 후에, SQL을 파싱(Parsing)하여 암호화 시에 영향받는 SQL을 분리하면 그에 대한 예측이 가능하지 않을까 하는 막연한 생각으로 출발하였다.
오라클 DBMS의 경우에는 V$SQL 등의 테이블에 해당 인스턴스에서 수행한 SQL에 대한 통계 정보를 저장하고 있는데, SQL 수행횟수, SQL로 처리한 로우 수, CPU Time 총합, Elapsed Time 총합 등이 그에 해당한다.
우선 이런 정보를 일정한 주기로 수집하였다. 해당 정보는 오라클의 메모리가 부족해지지 않는 한 메모리 내에 유지되므로 하루의 몇 회 정도만 수집을 해도 거의 빠짐없이 V$ 테이블의 정보를 수집할 수 있다. 특정 시점에서만 수행되는 SQL이 있을 수 있어서, 1 개월 정도 계속하여 SQL을 수집하였다.
이렇게 수집한 SQL을 파싱하여, SQL이 사용하는 테이블, 컬럼 정보를 추출하였고, 이를 기준으로 해당 SQL이 암호화 대상 테이블/컬럼을 사용하는지 여부를 판정할 수 있었다. 이렇게 분류를 해 보면, 어떤 테이블에 관련된 SQL이 몇 종이나 되며, 해당 테이블을 사용하는 SQL이 전체 CPU 사용량의 몇 %에 해당하는 지 등의 다양한 정보를 얻어낼 수 있다.
또한 암호화 대상 테이블이 실제로 사용되는 테이블인지, 아니면 한때 필요에 의해서 만들었으나 지금은 아무도 사용하고 있지 않은 테이블인지(물론 연말에 한번 사용하거나, 국정감사를 대비해서 만들어 놓은 테이블일 수도 있다) 등을 분류하여, 임시 성격의 테이블은 제거하는 등의 판단을 내리는 데도 활용할 수 있다.
이런 정보가 생성이 되면 각 테이블별로, 이런 추측이 가능하다.
“만약 A라는 테이블의 B라는 칼럼이 암호화 대상인 경우에, 해당 칼럼을 사용하는 SQL은 암호화 후에 일정한 비율로 영향을 받을 것이다”
여기서 우리가 알아내야 하는 것은 비율을 결정하는 요소인데, 플러그인 방식에서는 해당 SQL에서 암/복호화 함수가 얼마나 불려지는가가 핵심이다. 즉 어떤 SQL이 100개의 주민번호를 읽어오는 것이라면 100번의 복호화 함수가 호출되므로, 암호화 이전과 차이는 100번의 복호화 함수 수행시간이 된다. 물론 이런 비교는, 암호화 전후에 실행계획상의 변화가 없다는 전제를 기초로 한다.
쉬워 보이는 이 논리에 어려운 점이 숨어 있는데, 각 SQL별로 암호화 대상 칼럼을 얼마나 가져오는지 알 수 있어야 한다는 것이다. 이 부분은 현재도 해결하지 못한 과제인데, 해당 프로젝트를 수행하는 시점에서는 시간 관계상 모델을 매우 단순화하여 영향도를 측정하였다.
여러 번의 DB암호화 프로젝트를 거쳐 암호화 영향도 분석의 효용성을 인식하게 되었는데,
1) 암호화를 할 때 주의해야 할 테이블(핵심 테이블) 선정
2) 많이 사용되고 CPU 점유율이 높은 SQL(핵심 SQL) 식별
3) 추출된 SQL 중 암호화 대상 SQL만 분류하여, 효율적인 기능 및 성능 시험 수행
하는데 활용하고 있다. 더불어 정확한 값은 아닐지라도 암호화 후에 CPU 관점에서 얼마나 영향을 받는지를 계산하여, 플러그인 방식의 암호화를 적용하는 것이 가능한지 여부에 대한 판단을 내리는데 기초자료로 사용한다.
DB암호화를 고려한다면, 이런 방식의 영향도 분석을 꼭 해볼 것을 권하고 싶다.
출처 : http://www.dbguide.net/knowledge.db?cmd=specialist_view&boardUid=170383&boardConfigUid=93&boardStep=&categoryUid=