DATOR


프로페셔널이 되려면 보편타당성을 정립하고 확장하라!- (주)엔코아 서기덕 상무 커버 스토리


 coverstory1.jpg
 
간혹 프로젝트 또는 외부 세미나 발표때 접하는 외부인들 또는 회사 후배들로부터 “데이터 전문가가 되려면 어떻게 해야 합니까?” 라는 질문을 받는다. 데이터 분야에서 20년 남짓 경험을 쌓는 동안 필자는 스스로가 항상 많이 부족하다는 생각을 가지고 있으니, “전문가의 길은 끊임없는 노력 이외에는 왕도가 없다.”라는 너무나도 흔하고 궁핍한 답변만 할 뿐이다. 그럼에도 불구하고 나름 스스로 정한 기준으로 실천하고자 하는 몇 가지를 두서없이 이야기하고자 한다.

'때와 장소를 초월하여 대상의 모든 것에 대하여 예외없이 유효한 것'을 철학적으로 보편타당성이라고 한다. 하지만 보편타당성의 기준은 개인별 지식과 경험에 따라 상이할 수 밖에 없다. 

예를 들어 아래의 그림처럼 동일 사안에 대하여 초등학생, 중학생, 고등학생, 대학생이 바라보는 생각과 시각은 다른 것이다.
 
 
 p-pyo2.jpg
 
 
 
 
초등학생에게는 너무나도 난해한 과제가 고등학생에게는 상식일 수 있으며, 또한 고등학생에게는 난해한 과제가 대학생에게는 그리 난해하지 않을 수도 있다. 즉, 각자의 축적된 지식과 경험에 따라 보편타당성의 기준은 상이할 수 밖에 없다. 그러므로 전문가와 일반인의 가장 큰 차이는 보편타당성에 대한 기준과 범위의 상이함에 있다고 할 수 있다.

예들 들어 '성능 개선의 핵심은 I/O 비효율을 제거하는 것이다' 라는 보편타당성을 가지고 있는 A, B, C 3인이 각자 아래와 같이 성능 개선을 수행한다고 가정하자.
 

 

I/O 비효율의 원인

성능 개선 방안

A의 관점

FULL TABLE SCAN인 경우만 I/O 비효율이 발생하며, 어떤 형태로든 인덱스를 경유하는 경우에는 전혀 문제가 없다.

조건절을 기준으로 필요한 만큼 인덱스 생성한다.

B의 관점

부적절한 인덱스 정의로 인한 불필요한 I/O (불필요한 INDEX SCAN 또는 인덱스를 경유한 테이블로의 불필요한 random access) 가 주요 원인이다.

조건절의 access path를 기반으로 인덱스 최적화 전략을 수립하고 필요하면 SQL 최적화도 수행한다.

C의 관점

    I/O 비효율은 주로 불필요한 영역에 대

   한 I/O 발생에 기인하지만 I/O 범위에

    따라 I/O 방식의 효율성도 재고할 필요

    가 있다.

    결론적으로 I/O 비효율은 Physical I/O

    非최적화에 있다.

인덱스 최적화 또는 SQL 최적화로 성능 개선을 유도하는 것은 Logical I/O의 최적화를 유도하여 최종적으로는 Physical I/O의 최적화로 귀결시키는 것이다.

그러므로 상황에 따라서는 단순히 눈에 보이는 Physical Access Path에 국한하지 않고 Logical Access Path의 최적화 또는 물리적 저장 기법의 최적화로 Physical I/O의 최적화를 유도할 수도 있다.

 

A의 경우 적절한 인덱스 부재로 FULL TABLE SCAN이 발생하는 경우에 국한하여 필요한 인덱스를 생성하여 어느 정도의 성능 개선은 유도할 수 있다(물론 상황에 따라 인덱스 생성 이전보다 더 심각한 성능 저하가 발생할 수도 있다). 하지만 인덱스 非최적화로 야기된 성능 저하에 대해서는 더 이상의 성능 개선이 불가하다.
 
B의 경우 인덱스 또는 SQL 최적화로 대부분의 성능 저하 요소를 제거하고 성능 개선을 유도할 수 있다. 하지만 Application의 대부분이 PK 기반의 전형적인 절차형 처리 방식으로 구성되어 있는 경우에는 인덱스 최적화 또는 SQL 최적화로는 성능 개선의 한계에 봉착하게 된다.

C의 경우 1차적으로는 B와 같이 인덱스 최적화 또는 SQL 최적화로 성능 개선을 유도한다. 그리고 B가 겪고 있는 한계 상황에 대하여 다음과 같은 접근 방식으로 성능 개선을 수행한다. 


