4. 요구사항
사용자는 질문을 할 수 있어야 한다.
질문에 대한 답변을 할 수 있어야 한다.
질문을 할 때 태그를 추가할 수 있어야 한다.
태그는 태그 풀에 존재하는 태그만 추가할 수 있다.
태그가 추가될 경우 해당 태그 수는 +1 증가, 삭제될 경우 해당 태그
수는 -1 증가해야 한다.
8. 테이블 설계로부터 시작 한다면…
요구사항
질문 할 때 태그를 추가할 수 있다. (예 java eclipse)
질문을 수정할 때 태그를 수정할 수 있다. (예. eclipse ant)
9.
10. 질문 추가시 java eclipse 태그 추가할 경우
insert into question values( ?, ?, ?, ?, ?); => question_id = 1
select id, name from tag where name=’java’; => tag_id = 11
select id, name from tag where name=’eclipse’; => tag_id = 12
insert into question_tag values( 1, 11 );
insert into question_tag values( 1, 12 );
update tag set tagged_count = tagged_count + 1 where name=’java’;
update tag set tagged_count = tagged_count + 1 where name=’eclipse’;
11. 질문 수정시 eclipse ant 태그 추가할 경우
update question set title=?, contents=? where question_id = 1;
delete from question where question_id = 1;
select id, name from tag where name=’eclipse’; => tag_id = 12
select id, name from tag where name=’ant’; => tag_id = 13
insert into question_tag values(1, 13);
delete from question_tag where question_id=1 and tag_id=11;
update tag set tagged_count = tagged_count + 1 where name=’ant’;
update tag set tagged_count = tagged_count - 1 where name=’java’;
12. 객체 간의 관계는 사라지고 데이터베이스에 대한 처리에 집중하게 된다.
즉, 비즈니스 로직 구현 보다 데이터베이스 접근 로직 구현에 집중한다.
26. 데모
public class JPASchemaExport {
public static void main(String[] args) {
Ejb3Configuration cfg = new Ejb3Configuration();
HashMap<String, String> props = new HashMap<String, String>();
props.put("hibernate.format_sql", "true");
Ejb3Configuration configured = cfg.configure("slipp.qna", props);
SchemaExport se = new SchemaExport(configured.getHibernateConfiguration());
se.setDelimiter(";");
se.create(true, false);
}
}
객체와 테이블을 매핑하면 테이블 스키마를 자동으로 Export할 수 있다.
27. 데모
DB Migration 도구를 활용해 스키마 관리
Maven Carbon Five 플러그인 활용(https://code.google.com/p/c5-db-migration/)
37. 도메인 주도 개발
객체 속성 추가 및 테이블 칼럼 추가
데이터베이스 접근 로직 구현
매핑 정보를 활용해 테이블 스키마 생
성
객체(도메인) 설계
비즈니스 로직 구현
객체와 테이블 매핑
38. 테이블 주도 개발
객체 속성 추가 및 테이블 칼럼 추가
비즈니스 로직 구현
데이터베이스 접근 로직 구현
테이블 설계
테이블로부터 객체 생성
객체와 테이블 매핑
39. 도메인 주도 개발
객체 속성 추가 및 테이블 칼럼 추가
데이터베이스 접근 로직 구현
매핑 정보를 활용해 테이블 스키마 생
성
데이터베이스 서버 필요함
객체(도메인) 설계
비즈니스 로직 구현
객체와 테이블 매핑
데이터베이스 서버가 없는 상태에서 개발
가능
40. 테이블 주도 개발
객체 속성 추가 및 테이블 칼럼 추가
비즈니스 로직 구현
데이터베이스 접근 로직 구현
테이블 설계
테이블로부터 객체 생성
객체와 테이블 매핑
데이터베이스 서버에 항상 의존관계를 가진다.
41. 도메인 주도 개발
데이터베이스에 의존하지 않은 상태에서 개발 가능한 시간이 있기 때문에 구현 – 피드백 사이클이
빠르다.
빠른 피드백 사이클은 삽질할 수 있는 시간을 확보함으로써 빠른 지식 축적이 가능하다.
지식 축적은 도메인에 최적화된 설계를 할 수 있도록 한다.
좋은 설계는 사용자의 요구사항 변화에 빠르게 대응할 수 있다.
개발자는 소스 코드에 대한 자부심과 여유 시간을 확보할 수 있다.
42. 질문 : 지금 내가 일하는 곳은 DBA의 영향력이 너무 커서 변화를 만들 수 없다.
어떻게??
틈틈이 객체 설계, ORM에 대한 공부한다. 장난감 프로젝트를 하면 더 좋다.
몇 년이 지나 본인이 프로젝트를 주도할 때 도메인 주도 개발로 진행한다.
43. 질문 : ORM 적용하고 싶은데 팀장님이나 선배 개발자가 못하게 해요.
어떻게??
틈틈이 객체 설계, ORM에 대한 공부한다. 장난감 프로젝트를 하면 더 좋다.
몇 년이 지나 본인이 프로젝트를 주도할 때 도메인 주도 개발로 진행한다.
44. 현재 내 영향력 하에서 변화를 만들 수 있는 부분에 집중하자.
점차 영향력을 확대해 나간다.