본문 바로가기

데이터 Story/모델링 이론

이력 엔터티를 설계하는 10가지 방법 – 첫 번째 이력 엔터티를 설계하는 첫 번째 방법은 하나의 엔터티에서 과거와 현재(미래)의 데이터를 함께 관리하는 것입니다. [그림1] 수수료율 엔터티에는 계좌의 종류에 따라, 어떤 방법으로 거래했는지에 따라 달라지는 수수료율을 관리합니다. 이 엔터티는 현재의 수수료율뿐만 아니라 과거의 수수료율도 함께 관리합니다. [그림1] 이 경우 변경 일자를 관리하게 되는데요. [그림1]과 같이 변경일자 속성이든 입력일자•시작일자 속성이든요. 이력 엔터티 시리즈 글에서는 편의상 변경일자 속성을 일괄적으로 사용하겠습니다. 사실 변경일자 속성이 적절한지는 아직도 고민 중입니다. 현재 인스턴스에 대해서는 입력 일자가 과거 인스턴스에 대해서는 변경 일자가 명확한데, 합치게 되니 어떤 게 더욱 적절할지 고민입니다. 이 고민은 엔터티를 이.. 더보기
이력 엔터티를 설계하는 10가지 방법 – 서론 이력 데이터에 대한 글을 계속 올리고 있는데요. 개요적인 내용은 소개했으니 다른 주제(식별자)로 넘어갈까를 좀 고민했습니다. 느끼신 분들이 있겠지만 엔터티나 관계 등과 같이요. 개인적으로 제가 책을 쓰면서 다른 책과 차별되도록 구성한 장이 정규화와 통합, 이력, 방법론 입니다. 얼마 전에 메일을 한통 받았는데 거의 정확하게 맞추신 분이 있습니다. 각 장의 특징을 조만간 올릴 생각입니다. 군더더기라 생각해서 책에는 생략을 했는데요. 이력 데이터 관리가 전략적인 장이라서 당분간 이력 엔터티 위주로 글을 올리겠습니다. 오늘은 이력 데이터를 관리할 수 있는 10가지 방법의 개략에 대해 쓰려고 합니다. 이 10가지 방법은 실무에서 자주 사용하는 방법을 제 나름대로 구분한 것인데요. 사실 내역 데이터 설계 방법까지.. 더보기
이력 엔터티 확정 절차 [그림1]은 이력 엔터티 확정 절차입니다. [그림1] 가장 먼저 해야 할 일은 이력 데이터를 관리해야 하는지를 분석하는 것입니다. 이력(지나간 과거) 데이터를 사용하는 업무가 없다면 이력 데이터 관리 요건은 없는 것입니다. 그냥 기존 데이터를 최신 데이터로 업데이트하면 끝입니다. 속 편하게 그냥 업데이트하고 싶지만 업무가 그렇게 간단하지 않습니다. 변경된 과거 데이터를 관리해야 하는지에 대해서는 현업의 의견이 가장 중요한 기준이 됩니다. 동종 업체의 업무를 참조할 수도 있고요. 현업의 판단이 이력 데이터는 필요 없다는 것이라도 모델러가 판단하기에 필요하다고 생각되면 이력 엔터티를 채택할 수도 있습니다. 당장에는 사용하지 않지만 이력 데이터를 쌓아 두면, 업데이트해서 이전 데이터를 없애는 대신 저장해서 새.. 더보기
이력 엔터티 판단 시점 2 이전 글에서 개념•논리•물리 모델링 단계의 구분 없이 엔터티를 정의하는 시점에 이력 데이터 관리도 같이 정의하는 것이 효율적이라 설명드렸는데요. 하지만 논리 모델링이 끝난 시점에 이력 관리를 한꺼번에 적용하는 것도 또 다른 방법입니다. 실무에서 자주 사용되는 편입니다. 이 방법의 장점은 본질 데이터를 먼저 완전하게 도출한 이후에 이력 데이터를 고려하므로 본질에 집중할 수 있다는 점입니다. 분리가 가져다주는 단순함은 또 다른 장점이고요. 초보 모델러에게 절차는 좋은 가이드가 되기도 합니다. 단점은 이전 글에서 설명했듯이 모델링 후반에 모델 구조가 변경될 수 있다는 점입니다. 또한 어떤 업무는 이력 엔터티를 설계하지 않고는 전체 모델에 대한 방향조차 잡기 힘들 수가 있습니다. 또 한가지 중요하게 고려할 점은.. 더보기
이력 엔터티 판단 시점 언제 이력 엔터티를 도출하는 것이 좋을까요? 개념 모델링 단계에서 시작해야 한다는 것이 제 생각입니다. 물론 핵심적이지 않은 엔터티는 논리 모델링 단계에 도출해도 됩니다. 본질 데이터를 먼저 확고히 해야 한다는 점만 주의하면, 개념 모델링 단계에서 이력 엔터티를 고려하는 것이 좋습니다. 실무에서는 일반적으로 이력 엔터티를 물리 모델링 단계에서 고려하는데요. 이력 데이터가 본질 데이터가 아니라서 뒷 단계에서 별도로 고려합니다. 하지만 이력 데이터 관리 방법에 따라 모델 구조가 바뀔 수 있어 후반에 별도의 타스크에서 고려하는 것은 바람직하지 않습니다. 핵심 엔터티의 구조가 후반에 바뀔수록 영향은 심각해집니다. 주요 엔터티는 본질이 정의되는 시점에 이력 데이터 관리 방안을 같이 논의하는 것이 현실적으로 효율적.. 더보기
어떤 데이터를 이력 데이터로 관리해야 하는가? 이력 데이터의 가장 커다란 특징은 변하는 데이터라는 것입니다. 따라서 이력 데이터를 관리하는 가장 중요한 기준은 어떤 데이터가 시간의 흐름에 따라 변할 수 있는지가 기본적인 기준이 됩니다. 시간이 흘러도 데이터가 변할 수 없다면 이력 관리 대상이 아닙니다. 그리고 특정 데이터의 과거 상태를 추적할 필요가 있으면 이력 데이터를 관리해야 하는 대상이 됩니다. 데이터가 변경됐지만 변경되기 전에 어떤 데이터였는지 관심이 없다면, 알아야 아무 도움이 되지 않는 데이터라면 이력 관리 대상이 아닙니다. 해당 데이터에 대해서 업데이트만 하면 되니까요. 물론 데이터의 과거 상태를 추적할 요건이 없더라도 시간이 흐름에 따라 데이터가 변할 수 있다면 이력을 관리할 수 있는 모델을 우선으로 고려하는 것이 좋습니다. 현업의 요.. 더보기
선분 이력의 종료일자 이번 글에서는 종료일자에 대해 쓰려고 합니다. 선분 이력은 다 아실 것입니다. 자세한 내용은 제 책 등을 참고해 보시고요. 간단히 설명하면 선분 이력은 과거 특정 시점의 데이터를 조회하는 요건이 많을 때 채택하는 조회 성능을 고려한 방법입니다. 즉 성능 문제가 없다면 선분 이력을 채택하지 않아도 됩니다. 제 책에서 선분 이력을 설명한 목적이 두 가지가 있었습니다. 하나는 성능 이슈가 존재할 때 선분 이력을 정확하게 사용할 수 있도록 하는 것이고, 또 하나는 선분 이력의 남용을 방지하기 위해서입니다. 그런데 첫 번째 목적인 성능 문제에 대한 이슈가 최근에 있었는데요. 저 또한 Between 조회가 성능상 유리하다고 생각해 그렇게 썼는데요. Between 조회가 아니더라도 성능상 큰 문제가 없다고 주장한 블.. 더보기
이력 데이터와 내역 데이터 2 그럼 [그림5] 환율 엔터티는 내역 엔터티일까요? 이력 데이터일까요? 환율은 기준 통화에 대한 상대 통화의 교환 비율인데요. 기본적으로 매일 관리하기 때문에 기준일자를 관리합니다. 원화에 대한 달러의 2월 15일 환율 데이터가 생성되고, 16일 환율도 생성되는 등 주 식별자에 따라 데이터가 생성되니 내역 데이터입니다. 환율을 관리하는 원천 엔터티이니 발생 내역 엔터티입니다. 환율 같은 엔터티를 이력 엔터티로 생각하는 경우가 많습니다. [그림5] 이미 존재하는 15일 환율이 바뀌고, 바뀌기 전 데이터를 관리해야 한다면 [그림6]과 같이 이력 엔터티가 있어야 됩니다. [그림6] 그리고 또 많이 혼돈하는 엔터티가 학력이나 회사경력 같은 엔터티입니다. [그림7]과 같은 고객의 학력을 관리하는 엔터티는 주 식별자.. 더보기
이력 데이터와 내역 데이터 1 지난 글에서 이력 데이터의 성격에 대해 간략하게 설명드렸습니다. 다시 정리하면 변경되는 데이터가 이력 데이터이고요. 쌓이는 데이터는 내역 데이터입니다. 그리고 원천(본질) 데이터인지를 구별하는 것이 중요합니다. 원천 엔터티를 도출하고 이력엔터티를 분석해야 하고요. 발생 내역인 원천 데이터가 변경되면, 변경 전의 데이터를 관리해야 이력 데이터 관리라고 합니다. 저는 ‘변경이력’과 ‘발생내역’이라는 용어로 구분합니다. 지난 번에 언급했듯이 이력이라는 용어는 상당히 애매합니다. 과거 데이터라는 포괄적인 의미를 지니고 있습니다. 영어로 표현하면 Time-Dependent Data, Historical Data 정도가 되는데요… 하지만 데이터 모델에서 말하는 이력은 단순히 쌓여있는 과거의 데이터가 아니라 변경된 .. 더보기
이력 데이터에 대한 주절거림 모델링 분야에서 ‘이력’만큼 혼란스러운 용어는 없을 거 같습니다(저만 그런지는 모르겠습니다만). 책을 쓰면서도 가장 고민했던 장이고 ‘이력’이란 용어를 사용하지 않으려 시도해 봤지만 달리 방법이 없었습니다. 어쨌든 이력이라는 용어는 사용했지만 강조하려 했던 것이 우선 이력 데이터입니다. 무엇을 이력 데이터라고 하는지를 설명하려 애를 먹었습니다. 아직도 스스로 만족하지 못하는 부분은 있지만요. 언젠가 저를 잘 아는 어떤 모델러가 아직 연구할 부분이 있냐고 물었을 때 이력 데이터라고 주저없이 답변했습니다. 이력 데이터에 대한 내용은 외국 서적에도 그다지 없는 거 같습니다. 우리만의 고민은 아닐 거 같은데 원서에서 생각보다 많이 찾지 못했습니다. 저는 이력 데이터는 지나간 데이터(Bygone Data)라고 생.. 더보기