소스코드가 변한다는 것은 모든 개발자가 아는 사실이다.
DB역시 마찬가지이다. 데이터베이스는 데이터를 저장하는 공간인데 '비지니스 로직 - 소스코드 - 데이터'는 서로 연관을 맺고 있기 때문이다.
마틴파울러의 데이터베이스 디자인
리팩토링이라는 책으로 유명한 마틴파울러가 'Evolutionary Database Design'라는 제목으로 쓴 글이 있다.
주소: http://martinfowler.com/articles/evodb.html
파울러는 데이터베이스에도 변화라는 것은 자연스러운 것이라는 태도를 가지고 리팩토링이라는 관점으로 접근한다.
변화를 아래와 같이 세 가지 범주로 나누고 있다.
- 데이터베이스 스키마 변경
- 데이터베이스에서 데이터를 마이그레이션
- 데이터베이스 접근 코드의 변경
그리고 데이터베이스 리팩토링은 SQL의 DDL(스키마 변경)과 DML(데이터 마이그레이션)을 이용한다.
또한 이런 SQL을 생성은 반복적이기 때문에 자동화를 할 필요가 있다.
대부분의 데이터베이스 관리 시스템(DBMS)은 테이블 정보 등과 같은 시스템을 유지하기 위한 정보를 가지고 있다.
가령 오라클에서는 딕셔너리 테이블이라고 하고, SQL Server에서는 시스템 테이블이라고 한다.
DB 비교 도구
아무래도 데이터베이스가 바뀌면 생성 스크립트야 IDE 툴에서 자동으로 만들 수 있다.
하지만 새로 설치가 아닌 업그레이드를 위해서라면 CREATE가 아닌 ALTER 명령을 써야한다.
시중에 보니 그런 변화를 찾아주는 도구들이 있었다.
- SQL Delta - http://www.sqldelta.com/
- SQL Compare : http://www.red-gate.com/products/sql-development/sql-compare/
장고 프레임워크
올해 초에 파이썬으로 작성된 웹 프레임워크인 장고에 대해 공부한 적이 있었다.
이 프레임워크는 공식적으로 PostgreSQL, MySQL, SQLite, Oracle, SQL Server(django-mssql 필요)를 지원한다.
신기했던 것은 DB를 다루기 위해 직접 접근을 하지않고 사용할 DB에 대한 정보를 환경설정을 해주고 모델에 대해 만들고 dbsync를 해주면 자동으로 데이터베이스를 구성해준다는 것이다.
궁금해서 소스코드를 확인해보니 위에서 언급한 딕셔너리 테이블등을 검색을 해서 DDL등을 실행하게 되어 있었다.