Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

관계형 데이터베이스 실전 입문 스터디 4주차 회고

책 6장 도메인 설계 전략과 7장 NULL 과의 싸움에 대해 스터디를 진행했다. 6장을 읽으면 나는 관계형 데이터 베이스를 이용해 도메인 설계를 할 수 있어야 한다. 그래서 내가 만들고 있는 사이드 프로젝트를 가지고 데이터 베이스 설계를 해보았고 이를 스터디에서 공유했다.

셀프 시험

리액트를 공부하면서 셀프 시험을 볼 수 있는 웹앱을 만들고 있는데 이것만으로는 부족하다. 처음 시작으로는 질문과 답변을 등록할 수 있어 공부할 수 있게 만들려고 했는데 시험을 본다는 느낌이 안 들었다. 그래서 텍스트에 주요 키워드를 빈칸으로 만들고 채우는 앱으로 발전시키고 싶었다. 이 기능을 만들기 위해 관계형 모델을 모델링 했다.

모델링

image

처음에는 질문과 답변만 필요해서 이런 식으로 모델링 했었는데, 빈칸을 만들어야 하다 보니 추가적인 데이터가 필요했다. 기존에는 답이 단 1개였는데 이제 여러 개가 되었다.

image

이런 식으로 모델이 추가되었다. 근데 아래의 모델로는 아무것도 할 수 없다. 중복이 발생하기도 하고, 클라이언트에서 이러한 데이터를 가지고 빈칸을 만들 수가 없다. 응용프로그램이 데이터를 어떻게 사용할지를 많이 고민해야 한다는 것을 배웠다.

image

그래서 모델을 이런 식으로 더 추가했다. 빈칸의 위치인 column과 답을 만들었는데 column이 해당 답변에서는 식별할 수 있다고 생각하여 후보키라고 생각했었는데 스터디에서 토론을 통해 아니라는 것을 배웠다.

  1. Column은 계산된 값이다. 만약 정답이 조금이라도 바뀌면 값이 모두 바뀌어야 한다.
  2. 값을 가지고 평가를 한다. 관계를 가지고 데이터를 조회하는 것이 아닌 값을 평가하고 그 값에 따라 데이터를 조회한다. 이는 관계를 이용한 연산이 아니다.

image

맹대표님이 위와 같이 모델링하는 과정을 보여주셨는데 경이로웠다.

  • 하나의 속성은 하나의 술어논리만 가져야 한다는 것을 배웠다. 두 개 이상 가지는 순간 속성을 릴레이션으로 평가할 수 있는 것이 아니라 값으로 평가할 수밖에 없게 된다.
  • 술어논리가 결국 도메인이라는 것을 배웠다.
  • 도메인 주도 데이터 베이스 설계가 완성이 되니까 사실상 애플리케이션을 다 만들었다. 이것만 가지고 있으면 앱이든 웹이든 심지어 엑셀로도 만들 수 있다. 레이어드 아키텍처, 클린 아키텍처 그리고 헥사고날 아키텍처에서 얘기하는 도메인 외에는 세부사항이라는 것을 실감하게 되었다.

Sources