관계형 데이터베이스 실전 입문 서평

원리부터 배우는 관계형 데이터베이스 실전 입문

관계형 데이터베이스 실전 입문

코드숨 스터디 ( 2023.07.03 ~ 2023.08.14) 7주간 스터디를 진행했다.

매주 60p 정도의 분량을 읽어오고 모르는 부분과 흥미로운 부분, 중요한 부분을 서로 공유했다. 모르는 부분은 같이 보며 가르쳐주기도하고 고민하며 해결했다. 실무에서 겪고 있는 문제들을 같이 공유하며 어떻게 해결할 수 있는지도 논의했다.




DB는 개발에서 떼어낼 수 없는 존재이다. 관계형 데이터베이스는 특히나, 백엔드 개발자라면 다 쓰고 있을 것이다. 그러나 우리는 쓸 줄은 알지만 잘 쓸 줄은 모른다. SQL을 쓸 줄 알면 관계형 DB를 잘 쓸 줄 안다고 착각하게 된다.

관계형 데이터베이스를 잘 쓰려면 어떻게 해야 할까? 관계형 모델이 무엇인지 이해해야 한다. 관계형 모델을 잘 이해하려면 명제가 무엇인지 알아야 한다. 또, 관계형 모델을 쓰는 이유를 알아야 한다. 어떤 도구를 쓸 때는 그 목적에 맞는 도구를 선택해서 잘 써야 한다. 회를 써는데 중식도를 쓰진 않는 것처럼 말이다. 하지만, 실무를 하다 보면 그렇지 않은 경우가 훨씬 많다.

관계형 데이터는 데이터 정합성에 최적화된 모델이다. 관계형 모델에서 중요한 것은 릴레이션을 사용한 연산 결과가 릴레이션이 되는 것이다. 데이터를 의미별로 쪼개서 연산을 하면 릴레이션이 되고, 릴레이션을 가지고 연산을 하면 또 다른 릴레이션이 나온다. 이건 이전에 없었던 새로운 정보다. 새로운 정보를 만들기 위해 또는 발견하기 위해 쓴다. SQL을 관계형 모델에 맞게 사용하려면 테이블을 집합처럼 사용해야 한다. 적어도 어딘가에 유일성 제약이 있어야 한다. 데이터에 모순이 없어야 한다. 그러기 위해서는 중복이 없어야 하고 정규화를 하면 중복이 사라진다. 모순은 null로부터 발생한다. null을 없애려면 정규화를 해야 한다. 이렇게 되면 쿼리는 선언적이 된다.

벌써 위의 문단을 읽는 것만으로도 머릿속에 의문이 가득 찰 것이다. 정규화를 많이 하면 조인이 많아지는데? 업무를 하다 보면 null을 불가피한 것 아닌가? 등등. 관계형 모델이 무엇인지 정확한 이해가 없이는 이 모든 것들이 이해가 되지 않는다. 무조건적으로 정규화를 하려 하면 이해도 되지 않고 쉽지 않다. 먼저 관계형 모델이란 무엇인가를 이해해야 한다. 트랜잭션, 파티션 이런 것들은 부가적인 것이다.

현실에서 일을 하다 보면 강력한 규칙들은 지키기가 어렵다. 하지만 강력하게 규제하지 않으면 구멍이 생기고 그 구멍들이 모여 어느 순간 뚝이 무너질 위험에 내내 노출되어 있는 것과 마찬가지가 아닐까? 개인적 욕심으로는 정말 빡세게 정규화된 모델을 가지고 서비스를 운영해 보고 싶다. 책에 나오는 이야기들을 모두 지킨 이상적인 모델이란 불가능한 걸까?라는 아쉬움이 남는다.

책 내용은 정말 좋았다. 앞 장의 내용은 관계형 모델이란 무엇인지 근본적인 이야기들이 나오고 후반부에서는 좀 더 실무에 가까운 내용이 나온다. select는 어떻게 해야 하는지, 인덱스, 트랜잭션 등등. 앞의 4장까지의 내용을 모두 이해한다면 이 책을 다 읽었다고 봐도 무방할 것이다.

예전에는 조인, 외래 키 등에 대해 부정적인 생각도 가지고 있었다. 하지만 이 책을 읽으면서 조인에 대해서는 좀 더 관대해졌고 외래 키에 대해서는 좀 더 빡빡해졌다. 또, 관계형 데이터 모델이 아닌 것들을 억지로 관계형 데이터 베이스를 고집하여 끼워 넣지 않고 그 데이터에 맞는 DB를 생각하게 되었다. 데이터베이스 리팩토링에 대한 생각도 유연해지고 애플리케이션의 변화(리팩토링)에 맞춰 데이터베이스도 리팩토링이 돼야 함을 깊이 공감하게 되었다.

이 책을 읽으면서 읽는대서 그치는 게 아니라 실무에 바로 적용할 수 있어서 좋았다. 기본 키에 대한 내용, 인덱스, 리팩토링 등등 실제 적용해 보며 더 기억에 잘 남고 이해하게 되었다.

이 책을 읽는 동안 소개되었던 SQL안티패턴이라는 책도 꼭 읽어봐야겠다. 계획했던 2023 데이터베이스 스터디가 순차적으로 잘 마무리되고 있는거 같아 뿌듯하다.

results matching ""

    No results matching ""