- 현황 : 모병원의 기간계 시스템은 대부분 환자번호를 기반으로 진료일자 단위로 반복적으로 데이터를 조회한다. 그러므로, 입원 환자와 같은 장기간 진료 내역이 존재하는 경우에는 진료 내역 횟수에 비례하여 조회 시간이 기하급수적으로 증가하고 있다.
 - 이슈 : PK 기반으로 Access하고 있으므로 인덱스 최적화가 불가하고, 주어진 작업 시간 이내에 집합적 처리의 SQL 최적화로 유도하는 것이 불가하다.
- 접근 전략 : Logical I/O의 최적화로 Physical I/O의 최적화 유도가 불가하다면, 직접적으로 Physical I/O의 최적화를 유도한다. 즉, 성능 저하의 원인은 조회 대상 환자 정보가 다수의 데이터 블록에 흩어져 있기 때문이므로 이를 집적하는 방안을 적용하여 Access되는 Data Block갯수를 절대적으로 감소시켜 성능 개선을 유도한다.
- 수행 방안 : Partitioning, Cluster Index, IOT(Index Organized Table), Hash Cluster 등의 물리적 저장 기법 중 최적 방안을 적용하는 것이 향후 자동적으로 데이터 집적을 유지하는 관점에서 지극히 타당하지만, 모병원의 여러 상황 논리상 물리적 저장 기법의 개별적 단점을 극복하기가 용이하지 않다. 그리하여 최종적으로 환자번호를 기준으로 Sorting Table 개념의 주기적인 Table Reorganization을 적용하기로 의사결정을 한다. 그리하여, 가장 조회가 빈번한 테이블들에 대하여 우선적으로 적용한 결과 기존대비 평균 10배 이상의 획기적인 성능 개선의 효과를 보게 된다. Table Reorganization은 정보 시스템의 매월 정비 주기에 맞춰 테이블별 3개월 주기로 수행하는 것이 가장 타당한 것으로 최종 결정하고 성능 개선 작업을 마무리하게 된다.

또 다른 예를 들어 보자.
아래 2개의 Box에서 좌측은 인덱스 최적화 전략을 수립할 때 누구나 인지하고 있는 결합인덱스 컬럼 순서 정의에 대한 보편 타당한 대원칙이다. 하지만 상황에 따라서는 좌측의 결합인덱스 컬럼 순서 원칙은 우측과 같이 변경될 수 있다.
혹자는 무슨 말도 안 되는 이야기냐고 충분히 의구심을 제기할 수 있다. 이런 의구심에 대하여 필자 또한 충분히 공감한다. 하지만 아무런 근거 없이 필자가 이야기하겠는가? 자 그럼 먼저 좌측에서 제시하는 “어느 것이 더 좋은 분포도를 가지는가?”라는 정의에 대한 본질을 파악해보자.
 
 

 p24-1.jpg

 


결합인덱스는 적어도 2개 이상의 컬럼으로 구성되는데, 일반적으로 아시다시피 선행 컬럼의 조건이 ‘=”이 아닌 구간조건(between, like, >, <)일 경우 후행 컬럼은 조건을 분기하기 위한 인덱싱 역할을 수행하지 못 하고 단지 체크 역할만 수행하게 된다. 그러므로 모든 조건절이 ‘=”만 존재할 수 없으므로 행여나 구간조건이 존재할 경우 후행 컬럼의 인덱싱 역할 불가로 인한 체크 역할의 범위를 줄이기 위해서 가능하면 분포도가 좋은 컬럼을 우선적으로 배치하는 것이다. 이것이 분포도가 좋은 컬럼이 결합인덱스의 컬럼 순서에서 우선시되는 이유이다.

하지만 모든 조건절이 항상 ‘=”로만 사용되는 특정 상황에서는 우측에서 제시하는 분포도가 나쁜 컬럼을 우선적으로 배치하는 것이 획기적인 성능 개선을 유도할 수 있다.
해당 원리는 아래 그림을 보면 명확하게 이해가 될 것이다.
 
 
p-pyo.jpg
 

