• 리팩토링 데이터베이스
  • 진화적 데이터베이스 디자인

  • 스캇 W. 앰블러, 프라모드 J. 세달라지 지음
  • 정원혁, 이재범, 권태돈, 성대중, 현중균 옮김

  • 데이터 & 데이터베이스 시리즈 _ 001
  • ISBN: 9788995856444
  • 25,000원 | 2007년 06월 29일 발행 | 400쪽



『리팩토링 데이터베이스(Refactoring Database)』는 데이터베이스 개발에 대한 새로운 장을 여는 책이다. 마틴 파울러(Martin Folwer)가 자신의 책 『리팩토링』에서 소개한 “작은 단계를 통해 코드를 점진적으로 발전시켜 그 디자인을 개선시키는” 리팩토링은 오늘날 대 부분의 개발자들에 의해서 코드의 품질을 높이기 위해 사용되고 있다. 스캇 엠블러(Scott W.Ambler)와 프라모드 세달라지(Pramod J.Sadalage)는 코드 리팩토링이 보여준 기민한 수행방법론을 데이터베이스 세계로 들여왔다. 데이터베이스 리팩토링은 코드 리팩토링이 가져다 준 것과 동일하게, 변화에 대한 거부감과 실패할지 모른다는 두려움에 대해 용기와 성공의 가능성을 독자의 지성에 강하게 호소하고 있다.

이 책은 데이터베이스를 개발하고, 개선할 때 어떻게 애자일한 수행방법을 적용할지에 대한 실용적이고 상세한 예제를 제공한다. 이러한 포괄적인 가이드와 레퍼런스는 데이터베이스 리팩토링의 기초를 이루는 모든 기본적인 개념을 포함함으로써, 실세계의 데이터베이스를 리팩토링하기 위한 실무적인 장애물을 극복할 수 있도록 도와준다. 철두철미한 예제를 이용하여 저자는 독자들을 간단한 독립형(standalone) 데이터베이스 애플리케이션뿐만 아니라 정교한 다중 애플리케이션 상황에서도 리팩토링을 할 수 있도록 이끌어 준다. 이 책을 통해 데이터베이스 스키마 리팩토링에 관련된 모든 작업에 숙달할 수 있으며, 아무리 복잡한 프로덕션 환경일지라도 리팩토링을 배포하는 최고의 방법을 발견할 수 있다.

이 책의 후반부에는 데이터베이스 리팩토링의 주요 네 가지 카테고리를 시스템적으로 다룬다. 리팩토링을 이용하여 데이터베이스 구조, 데이터 품질, 참조 무결성을 어떻게 향상시키고 아키텍쳐와 메서드를 어떻게 리팩토링할 수 있는지 배우게 된다. 이 책은 C#, C , VB.NET와 같은 다른 프로그래밍 언어와 DB2, SQL Server, MySQL, Sybase와 같은 다른 데이터베이스에서도 쉽게 수용할 수 있는 Oracle과 Java로 짜여진 광범위한 예제를 제공한다. 이 책의 기술과 예제를 이용하여 시간적 낭비, 재 작업, 위험성, 비용을 줄일 수 있으며 차츰 발전할 수 있는 데이터베이스 시스템을 만들 수 있다.

이 책은 누구를 위한 책인가? 이 책은 데이터 모델러와 관리자뿐만 아니라 개발자와 그리고, 애자일 데이터베이스 개발에 관심이 있는 모든 사람이 꼭 읽어야 할 책이다. 우리는 너무나 오랫동안 서로 다른 세계에 살았고 이 책은 그 분리된 틈새를 매꾸는 데 많은 도움을 준다.

