p. 369
추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것을 말한다.
p. 389
서비스 추상화라고 하면 트랜잭션과 같이 기능은 유사하나 사용 방법이 다른 로우레벨의 다양한 기술에 대해 추상 인터페이스와 일관성 있는 접근 방법을 제공해 주는 것을 말한다.
[정리]
서비스 추상화는 예를들어, 우리가 사용하는 트랜잭션 방식이 로컬트랜잭션 이라고 했을때, 이것을 글로벌 트랜잭션 방식으로 바꾼다고 하더라도, DAO나 Service계층의 코드에는 관여하지 않고, 변경 가능하도록 인터페이스를 통해 추상화 해 주는 개념인 것 같다.
1. 사용자 레벨 관리 기능 추가
- 사용자의 등급이 한단계씩 업그레이드 되는 로직으로 예제 설명
ex) 처음가입시에는 basic, 50회이상 로그인시 SILVER로 레벨업, 30번이상 추천시 GOLD로 레벨업
1) User 클래스에 Level 필드추가
- 숫자 타입을 직접 사용하는 것보다 자바 5이상에서 제공하는 enum 클래스를사용 (319p)
- upgradeLevels() 메서드
사용자 레벨 관리 기능을 만들고 리펙토링 하는 과정을 설명한다.
332p에 메서드생성.
337p에 코드개선 설명
- 문제점찾기에 대한 설명
338p부터 리펙토링
2. 트랜잭션 서비스 추상화
@ 트랜잭션(Transaction) : 여러 개의 오퍼레이션을 하나의 작업 단위로 묶어 주는 것.
@ Transaction의 4가지 특성(ACID)
1. 원자성(Automicity) : 트랜잭션의 포함된 오퍼레이션(작업)들은 모두 수행되거나, 아니면 전혀 수행되지 않아야 한다.
2. 일관성(Consistency) : 트랜잭션이 성공적인 경우에는 일관성있는 상태에 있어야 한다.
3. 고립성(Isolation) : 각 트랜잭션은 다른 트랜잭션과 독립적으로 수행되는 것처럼 보여야 한다.
4. 지속성(Durability) : 성공적으로 수행된 트랜잭션의 결과는 지속성이 있어야 한다.
중간에 예외가 발생해서 작업을 완료 할 수 없다면 아예 작업이 시작되지 않은 것처럼 초기 상태로 돌려놔야 한다. (353p)
- 트랜잭션의 경계설정 : setAutoCommit(false) 로 트랜잭션의 시작을 선언하고 commit(), rollback()으로 종료하는 작업
- 로컬 트랜잭션 : 이렇게 하나의 db 커넥션 안에서 만들어지는 트랜잭션
353p : 트랜잭션 경계설정.
355~360p까지 여러가지 트랜잭션의 문제점이 있고.
361p "스프링은 이 딜레마를 해결할 수 있는 멋진 방법을 제공해준다. "
- 스프링이 제안하는 방법은 독립적인 트랜잭션 동기화 방식
- 트랜젝션 동기화란 : 트랜잭션을 시작하기 위해 만든 connection 오브젝트를 특별한 저장소에 보관해두고, 이후에 호출되는 DAO메서드에서는
저장된 Connection을 가져다가 사용하게 하는것
362p 스프링은 jdbcTemplate과 더불어 이런 트랜잭션 동기화 기능을 지원하는 간한단 유틸리티 메서드를 제공하고 있다 (예제는 363p)
3. 서비스 추상화와 단일 책임원칙
'책 > 토비 스프링 2020' 카테고리의 다른 글
[2017] 7. 스프링 핵심 기술의 응용 (0) | 2018.01.12 |
---|---|
[2017] 6. AOP (0) | 2018.01.04 |
[2017] 스프링개념 (0) | 2017.12.28 |
[2017] 4. 예외 (0) | 2017.12.21 |
[2017] 3. 템플릿 (0) | 2017.12.15 |