본문 바로가기

데이터 Story/모델링 매뉴얼

내부 코드 통합 엔터티

내부에서 생성하는 일반 코드는 코드별 개별 코드 엔터티로 설계하지 않고 하나의 통합 코드 엔터티를 설계해서 통합 관리한다.

 

예를 들어 관리하려는 데이터가 개인, 법인 등의 고객 유형을 나타내면 이는 코드 성격의 데이터다. 이 코드 인스턴스를 관리하기 위해 엔터티를 설계할 때, 고객유형만을 관리하는 엔터티를 설계하는 것이 아니라 [그림1] 모델처럼 다른 유형의 코드까지 관리하는 엔터티를 설계해서 모든 내부 코드를 통합 관리하도록 한다.

 



[그림1]

 

코드 성격의 데이터는 해당하는 인스턴스를 별도의 시스템에서 관리하는 게 일반적이다. 코드를 통합 관리하는 시스템에서 코드 인스턴스를 등록하고, 등록된 코드 인스턴스를 업무 시스템에서 사용하는데, 업무 시스템에서 사용할 엔터티가 [그림1] 모델과 같다.

 

코드유형 엔터티에서는 코드 유형이 무엇인지를 관리하고 코드 엔터티에서는 해당 유형에 포함된 코드 인스턴스가 무엇인지를 관리한다. 이에 대한 릴레이션은 아래와 같다.

 

[통합코드유형]

#통합코드유형번호

통합코드유형명

001

고객유형코드

 

[통합코드]

#통합코드유형번호

#통합코드번호

통합코드명

001

01

개인

001

02

법인

 

[그림2]

 

만약 내부에서 관리하는 코드를 통합 관리하지 않고 [그림3] 고객유형 엔터티와 같이 각 코드를 관리하기 위한 엔터티를 개별적으로 설계한다면 많은 코드 엔터티가 생기게 된다.

 


[그림3]

 

엔터티가 많아지는 것은 단점이 될 수 있어서 주의해야 한다. 코드 엔터티가 많아지면 많은 관계로 인해 모델 가독성이 나빠진다. 고객 엔터티 같은 주요 엔터티는 코드 속성이 매우 많을 수 있는데, 고객 엔터티가 많은 코드 엔터티에 둘러쌓이면서 관계선을 표현하면 모델은 상당히 복잡해질 수 있다.

 

또한 코드 데이터만을 관리하는 시스템이 있다면 많은 코드 엔터티와 연동해서 값을 관리하기가 쉽지 않다. 통합 코드 엔터티를 관리하는 것에 비하면 매우 비효율적이다.

 

개별 코드 엔터티로 설계하면 저장 공간 낭비 측면에서 비효율이 발생한다. 한 종류의 코드 인스턴스는 몇 개 안 되므로 한 블록에 저장하면 많은 공간이 쓰이지 않고 낭비되는데, 이는 데이터를 조회할 때 많은 블록이 사용된다는 것을 의미하므로 비효율이 발생된다.

 

만약 모든 내부 코드 데이터를 하나의 통합 엔터티에서 관리하면 한 블록에 많은 종류의 코드 데이터를 저장할 수 있다. 그리고 이 블록이 메모리에 한 번 상주하면 디스크 I/O 없이 메모리 I/O가 발생해 블록이 다시 사용될 가능성이 커진다. 메모리 적중률(Hit Ratio)이 높아져 성능이 좋아진다.