이 책이 다루는 내용 이 책은 기술적으로 데이터베이스 개발에 진화적 수행방법론이라 할 수 있는 리팩토링이 어떻게 적용될 수 있는지에 대한 실제적이고, 실용적인 프로세스와 수행기법을 다룬다. 주로 다루는 내용은 다음과 같다.

  • 진화적 데이터베이스 개발
  • 데이터베이스 리팩토링
  • 데이터베이스 회귀 테스트
  • 데이터베이스 변화관리와 배포
  • 데이터베이스 리팩토링 프로세스
  • 구조적 데이터베이스 리팩토링
  • 데이터 품질 리팩토링
  • 참조 무결성 리팩토링
  • 아키텍처적 리팩토링
  • 메서드 리팩토링
  • 데이터베이스 변환

 

추천사

- 마틴 파울러(Martin Fowler), series editor; chief scientist, ThoughtWorks

10년 전 리팩토링이라는 말은 대개 스몰토크(Smalltalk) 커뮤니티와 같은 일부 사람들에게만 알려져 있었다. 갈수록 많은 사람들이 훈련된 효율적인 방법으로 리팩토링을 적용하여, 운영중인 코드를 수정해 나가는 것을 보면 놀라운 것이 사실이다. 그 결과 많은 사람들이 소프트웨어 개발에서 코드 리팩토링을 필수적인 과정으로 생각하게 되었다.

나는 엔터프라이즈 응용 프로그램의 세계에서 일하고 있으며 엔터프라이즈 응용 프로그램의 많은 부분은 데이터베이스와 함께 동작한다. 내가 쓴 리팩토링에 관한 원래 책에서, 데이터베이스 리팩토링은 새로운 문제로 등장하고 있기 때문에 리팩토링에 있어서 데이터베이스는 중요한 문제영역이라고 지적하였다. 이러한 문제들은 데이터베이스 전문가와 소프트웨어 개발자 사이에서 불신과 몰(沒)이해로 인한 단절된 벽으로 말미암아 생긴 엔터프라이즈 소프트웨어 세계의 슬픈 영역이다.

스캇(Sccot)과 프라모드(Pramod)에 관해 내가 좋아하는 한 가지는 앞서 설명한 두 영역을 넘나들며 서로 다른 방법으로 열심히 일하고 있다는 것이다. 스캇은 두 영역간의 갈라진 틈을 잇는 가교 역할을 하는 데이터베이스 코드를 작성하고 있으며, 그의 객체 관계형 매핑(object-relational mapping)에 대한 성과물은 나의 엔터프라이즈 애플리케이션 아키텍쳐에 많은 영향을 미쳤다. 프라모드는 덜 알려졌을지 모르나, 그가 나에게 준 충격은 실로 대단했다. 그와 함께 ThoughtWork사에서 일할 때, 우리는 데이터베이스 리팩토링은 불가능하다고 이야기를 했다. 하지만 프라모드는 이러한 기존의 생각을 거부하고 개략적인 아이디어와 함께 데이터베이스 스키마를 일관되게 유지할 수 있으면서 변경 가능하거나 제어할 수 있는 프로그램의 원리에 대해 연구했다. 이것은 소프트웨어 개발의 영역에서 코드로부터 시작하여 진화적인 디자인을 사용할 수 있게끔 해주었다. 프라모드는 우리의 많은 고객들과 ThoughtWorks 직원에게 이러한 테크닉을 적용하여 끊임없이 일어나는 데이터베이스 디자인에 대한 장애물을 영영 떨쳐버리게 하였다.

이 책은 응용 프로그램과 데이터 사이에 적당한 다리가 없는 곳에 살았던 두 사람의 교훈을 정리하여 데이터베이스를 위한 리팩토링 테크닉을 소개한다. 이미 리팩토링 경험을 가지고 있다면, 다른 것과 비교했을 때 주요한 차이점은 단지 응용 프로그램과 데이터 구조를 변경하는 것뿐만 아니라 데이터 자체의 연속적인 이관을 관리하는 점이라는 것을 알게 될 것이다. 이 책은 이러한 일을 어떻게 하는지를 알려주고, 이러한 두 가지 내용을 바탕으로 프로젝트 진행을 도와준다.

나는 이 책이 출판돼 정말 기뻤다. 하지만 이것은 첫 단계라고 생각한다. 리팩토링에 대한 책을 출판한 뒤에 나는 자동으로 리팩토링 작업을 해주는 정교한 도구를 찾을 수 있어 기뻤다. 나는 데이터베이스에도 똑같은 일이 일어나고 스키마와 데이터의 연속적인 이관을 모든 사람들이 쉽게 할 수 있도록 해주는 도구를 만드는 회사가 나타나길 바란다. 그러한 일이 일어나기 전에 이 책은 여러분만의 프로세스와 도구를 만드는 데 도움이 될 것이다. 나중에 이 책은 리팩토링 도구의 사용에 있어 기초적인 정보를 제공함으로 인해 영속적인 가치를 가지게 될 것이다.

스캇 W. 엠블러(Scott W. Ambler)

스캇 W. 엠블러는 세계적 선도 업체중의 하나인 소프트웨어 프로세스 임프루브먼트 (software process improvement)사의 컨설턴트로, 애자일 모델링(Agile Modeling), 애자일 데이터(Agile Data), 엔터프라이즈 통합 프로세스(Enterprise Unified Process), 애자일 통합 프로세스(Agile Unified Process)의 설립자이다. 스캇 엠블러는 Software Development, JavaOne, OOPSLA, DAMA와 같은 컨퍼런스에서 기조 연설과 프리젠테이션을 했다. 그는 애자일 모델링, 애자일 데이터베이스 테크닉(Agile Database Techniques), 오브젝트 프리머(The Object Primer) 3판, The Elements of UML 2.0 Style, 엔터프라이즈 통합 프로세스의 저자 혹은 공동저자이다.

프라모드 J. 세달라지(Pramod J. Sadalage)

프라모드 J. 세달라지는 ThoughtWorks에서 컨설턴트로 일하고 있으며 1999년부터 익스트림 프로그래밍(Extreme Programming)을 이용하여 대규모의 J2EE 응용 프로그램을 개발하고 있는 진화적 데이터베이스 디자인과 데이터베이스 리팩토링의 선구자이다. 프라모드는 현재 진화적 프로젝트에서의 데이터베이스 관리, 데이터베이스 디자인과 관리에서 진화적 프로세스에 관한 책을 쓰고 강연을 하고 있다.

정원혁 (주)필라넷 상무이사, SQL Server Academy 본부장, http://blog.naver.com/wonhyukc

약 2년 전 꿈의 조직, 필라넷(www.feelanet.com) DB사업부를 만들었으며, SQL Server Academy(www.sqlacademy.com)를 맡고 있다. 한국 내 SQL Server 전문가 그룹인 SQL Specialist의 창립자이며 리더이다. 컨설팅 고객사로는 Yes24, 홍진크라운, 부동산114, 삼성반도체, AIG, 동양증권, KT 등이 있다. 쉬고플 때 쉬면서 일할 수 있는, 행복할 수 있는 직장을 만들 꿈을 꾸며 살고 있고, 어디든 도움이 될 곳이 있다면 달려갈 준비를 한발씩 해나가고 있다. 아직도 여전히 하고 싶은게 너무나 많고, 하나님 이끄시는 대로 살아가려고 노력은 하고 있다. 최근에는 주신 IT 재능을 사용하여 필요한 사람들에게 도움을 주기 위해 다른 나라에 교육 센터를 세워 후원하고 있다.

이재범 (주)필라넷 책임 컨설턴트

(주)필라넷에서 Microsoft SQL Server와 관련 개발 부분의 컨설팅을 하고 있으며, 컨설팅 고객사로는 삼성생명, 동양증권, 부산은행, ING생명, 삼성전기, 조선일보, NHN, 호남석유 등이 있다. 다년간 금융권/제조업 관련 시스템 설계 및 개발을 해왔으며, 현재 데이터베이스 성능 튜닝뿐만 아니라 애플리케이션 성능 관리와 오픈소스에 분야에 관심이 많다. 첫 돌을 맞은 한 아이를 둔 가장으로 그 아이의 이름처럼 하나님의 평안을 바라며 살고자 노력하고 있다.