최종 결과가 5건이 추출되는 모든 조건절이 ‘=’만 존재하는 SQL에서 COL1+COL2로 구성된 INDEX1보다 COL2+COL1으로 구성된 INDEX2를 이용할 경우 성능상 더 유리하다. INDEX2의 경우 분포도가 나쁜 COL2 기준으로 인덱스의 구성 값이 집적되어 논리적인 일량은 동일하지만 최종적인 Physical I/O 일량은 상이해진다. 그래서 항상 “=“로 사용되면서 Nested Loop Join의 Inner Table에 대한 Random Access 부하가 절대적으로 많은 경우 Data Clustering 극대화를 유도하기 위하여 분포도가 넓은 컬럼을 결합인덱스의 컬럼 순서에서 우선 배치하는 것이 성능상 절대적으로 유리해진다. 물론 여건이 가능하다면 COL2 기준으로 테이블의 데이터도 집적이 될 경우에는 Table에 대한 random access 부하까지도 획기적인 개선이 가능할 것이며, 이는 Cluster Index와 유사한 개념으로 귀결된다.

여기서 필자가 반드시 강조하고 싶은 것은 좌측이 결합인덱스의 구성 순서에 대한 보편 타당한 기준 원칙이므로 인덱스 전략을 수립할 때 기준 원칙이 가장 최우선시 되어야 한다는 것이다. 하지만 기본 원칙의 본질에서 벗어나는 예외적인 상황에서 발생하는 수많은 시행착오를 줄이기 위하여 우측처럼 기준 원칙의 본질을 정확히 파악한 후 보편타당성의 원칙을 확장하라는 것이다. 이는 그냥 되는 것이 아니며 기본에 충실하고 본질을 정확히 파악할 때 상황에 따른 보편타당성을 정립하고 확장할 수 있는 것이다. 데이터 모델의 경우에는 글로벌 참조 데이터 모델을 기반으로 보편타당성을 확립하고 이를 더 확장하면 될 것이다. 아무튼 데이터 모델링, 데이터 이행, 데이터 관리 등에 대한 보편타당성의 사례를 더 들고 싶으나 일반적인 이해를 도모하고자 성능개선 위주로만 사례를 들고 지면상 보편타당성에 대한 이야기는 이만 마치고자 한다.

원래 필자가 쓰고자 했던 기고의 제목은 '프로페셔널이 되기 위한 요건'이며 아래와 같은 목차를 준비했었다.

1. 보편타당성을 정립하고 확장하라!
2. 나무만 보지 말고 숲도 같이(때로는 숲을 먼저) 보는 습관을 길러라!
3. 지피지기 백전불태 (知彼知己 百戰不殆)
4. 경험은 최고의 산지식이다.
5. 역지사지(易地思之)의 관점으로 소통하라!
6. 아낌없이 비워라! 그럼 채워질 것이다.
 
글을 쓰다 보니 이미 애초 할당된 지면의 2배에 다다라 이야기하고자 하는 내용을 다 표현하지 못해서 아쉽지만 간략히 아래 이야기만 하고 마무리하고자 한다.

선도적인 개척자가 정립한 개념의 본질을 제대로 파악하지 못하고 그대로 모방하여 따라 하는 것을 우리는 흔히 '앵무새'라고 비꼬곤 한다. 필자는 후배들에게 “앵무새는 결코 전문가가 될 수 없다. 앵무새가 되지 말라!”고 자주 이야기하곤 한다. 세상에 절대 진리는 없다고 생각한다. 시대의 가치관이나 상황 논리에 따른 모범 답안이 있을 뿐이며, 모든 상황을 관통하는 모범 답안은 존재하지 않는다. 동시대의 모범 답안에 대한 본질을 깨닫고 허와 실을 명확하게 파악하여 본인만의 새로운 모범 답안을 탄생시킬 수 있으면 전문가의 궤도에 들어섰다고 감히 이야기 할 수 있을 것이다.

작금의 시대는 데이터 분야의 패러다임 전환기이다. 지금까지 데이터 분야는 생산자 관점의 데이터 프로마스터가 주류라면, 이제는 Big Data라는 미명 아래 소비자 관점의 데이터 프로슈머로 무게 중심이 이동하고 있다. 그래서 필자도 늦은 감은 있지만 데이터를 바라보는 기준점을 조금씩 Shift하고자 통계학에 대하여 아주 기초적이고 기본적인 것부터 공부하려 한다. 기본이란 쉬워서 기본이 아니고 가장 중요하기 때문에 기본이라고 하지 않는가? 필자의 관심은 통계학 자체가 아닌 통계적 사고 방법이므로, 이를 위해서는 통계의 기본을 이해해야만 통계적 사고 방법의 본질을 파악할 수 있다고 생각한다.

상기 목차를 항상 명심하고 실천한다면 언젠가는 본인이 하고자 하는 영역에서 최고가 될 것이라 믿어 의심치 않는다. 열정이라는 초심(初心)을 잊지 않는다면!!!

Tag :

Leave Comments