DATOR


만능 테이블 (User Define Table) #1 도입 데이터모델


테이블이란 무엇인가 ?

 

10여년을   SELECT * FROM  , UPDATE,  DELETE 등의 SQL을 날리면서 사용하여 왔으며 지금은 여러 고객사에서

개발자, 설계자들과 함께 테이블을 설계하고 있으면서도 문득 테이블은 뭐지 ? 라는 질문을 던져 보곤 한다.

 

뭐 거창하게 데이터 모델에서 정의하는 멋진 문구가 생각나지 않아도 된다.  지금 당장 나의 머리속에 떠오르는 것은 ~

데이터를 저장하는 공간  !.

그럼 왜 저장하고 있는 것일까 ?  저장이라는 행위가 나중에 써 먹기 위해서 특정한 곳에 모아서 간수하느 것이다.

 

그럼 나중에 써먹기 위해서 아무렇게나 저장해 놓으면 될까요 ?

데이터를 잘 저장하는 방법을 아는 사람은 일상생활에서도 자신의 물건이나 정보를 일목요연하게 정리할 줄 아는 정리맨이어야 할 것 같은데...

책장에 꽃혀진 예전에 읽었던 책을 찾거나  여러 서랍속에 보관해 놓은 손톱깍이를 찾을때에도 한참을 헤메이고,  직원연락처를 어느 폴더에 저장하였는지 몰라서 컴퓨터를 헤매곤 한다.

 

아뭏든 테이블은 데이터를 저장하는 공간 ~

 

그럼 데이터를 어떤 방식으로 저장하는 것이 최상일까 ?  데이터를 저장하는 장치인 DB를 우선 기본적으로 잘 알아야 할것이고,  요즘 대부분의 설계 방식인 "관계형 데이터 모델링" 기법을 알아야 한다.

 

  • 데이터 모델링 관련책을 독파하고 나면 우리는 모든 종류의 데이터를 저장할 수 있도록 제대로된 테이블을 설계 할 수 있을까 ?

  • 데이터의 종류와 업무에 따라 최적의 구조가 있을 터인데, 이런 데이터를 제한된 시간내에,  제한된  테이블 갯수로 구현 가능 할까 ?

  • 특정 비즈니스 솔루션을 위한 테이블을 설계하고 프로그램을 개발하였느데,  이것을 가지고 국내  혹은 전세계의 모든 업체에서 사용할 수 있을까 ?

  • 1개의 솔루션에서 모든 업체를 만족시키기 위해서  1,000개, 10,000개 혹은 그 이상의  테이블이면 가능할까 ?

 

솔루션 패키지를 도입하고 나면 커스터마이징 된 테이블이 우후 죽순처럼 생겨나게 되고,  시스템을 운영하다 보면  테이블의 추가, 변경, 삭제가 발생하는 것은 자연스런 현상이라고 본다.

세상 만물이 태어나면 사용되어지고 변화되기 마련이다.

 

데이터 모델링시  특정한 요건하에서는 "유연성" 측면이 강조되는 상황이 있다.

데이터를 저장하는 테이블의 구조는 영원히 변하지 않게 만들고,  그 안에 저장하려는  컨텐츠인  데이터를 조정하거나,  프로그램 소스를 조금 수정하여 시스템을 구현하려고 하는 경우가 있다.

 

이런 것이 말처럼 쉽게 가능한 것인가 ?

 

한번 테이블을 만들면 어떠한 데이터가 입력되어도 모든 것을 수용할 수 있도록 데이터 모델을 설계 할 수 있을까 ?

 

정답은  . . .

 

설계 할 수도 있다. 

 

만능형 테이블을 .

 

만능형 테이블은  RDBMS 모델링론에는 나오지 않는 방식이다.

데이터를 저장하고 추출하는 것에만 집중하는 테이블 이다.

DBMS에서 데이터 정합성을 보장하기 어려울 수가 있다.

적절한 인덱스 설계가 애매해 져서 성능이 안 좋을 수도 있다.

일반적인 데이터 모델 설계 방식을 탈피한 방식이고  심지어 ERD로 표현할 수 없을지도 모르겠다.

만능기록.XLS  파일 처럼 1개의 엑셀에다  탭과 셀들을 이용하여 몇 천가지 정보를 복합적으로 구성한 파일 형태와도 유사하다.

가로 * 세로로 된 모든 데이터를 저장 할 수 있다.

데이터 표준 (도메인, 데이터타입, 길이, 용어..) 은 기대 하지 말아야 한다.

자연의 법칙을 벗어나서 변하지 않는 구조를 만드는 대신 그에 상응하는 댓가는 각오해 두어야 한다.

 

아마도

개발 경험이 어느 정도 있거나

시스템 운영을 담당하고 있거나

DBA이거나

SI 프로젝트를 몇 년 해온 이들은 누구나 한번 쯤은 보았을 테이블이다.

 

시스템이 복잡한곳,  대량의 테이블이 있는곳, 솔루션을 사용하는 곳 등에서 볼 수 있다.

 만능형 테이블에 관련된 용어도 참 여러 가지이다.

 

- 사용자 정의 테이블 : User Define Table

- 사용자 목적 테이블 : User Purpose Table

- 사용자 속성 테이블 : User Attribute Table

- 예약컬럼, 예약속성, 예약필드1, 예약필드2, 예약필드3 , 예약필드4, 예약필드5 . . .

- KEY1, KEY2, KEY3 ,KEY4 . . .

- 문자값1, 문자값2, 문자값3 . . . 숫자값1, 숫자값2, 숫자값3 . . .

- 기타1, 기타2, 기타3. 기타4 . . .

- 테이블 메타 , 속성 메타

 

그렇다.

 

만능 테이블은 자신이 누군인지 드러내지 않는다.  