권태돈 (주)필라넷 주임 컨설턴트

(주)필라넷에서 Microsoft SQL Server 관련 컨설팅(BI 및 Analysis Service 분야를 담당)을 하고 있으며 컨설팅 업무와 병행하여 트라이콤 교육센터, 삼성멀티캠퍼스 등에서 SQL Server 과정 전문강사와 SQLMania.net 운영자로 활동하고 있다. 과거 학사 관련 시스템 개발과 주요 메이저 음반사 시스템 개발을 주로 담당했다. 지금은 데이터베이스에 많은 비전을 가지고 필라넷에 입사하였고, 최근 컨설팅 고객사로는 한국투자증권, 부동산114, YES24 등이 있다. 관심분야로는 데이터베이스 마케팅, 경영정보 시스템, BI이다.

성대중 (주)필라넷 책임 컨설턴트

(주)필라넷에서 Microsoft SQL Server 관련 컨설팅을 하고 있으며, 최근 컨설팅 고객사로는 YES24, AIG, 미래에셋생명, 부동산 114, CyberMBA, 삼성반도체 등이 있다. 한국 내 SQL Server 전문가 그룹인 SQL Specialist와 .NET Advisor SQL 그룹의 멤버로 활동하고 있으며, MSDN, TechNET 아티클에 대한 번역과 SQL Server 관련 도서의 번역 프로젝트에 참여하고 있다. 관심분야는 Tuning과 ERP 컨설팅 부분이며, 주경야경을 불사하는 바쁜 일정 중에서도 주일과 수요일에는 교회에 나가야 하는 평범한 크리스챤이다.

현중균 (주)필라넷 차장

