프로젝트 성패를 결정짓는 데이터 모델링 이야기 후기
프로젝트 성패를 결정짓는 데이터 모델링 이야기 후기
https://product.kyobobook.co.kr/detail/S000001057639
배경
최근에 회사에서 신규 서비스를 개발하면서, 설계를 한 적이 있습니다. CRM 이나, 구글폼처럼 사용자가 동적으로 데이터를 조립하고 관리할 수 있는 서비스였기에 설계 과정에서 치밀한 고민이 필요했습니다.
특히, 데이터 모델링에 공을 많이 들였는데 저 스스로가 데이터 모델링에 대해서 모르는 부분이 많다고 느껴졌습니다. 저는 지금까지 모델링 관련해서는 ‘데이터베이스 설계 및 구축’ 이라는 책을 읽어본 것이 전부입니다. 따라서 모델링 관련한 내용을 추가적으로 공부해야한다는 생각이 들었고, 이 책을 읽게 됐습니다.
책을 선택한 이유
교보문고에, 데이터 모델링 키워드로 책들을 검색하고, 후기를 쭉 살펴봤습니다. 좋은 책들도 많았지만 이 책의 경우에는 리뷰가 많고, 호평이라는 점에서 읽어볼 만하다고 생각했습니다.
기억에 남는 부분
1. 엔티티 모델링이 어려운 이유는 경험재가 아니기 때문이다
지금까지의 경험상, 제가 지금 그린 모델링이 잘 작동하는지, 문제는 없는지, 향후 변화에 유연한지를 즉시 확인해볼 수 없습니다. 모델은 아키텍쳐의 기저에 존재하기에, 정량적으로 평가하고 검증하기가 어렵습니다.
뿐만 아니라, 업무 요건을 정확히 이해하는 것은 어려운 일입니다. 지금까지 수 많은 프로젝트를 해본 결과, 문제 영역을 정확히 요구 명세로 반영할 수도 없을 뿐더러, 만들어놨더니 해당 요구 명세가 바뀌기도 하는 경우를 몇 번이나 경험했습니다. 사람은 시각에 많은 부분을 의존하기에, 어떤 문제를 해결하기 위한 제품을 직접 눈으로 볼 때, 더 많은 요건과 요구사항이 생각나는 것은 어쩔 수 없는 것 같습니다.
이처럼, 문제 영역을 정확히 정의하는 것이 어렵기에, 처음부터 완벽한 모델링을 하기에는 불가능합니다. 설사 문제 영역에 정확히 대응할 수 있는 모델링을 했더라도 해당 모델링이 앞으로의 문제에도 유연하게 대응할 수 있고 잘 작동하는지 보증할 수 없습니다.
이런 복잡도를 줄이기 위해서는 추상화를 사용해야 합니다. 문제를 분류하고, 정규화함으로서 업무 도메인의 코어 모델을 발견해야 합니다. 이를 마스터 데이터라고 하는데, 모델링의 출발점이 될 최상위 엔터티입니다.
2. 세상의 모든 모델은, 세상의 모든 것과, 세상의 모든 것 사이의 관계로 나타낼 수 있다
결국 모델링은 극도로 추상화한다면 세상의 모든 것에 관한 엔터티와, 그 모든 것의 관계를 나타내는 엔터티인 단 2개의 엔터티로 모든 것을 표현할 수 있습니다. 이 말로 하고 싶은 바는, 모델에는 어떤 데이터를 담을지와 어떤 다른 모델과 연관관곌르 맺을지를 고려해야한다는 것입니다.
종종 어떤 데이터만 담을지를 신경쓰고 관계에 대해서는 깊은 고려를 하지 않는 경우를 많이 봤습니다. 당장 저 조차도, 엔터티 간의 관계에 대해서는, 깊은 고려를 하지 않고 모델링을 했습니다. 정규화와 데이터 엑세스 패턴을 중심으로 효율을 따지며 관계를 맺도록 했습니다. 특히, 요즘에는 JPA 를 많이 사용하는데 JPA 를 사용하다보면 개발상의 용이함으로 양방향 연관관계를 사용하는 경우가 많습니다.
그러나, 좋은 모델링은 그 자체로 명확하게 설명이 되어야 하며, 모델간의 지나친 관계는 모델링의 복잡도를 올려서 중요한 정보를 흐리게 만듭니다. 우리는 모델을 그릴 때, 관계가 없음을 가정하여 그 관계가 꼭 필요한 것인지 자문해봐야 합니다. 관계선을 하나 긋는 행위로 인해서 데이터 무결성을 깨트리거나, 데이터를 중복으로 만들 수 있기 때문입니다.
후기
금융권 N 사에서 SI 로 프로젝트를 하던 기억이 새록새록 떠오르는 책이었습니다. 복잡한 테이블 구조, 어지러운 관계선, 코드 기반의 속성명과 값 등등에 대한 경험이 없다면 이 책의 내용이 와닿지도 이해가 되지도 않았을 것 같습니다. 수많은 프로젝트를 진행한 저자의 경험과 내공이 느껴지는 책이며, ‘좋은 모델’ 을 만들기 위해서 고민을 할 수 있는 초석을 마련할 수 있었던 것 같습니다.
추천 정도 : ⭐
실무에서 모델링의 한계를 느끼고, 모델러로서 역량을 키우고 싶은 사람들은 읽어봐야 할 것 같습니다.
기준표
상황에 따라서 읽어야 한다: ⭐
읽어두면 좋다: ⭐️⭐️
개발자 필독서 수준: ⭐️⭐️⭐️