Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

refactoring database

2,082 views

Published on

Published in: Technology
  • Be the first to comment

refactoring database

  1. 1. UnitTest++ 을 이용한 리팩토링 데이터베이스 남기룡 (birdkr@gmail.com)
  2. 2. 목차 <ul><li>왜 리팩토링 데이터베이스 ? </li></ul><ul><li>데이터베이스 리팩토링 </li></ul><ul><li>데이터베이스 리팩토링 프로세스 </li></ul><ul><li>단위 테스트 작성하기 </li></ul>
  3. 3. 왜 리팩토링 데이터베이스 ?
  4. 4. 전통적인 데이터베이스 <ul><li>지속적인 변화가 허용되지 않는다 . </li></ul><ul><li>완제품의 변경이 드물다 . </li></ul><ul><li>잘못된 설계에 대한 이슈를 고치기 두렵다 . </li></ul><ul><li>마이그레이션은 거의 프로젝트 수준 </li></ul><ul><li>변경 관리가 없다 . </li></ul><ul><li>데이터베이스 마이그레이션 테스트가 없다 . </li></ul>
  5. 5. 진화적인 데이터베이스 <ul><li>천천히 안전하게 데이터베이스를 변경한다 . </li></ul><ul><li>변경이 관리된다 . </li></ul><ul><li>기획 , 기능은 계속해서 변경되고 추가된다 . </li></ul><ul><li>자동화된 테스트 만들기가 쉽다 . </li></ul><ul><li>기능별로 개발자마다 지식이 쌓인다 . </li></ul><ul><li>팀 상호작용의 중요성 인식 </li></ul><ul><li>DBA = Role != Person </li></ul>
  6. 6. DBA 와 협력하기 <ul><li>DBA 가 어플리케이션을 이해할 수 있도록 돕는다 . </li></ul><ul><li>DBA 가 스크립트 바꾸는 것을 도와줄 것이다 . </li></ul><ul><li>당신이 데이터베이스 테스트 작성하는 것을 도와줄 것이다 . </li></ul><ul><li>데이터의 마이그레이션 코드처럼 위험한 것은 DBA 가 대신 만들어 줄 것이다 . </li></ul><ul><li>SQL 튜닝등에 대한 지식을 얻을 수 있다 . </li></ul>
  7. 7. Everyone gets a Database <ul><li>데이터베이스 인스턴스 = 어플리케이션 인스턴스 </li></ul><ul><li>개발자는 다른 개발자들과 독립적으로 작업할 수 있다 . </li></ul><ul><li>데이터베이스 건드리는 것에 자유를 얻는다 . </li></ul><ul><li>데이터베이스 작업에 CI 툴을 사용한다 . </li></ul><ul><li>데이터베이스는 단지 스키마일 수 있다 . </li></ul>
  8. 8. Why
  9. 9. Liberation
  10. 10. 진화적 데이터베이스 개발기술 <ul><li>데이터베이스 리팩토링 </li></ul><ul><li>진화적 데이터 모델링 </li></ul><ul><li>데이터베이스 회귀 테스트 </li></ul><ul><li>데이터베이스 형상 관리 </li></ul><ul><li>개발자 샌드박스 </li></ul>
  11. 11. 진화적 데이터베이스 개발기술 <ul><li>데이터베이스 리팩토링 </li></ul><ul><li>진화적 데이터 모델링 </li></ul><ul><li>데이터베이스 회귀 테스트 </li></ul><ul><li>데이터베이스 형상 관리 </li></ul><ul><li>개발자 샌드박스 </li></ul>
  12. 12. 데이터베이스 리팩토링
  13. 13. 데이터베이스 리팩토링이란 ?
  14. 14. 데이터베이스 냄새 <ul><li>다목적 컬럼 </li></ul><ul><li>다목적 테이블 </li></ul><ul><li>여분의 데이터 </li></ul><ul><li>너무 많은 컬럼을 가진 테이블 </li></ul><ul><li>너무 많은 행을 가진 테이블 </li></ul><ul><li>스마트 컬럼 </li></ul><ul><li>변경에 대한 두려움 </li></ul>
  15. 15. 데이터베이스 리팩토링 프로세스
  16. 17. 스키마 (Move Column 예제 )
  17. 18. 테스트 , 테스트 <ul><li>리팩토링 전 , 후는 물론 리팩토링 도중에도 계속 테스트를 한다 . </li></ul><ul><li>종류 </li></ul><ul><ul><li>데이터베이스 스키마 테스트 </li></ul></ul><ul><ul><li>애플리케이션이 데이터베이스 스키마를 사용하는 방법을 테스트 </li></ul></ul><ul><ul><li>데이터 마이그레이션 검증 </li></ul></ul><ul><ul><li>외부 프로그램 코드 테스트 </li></ul></ul>
  18. 19. 테스트 , 테스트
  19. 20. 스키마 변경
  20. 21. 데이터 마이그레이션
  21. 22. 외부 액세스 프로그램 수정
  22. 23. 정리 <ul><li>작업한 내용 버전 관리 </li></ul><ul><li>리팩토링이 끝났음을 알린다 . </li></ul>
  23. 24. 단위 테스트 작성하기
  24. 25. 샌드 박스 준비
  25. 26. SeedData
  26. 27. 스키마 테스트
  27. 28. 테스트 코드 샘플
  28. 29. 테스트 항목 <ul><li>Find All - 예상한 만큼의 row 개수 </li></ul><ul><li>Find one - 가져온 레코드의 모든 값 ( 컬럼 ) </li></ul><ul><li>Insert multiple records – 추가된 레코드 </li></ul><ul><li>Insert duplicates – 제약 사항 어기는 것 시도 </li></ul><ul><li>Delete, Delete multiple – 진짜로 제거되었는지 확인 </li></ul><ul><li>Update – 수정된 내용 확인 </li></ul><ul><li>Violate constraints – 모든 가능한 가상 제약들을 테스트했는지 확인 </li></ul><ul><li>Optimistic locking - 낙관적인 락킹 예외가 제대로 동작했는지 확인 </li></ul>
  29. 30. 자동화
  30. 31. 참고 <ul><li>Refactoring Databases : Evolutionary Database Design – Pramod Sadalage, ThoughtWorks Inc. </li></ul>
  31. 32. 질문 / 답변

×