정규화와 응집도에 대한 고찰
생짜배기 컴맹이었던 필자가 본의 아니게 IT에 관련된 일을 시작하여 이제는 누가 봐도 IT인이 되었고, 그러면서 이것저것 IT 이론들에 대해서도 주워들은 것도 조금 생기게 되었다. 그래 봤자 High-End 급의 이론들은 아니고, Classic한 것이 대부분이지만 말이다. 하지만 이러한 이론들도 모이고 모이다 보니 그 중 몇몇 개에 대해서는 재미있는 성향을 발견하곤 한다. 그 중에 하나를 오늘 소개해 드릴까 하는데, 바로 정규화(Normalization)와 응집도(Cohesion)에 대한 이야기이다.
'정규화'는 데이터베이스 모델링 이론 중 가장 기초적인 이론! '응집도' 역시 소프트웨어 공학 내용 중 거의 앞부분에 나오는 고전적인 이론이다. 사실 정규화와 응집도에 대한 이론을 잘 알고 계신 분들은 공감하시겠지만, 이 두 가지 이론을 얘기하다 보면 사용하는 단어만 달랐지, 그 내용은 거의 동일하다는 느낌을 받게 된다. 그럼 먼저 Novice 단계의 분들을 위해 두 이론을 되짚어 보며, 공통점을 찾아 보도록 하자.
1. 정규화
정규화(Normalization)란 관계형 데이터베이스의 설계에서 데이터의 중복을 최소화하도록 데이터를 구조화하는 프로세스를 말한다(위키백과 참조). 이렇게 얘기하면 잘 와닿지 않는 부분도 있으니 예를 한 번 들어 보겠다.

이런 식으로 DB 테이블을 만든다면 아래와 같은 상황이 생긴다.
1) '홍길동' 학생이 이번에 DAP 자격증을 취득하였다면 해당 테이블에 DAP 관련된 정보(자격증, 자격증번호, 취득일)외에도 '홍길동' 학생의 정보(이름, 주소, 핸드폰번호)를 불필요하게 같이 넣어줘야 한다 (삽입이상 : Insertion Anomaly).
2) '강감찬' 학생의 OCP 자격증 정보가 잘못 입력되어서 자격증 정보를 삭제해야 한다면 자격증 정보뿐만 아니라 '강감찬' 학생 정보도 같이 같이 삭제된다(삭제이상 : Deletion Anomaly).
어찌 보면 독립적으로 다뤄져야 할 정보들(학생, 자격증)을 한 테이블에 섞어 놓았을 때 생기는 현상인데, 이 문제를 해결하기 위해선 다음과 같이 테이블을 나눠야 한다.

이런 식으로 데이터의 삽입, 삭제, 변경 시 이상(Anomaly)현상을 해결해서 데이터의 중복을 배제하고 정합성을 지키자는 것이 정규화 이론의 목표라 할 수 있겠다(샘플 참조: http://force44.blog.me/130100972038).
2. 응집도
응집도 (cohesion)란 프로그램의 한 모듈이 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐있는지를 나타내는 정도이다(정의 참조 : http://lazineer.tistory.com/93). 예를 들면 평균을 계산하는 프로그램 모듈을 만들었으면, 그 내용이 평균을 내기 위한 코딩 내용으로 채워져 있어야 하는 것은 당연한 것이고, 표준 편차나 분산(Varience)을 구하는 코딩 내용이 섞여져 있으면 응집도가 떨어진다는 내용이다. 즉, 한 프로그램 모듈 내에 이것 저것 비즈니스 기능들이 섞여져 있다면 해당 모듈은 이해하기 힘들고 재사용 및 유지·보수가 어려워지게 되며, 관련된 다른 모듈의 변화에 민감할 수 밖에 없다는 이론이다.
자, 이렇게 두 가지 이론을 함께 두고 보니 어디선가 공통점이 느껴지지 않는가? 독립할 수 있는 정 ....