(주)필라넷 DB사업부에서 Presale를 주로 하고 있으며, 최근 컨설팅 고객사로는 YES24, AIG, 부동산 114, CyberMBA, CDI홀딩스 등이 있다. 현재는 SQL Server Reporting Service와 SQL Server 관련 솔루션에 대해 관심이 많으며 이들을 통한 원가 절감에 초점을 맞추고 있다. 2005년 SQL Server 매거진 전문 번역을 했으며 네이버에 SQL 관련 사이트를 운영중에 있다. 관심분야는 Reporting Service와 부서 마케팅, 코칭이다.

  • 1장 진화적 데이터베이스 개발
    • 1.1 데이터베이스 리팩토링
    • 1.2 진화적 데이터 모델링
    • 1.3 데이터베이스 회귀 테스트
    • 1.4 데이터베이스 아티팩트 형상관리
    • 1.5 개발자 샌드박스
    • 1.6 진화적 데이터베이스 개발 기술의 장애물
    • 1.7 무엇을 배웠나
  •  
  • 2장 데이터베이스 리팩토링
    • 2.1 코드 리팩토링
    • 2.2 데이터베이스 리팩토링
      • 2.2.1 단일 애플리케이션 데이터베이스 환경
      • 2.2.2 다중 애플리케이션 데이터베이스 환경
      • 2.2.3 의미 유지
    • 2.3 데이터베이스 리팩토링의 분류
    • 2.4 데이터베이스 냄새
    • 2.5 어떻게 데이터베이스 리팩토링을 적합하게 할 것인가
    • 2.6 데이터베이스 스키마를 보다 쉽게 리팩토링하기
    • 2.7 무엇을 배웠나
  •  
  • 3장 데이터베이스 리팩토링 프로세스
    • 3.1 데이터베이스 리팩토링이 적절한지 검증한다
    • 3.2 가장 적절한 데이터베이스 리팩토링을 선택한다.
    • 3.3 원본 데이터베이스 스키마는 더 이상 지원되지 않음을 표시한다.
    • 3.4 리팩토링 전, 후는 물론 리팩토링 도중에도 테스트를 한다
      • 3.4.1 데이터베이스 스키마 테스트하기.
      • 3.4.2 데이터 마이그레이션 검증하기.
      • 3.4.3 외부 액세스 프로그램 테스트하기
    • 3.5 데이터베이스 스키마를 변경한다
    • 3.6 소스 데이터 마이그레이션(Migration)
    • 3.7 외부 액세스 프로그램을 리팩토링한다
    • 3.8 회귀 테스트를 실행한다
    • 3.9 작업한 내용에 대해 버전 관리를 한다.
    • 3.10 리팩토링이 끝났음을 알린다.
    • 3.11 무엇을 배웠나
  •  
  • 4장 프로덕션으로 배포하기
    • 4.1 샌드박스 사이의 효과적인 배포
    • 4.2 데이터베이스 리팩토링의 번들화
    • 4.3 배포 윈도우 스케줄링
    • 4.4 시스템 배포
    • 4.5 더 이상 지원되지 않는 스키마 제거
    • 4.6 무엇을 배웠나
  •  
  • 5장 데이터베이스 리팩토링 전략
    • 5.1 작은 변경사항이 적용하기 더 쉽다
    • 5.2 개개의 리팩토링은 유일하게 식별되어야 한다
    • 5.3 여러 개의 작은 변경으로 큰 변화를 구현한다
    • 5.4 데이터베이스 설정 테이블을 유지한다
    • 5.5 뷰나 배치 작업보다 트리거를 통한 동기화를 사용한다
    • 5.6 충분한 과도기를 가진다
    • 5.7 데이터베이스 ‘변경 관리 위원회’ 전략을 단순화한다
    • 5.8 다른 팀과의 협의 과정을 단순화한다
    • 5.9 데이터베이스 접근을 캡슐화한다
    • 5.10 데이터베이스 환경설정을 쉽게 할 수 있도록 한다
    • 5.11 SQL 문장의 중복을 피한다
    • 5.12 데이터베이스 자산을 형상관리 시스템하에 둔다
    • 5.13 정치를 숙지한다
    • 5.14 무엇을 배웠나
    • 온라인 리소스
  •  
  • 6장 구조적 리팩토링
    • 구조적 리팩토링 구현의 일반적인 고려사항
    • 컬럼 제거(Drop Column)
    • 테이블 제거(Drop Table)
    • 뷰 제거(Drop View)
    • 계산된 컬럼 도입(Introduce Calculated Column)
    • 대리 키 도입(Introduce Surrogate Key)
    • 컬럼 병합 (Merge Columns)
    • 테이블 병합(Merge Tables)
    • 컬럼 옮기기(Move Column)
    • 컬럼명 바꾸기(Rename Column)
    • 테이블명 바꾸기(Rename Table)
    • 뷰 이름 바꾸기(Rename View)
    • LOB 형식을 테이블로 대체(Replace Large Object (LOB) With Table)
    • 컬럼 바꾸기(Replace Column)
    • 일대다 관계를 연관 테이블로 바꾸기(Replace One-to-Many With Associative Table)
    • 대리키를 자연키로 바꾸기(Replace Surrogate Key With Natural Key)
    • 컬럼 분할(Split Column)
    • 테이블 분할(Split Table)
  •  
  • 7장 데이터 품질 리팩토링
    • 데이터 품질 리팩토링 구현시 일반적인 문제
    • 룩업 테이블 추가(Add Lookup Table)
    • 표준 코드 적용(Apply Standard Codes)
    • 표준 타입 적용(Apply Standard Type)
    • 키 통합 전략(Consolidate Key Strategy)
    • 컬럼 제약조건 제거(Drop Column Constraint)
    • 기본값 제거(Drop Default Value)
    • NULL 값을 허용하지 않는 제약조건 제거(Drop Non-Nullable Constraint)
    • 컬럼 제약 조건 도입(Introduce Column Constraint)
    • 일반 형식 도입(Introduce Common Format)
    • 기본 값 도입(Introduce Default Value)
    • NULL 값을 허용하지 않는 컬럼 만들기(Make Column Non-Nullable)
    • 데이터 옮기기(Move Data)
    • 형식 코드의 속성 플래그화(Replace Type Code With Property Flags)
  •  
  • 8장 참조무결성 리팩토링
    • 외래키 제약조건 추가(Add Foreign Key Constraint)
    • 계산된 컬럼을 위한 트리거 추가(Add Trigger For Calculated Column)
    • 외래키 제약조건 삭제(Drop Foreign Key Constraint)
    • 캐스캐이딩 삭제(Cascading Delete)
    • 물리적 삭제(Hard Delete)
    • 논리적 삭제(Soft Delete)
    • 이력 데이터를 위한 트리거(Trigger For History)
  •  
  • 9장 아키텍처적 리팩토링
    • CRUD 메서드 추가(Add Crud Method)
    • 미러 테이블 추가(Add Mirror Table)
    • 읽기 메서드 추가(Add Read Method)
    • 뷰를 이용한 테이블 캡슐화(Encapsulate Table With View)
    • 계산된 메서드 도입(Introduce Calculation Method)
    • 인덱스 도입(Introduce Index)
    • 읽기 전용 테이블 도입(Introduce Read-Only Table)
    • 데이터베이스에서 마이그레이션 하는 메서드(Migrate Method From Database)
    • 데이터베이스로 마이그레이션하는 메서드 (Migrate Method To Database)
    • 뷰로 메서드 대체(Replace Method(s) With View)
    • 메서드로 뷰 대체(Replace View With Method(s))
    • 공식 데이터 소스 사용하기(Use Official Data Source)
  •  
  • 10장 메서드 리팩토링
    • 10.1 인터페이스 변경 리팩토링
    • 10.1.1 매개변수 도입(Add Parameter)
    • 10.1.2 메서드 매개변수화(Parameterize Method)
    • 10.1.3 매개변수 제거(Remove Parameter)
    • 10.1.4 메서드 이름변경(Rename Method)
    • 10.1.5 매개변수 순서 변경(Reorder Parameters)
    • 10.1.6 매개변수를 명시적 메서드로 바꾸기(Replace Parameter with Explicit Methods)
    • 10.2 내부적인 리팩토링(Internal Refactorings)
    • 10.2.1 조건식 통합(Consolidate Conditional Expression)
    • 10.2.2 조건절의 분해(Decompose Conditional)
    • 10.2.3 메서드 추출(Extract Method)
    • 10.2.4 변수 도입(Introduce Variable)
    • 10.2.5 제어 플래그 제거(Remove Control Flag)
    • 10.2.6 중개자 제거(Remove Middle Man)
    • 10.2.7 매개변수 이름 변경(Rename Parameter)
    • 10.2.8 리터럴을 참조 테이블로 대체(Replace Literal with Table Lookup)
    • 10.2.9 중첩된 조건절을 단위별 조건절로 대체(Replace Nested Conditional with Guard Clauses)
    • 10.2.10 임시 변수 분리(Split Temporary Variable)
    • 10.2.11 알고리즘 대체(Substitute Algorithm)
  •  
  • 11장 변환
    • 데이터 추가(Insert Data)
    • 새로운 칼럼 도입(Introduce New Column)
    • 새로운 테이블 도입(Introduce New Table)
    • 뷰 추가(Add View)
    • 데이터 변경(Update Data)
    • 부록 데이터 모델링을 위한 UML 표시법
  •  
  • 용어 정리
  • 참고 & 추천 도서
  • 찾아 보기

도서 소개자료

2007년 졸트상 Books Technical 분야 productivity winner

관련 글