행동하고 사고하는 과정에 일정한 패턴이 생겨 그것을 추상화할 수 있다. 여러 행동의 객체를 제거하면 비슷한 것들의 추상화 단계를 통합하여 그룹지을 수 있을 것이며, 논리적 추론에서도 사고의 각 질료들을 배제한 논리전개의 추상화된 구조만을 건질 수 있다면 또한 여러 추론을 그룹지을 수 있다.


이런 추상화단계를 통한 그룹짓기는 궁극적으로 재사용을 하기 위함이다. 재사용은 그 자체만으로도 똑같은 일을 할 수도 있지만, 더 큰 단계의 부분으로 참여시킬 수 있는 일종의 정지(prune)작업인 것이다.


여기까지는 흔히 생각할 수 있는 추상화의 정리라 볼 수 있으나, 중요한 사실은 추상화된 행동이나 사고 그 자체는 실상 존재하지 않는 것이다. 구체적인 무언가로의 적용이 있기 전까지는 그 추상단계란 보이지 않는 것 혹은 존재하지 않는 것이다. 혹은 추상단계가 실상이며 구체적인 것은 허상이라고 말할 수 있을지도 모르겠다만, 난 연역적인 세상을 생각하는 것이 아니며, 미지의 세상에 태어나 알아가는 존재이므로 이런 입장은 취하고 싶지 않다. 추상의 단계는 구상의 존재를 인식하기 위한 하나의 장치에 불과하다. 아니 구상의 단계 조차 다른 어떤 것들의 추상이라고 말한다면 할 말은 없지만, 오감으로 인식이 되는 단위로서의 개별 존재들을 말하는 것에 집중한다.


데이터 모델링 및 핸들링을 하는데 궁극적으로는 DB를 통한 파일로 존재한다. 즉, 이름, 나이, 캐릭터, 썸네일주소, 보유한 코인수 이런 구체적인 것들(이 정도선은 인식 가능한 상태이므로 내 논의 안에 들어 있는 구상체이다)이 실제 존재하는 곳은 DB가 관리하는 파일 속 어디인가라는 뜻이다.


DB라는 제품은 많다. 내가 만든 데이터 모델 (이름, 나이...)을 어떤 DB에 저장할지 선택하기 전까지는 DB는 일종의 추상층이 된다. 그러나 MySQL이라는 제품을 사용하겠다고 결정하는 순간 MySQL이 접근하는 방식으로 행동과 사고방식이 결정된다.


MySQL은 다른 DB제품들과 비슷한 방식으로 동작하지 완전 다른 방식으로 동작하는 것이 아니다. 이때 유혹이 생긴다. 행동을 추상화하여 어떤 DB를 사용해도 내 데이터 모델을 핸들링하게 만들것인가, 아니면 MySQL에서만 사용가능하도록 추상단계를 제거할 것인가. 이 유혹은 "허세"로 다가오기도 하고, "관리상 편의"로 다가오기도 하며, "개발 속도"라는 이름으로 다가오기도 한다. 그 중간단계 어디쯤에서인가 대개 멈추게 되고 그것은 추상화라는 괴물과 싸운 흔적들로 읽혀질 수 있다. 아! 수많은 SQL문의 산재함이여~! 내 너의 모듈화와 관련된 고민을 듣노라!



저작자 표시 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Coolen