자신은 공간 만 제공해 줄 터이니 너희가 잘 알아서 쓰라고 한다.

 

처음 만능 테이블을 접하였을 때에는 뭐 ! 이딴게 다 있어 ? 하고는 쌩 무시 해 버렸다. 

세월에 흐르고 내공이 쌓이면서 메타를 알게 되고,  변하지 말아야 하는 테이블의 심정을 이해 하면서

어느새  만능 테이블 몇개를 곳곳에 설치해 두는  나를 발견하게 되었다.

 만능 테이블의 본질을 알고 시기 적절하게 사용하면 독이 아닌 약이 될 수도 있을 것이다.

 

[  만능 데이터 테이블 ]

 

# 테이블구분코드 (PK)

# KEY1 (PK)

# KEY2 (PK)

# KEY3 (PK)

컬럼값1

컬럼값2

컬럼값3

컬럼값4

컬럼값5

컬럼값6

컬럼값7

컬럼값8

컬럼값9

컬럼값10

 

 

 

 

* 테이블의 PK >  테이블구분코드 + KEY1 + KEY2 + KEY3

   테이블 구분은 여러 데이터를 구분하고 분별할 수 있는 일종의 서브타입 역할을 한다.

   테이블의 PK는 PK3개 까지 구성할 수 있다.  KEY1만 사용한다면 KEY2, KEY3에는 디폴트 값으로 '*'를 세팅해 주면 된다.

 

* 일반 속성은       > 컬럼값1, 컬럼값2 ~ 컬럼값10

   테이블 구분에 따라 귀속되는 속성은 제각각 다르다.  컬럼값1에 1개의 의미만이 아니라 여러 의미가 사용될 수 있다.  컬럼값1은 "등록일시,  상품구분코드,  프린트횟수, 알람여부, 이메일 수신여부, 고객등급코드 . . . " 등   데이터타입, 데이터 길이에 상관없이 사용 될 수 있기 때문에 보통 varchar2(500) 같은 형태로 지정되곤 한다.

 

패키지 솔루션을 보면 위와 같은 테이블들을 의외로 쉽게 접할 수 있다.  어느 사이트에서는 여행 관련 컨텐츠를 관리하는 목적으로 사용되고 있었으며, 또 다른 사이트에서는  핵심 테이블들의 다양한 업무규칙, 업무조건, 마스터 테이블들간의 관계(교차) 테이블로서 다양한 역할을 수행하고 있었다.  비록 1개의 테이블이지만 "테이블구분코드"에는 서로 상이한 데이터가 무려 500여개나 정의되어 사용하고 있다.  아마도 너무마 많은 패턴의 데이터를 위해 매번 테이블을 생성할 수 없기 때문에 이것저것 다 정의할 수 있는 잡동사니형태의 테이블이 필요하였기 때문이리라.

 

1개 테이블이라고 우습게 보았다간 큰 코 다친다.  이 테이블을 알아야 프로그램에서 하드코딩되어  움직이고 있는 데이터의 비밀과 비즈니스의 규칙을 알 수가 있는 것이다.  이 테이블 1개만 있으면  프로그램 개발자들은 DBA에게  테이블을 만들어 달라고 애원하지 않아도 된다.   내가 정의하고 사용하면 되는 것이다.  

 

처음 이런 테이블를 사용할 때에는 아주 만능인것 처럼 익숙하고 친숙해 지지만 시간이 흐르고,  테이블 관리자가 변경되고, 여러 개발자의 손을 거치다 보면 처음 의도한 것과는 다르게 사용되는 것을 목격할 수 있다.

 

최초의 데이터 정의 규칙은 다음과 같이 설정 할 것이다.

- 데이터 모델에서 사용하는 주요 테이블,  트랜잭션 데이터는 정의하지 말자

- 공통코드나 데이터가 적은 소형의 테이블에만 적용하자.

- 테이블을 사용하기 위해서는 어떤 용도로 사요하기 위함인지 설명을 달아 놓도록 하자.

- 테이블을 사용하기 위해서는 oo과장에게 반드시 데이터 세팅 요청을 하도록 하자.

- 주요 비즈니스 데이터, 성능이 중요한 데이터, 정합성이 반드시 지켜져야 하는 것들은 가급적 이곳에 정의하지 않는다.

 

아뭏든 시간이 지나고 나면 이 테이블 안에 있는 데이터가 무엇을 의미하는 것인지 아무도 모르게 되는 상황이 도래 할 수 있다.  아무도 모르지만 시스템은 잘도 돌아간다.  처음엔 무엇에 쓰는 것인지 알고 있었지만  나중에는 프로그램 소스를 까 봐야지만  알 수가 있을 것이다.

 

그나마 프로그램 소스에 여기저기 녹아 있는 하드 코딩된 업무규칙을  데이터화하여 관리하고자 했던 노력은 칭찬을 받을 만 한 것이라 할 수 있겠다.

 

만능형 테이블은 이 컬럼이 무슨 용도로 사용되는 것이지를 설명해 주는 메타형 정의 테이블이 반드시 필요하다.

 

"메타정의  - 테이블정의"  패턴이 하나의 쌍으로 이루어져 있다.

 

[  메타 정의 테이블 ]

 

> 다음에는 실전에서 발생하는 만능형태의 테이블에 대한 사례를 살펴보도록 합니다.

 

 

# 테이블구분코드 (PK)

# KEY1 (PK)

# KEY2 (PK)

# KEY3 (PK)

컬럼값1

컬럼값2

컬럼값3

컬럼값4

컬럼값5

컬럼값6

컬럼값7

컬럼값8

컬럼값9

컬럼값10

* 따뜻한 데이터 세상 만들기 - FROM 핫신 *
Tag :

Leave Comments