DAO에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 이를 일관된 방법으로 사용할 수 있도록 지원하는 지 알아볼 것.
UserDao 는 단순 등록, 조회, 수정, 삭제를 하는 CRUD 에 맞추서 설계 및 구현되어있다. 이후 몇가지 기능을 더 추가한다.
사용자 레벨 관리 기능을 추가
사용자 레벨 BASIC / SIVER / GOLD
처음 가입시 BASIC 이후 활동빈도에 따라 레벨 업
가입 후 50회 이상 로그인 BASIC -> SIVER
30번 이상 추천 받는 경우 SIVER -> GOLD
- 필드를 추가
- 각각의 레벨을 코드화시키는 경우
일반적인 상수형 표현123456789101112131415class User{private static final int BASIC = 1;private static final int SILVER = 2;private static final int GOLD = 3;int level;public void setLevel(int level){this.level = level;}public int getLevel(){return level;}}cs level의 타입이 int 이기 때문에 실수값을 넣어도 컴파일러가 잡아내지 못하고 런타임때 에러를 발생시킨다. 또한 값을 벗어나는 경우도 있다.
enum 타입으로 표현123456789101112131415161718192021222324public enum Level{BASIC(1),SIVER(2),GOLD(3);private final int value;Level(int value){this.value = value;}public int intValue(){return value;}public static Level valueOf(int value){switch(value){case 1:return BASIC;case 2:return SIVER;case 3:return GOLD;default:throw new AssertionError("Unknown value : " + value);}}}cs
(중략)
- 코드 개선
트랜잭션 서비스 추상화
"사용자 레벨 관리 작업을 수행하는 도중에 네트워크가 끊기거나 서버에 장애가 생겨서 작업을 완료할 수 없다면, 그때까지 변경된 사용자의 레벨은 그대로 두는가? 아니면 모두 초기 상태로 되돌려 놓아야 하는가?"
'Spring > 토비의 스프링' 카테고리의 다른 글
20180412 토비의 스프링 4장 : 예외 (0) | 2018.04.12 |
---|---|
20180404 토비의 스프링 3장 : 템플릿 (0) | 2018.04.04 |
20180328 토비의 스프링 2장 : 테스트 (0) | 2018.03.28 |
20180320 토비의 스프링 1장 : 오브젝트와 의존관계 02 (0) | 2018.03.20 |
20180312 토비의 스프링 1장 : 오브젝트와 의존관계 01 (0) | 2018.03.12 |