Skip to content

5-2 트랜잭션 서비스 추상화 #14

Description

@sally-ksh
  • 테스트용 UserService
  • 원자성 all or norhing
  • 트랜잭션 경계 설정
    • JDBC -> Service layer
  • 트랜잭션 동기화
    • Connection 파라미터 제거 ➜ TransactionSynchronizationManager , DataSourceUtils
  • 스프링의 트랜잭션 서비스 추상화
    • 트랜잭션 API 의존관계 문제 해결 ➜ PlatformTransactionManager , TransactionStatus
    • 글로벌 트랜잭션 등 변경 by 트랜잭션 설정 분리 ( DI )
  • 메일 서비스 추상화


트랜잭션 테스트 위한 트랜잭션 중단 로직 테스트용 코드 GitHub

static class TestUserLevelUpgrade implements UserLevelUpgradePolicy {
private final String id;

public TestUserLevelUpgrade(String id) {
	this.id = id;
}

@Override
public boolean canUpgradeLevel(User user) {
	Level currentLevel = user.getLevel();
	switch (currentLevel) {
		case BASIC:
			return (user.getLogin() >= UserService.MIN_LOG_COUNT_FOR_SILVER);
		case SILVER:
			return (user.getRecommend() >= UserService.MIN_RECOMMEND_FOR_GOLD);
		case GOLD:
			return false;
		default:
			throw new IllegalArgumentException("Unknown Level: " + currentLevel);
	}
}

@Override
public void upgradeLevel(User user) {
	if (user.getId().equals(this.id)) {
		throw new TestUserServiceException();
	}
	user.upgradeLevel();
}
}

static class TestUserServiceException extends RuntimeException {}

Metadata

Metadata

Assignees

Labels

5장서비스 추상화

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions