본문 바로가기

분류 전체보기89

7. 스프링 핵심 기술의 응용 1. Sql 과 Dao의 분리 현재의 구조는 Dao 내부에서 Sql을 정의하여 사용하도록 되어있다. 토비의 스프링에서는 이를 JAXB api를 사용하여 xml에 따로 sql을 관리하도록 하여 저장하도록 구현한다. 변경된 현재구조는 아래와 같다. public class XmlSqlService implements SqlService { private Map sqlMap = new HashMap(); public XmlSqlService() { String contextPath = Sqlmap.class.getPackage().getName(); try { JAXBContext context = JAXBContext.newInstance(contextPath); Unmarshaller unmarshaller.. 2021. 2. 14.
6.2. 스프링 AOP 1. 자동 프록시 생성 중복 문제 제거하기 매번 ProxyFactoryBean 들을 복사하여 등록해야하는 문제 (실수하기 쉽다.) 해결법 1. 빈 후처리기 (BeanPostProcessor) 를 이용한 자동 프록시 생성기 BeanPostProcessor 인터페이스를 구현 (DefaultAdvisorAutoProxyCreator) 해서 만드는 빈 후처리기 DefaultAdvisorAutoProxyCreator (Advisor를 이용한 자동 프록시 생성기) 를 이용해보자. 사용법 // Advice 등록 @Bean public TransactionAdvice transactionAdvice() { TransactionAdvice transactionAdvice = new TransactionAdvice(); .. 2021. 2. 10.
6.1. AOP 1. 메소드 추출 현재 upgradeLevels() 메소드는 트랜잭션으로 감싸져있다. 트랜잭션은 전, 후만 수행되면 되므로 로직 부분은 메소드 추출을 통해 바꿔보자 public void upgradeLevels() { TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try { List users = userDao.getAll(); for (User user : users) { if(canUpgradeLevel(user)) { upgradeLevel(user); } } transactionManager.commit(status); } catch (RuntimeException e).. 2021. 2. 2.
5. 서비스 추상화 1. 트랜잭션 경계설정 JDBC의 트랜잭션 하나의 커넥션을 가져와 사용하다가 닫는 사이에 이루어진다. 따라서 트랜잭션은 커넥션과 주기를 같이한다. Connection c = dataSource.getConnection(); c.setAutoCommit(false); // 트랜잭션 시작 try { PreparedStatement ps = c.prepareStatement("update user..."); c.commit(); // 트랜잭션 커밋 catch (Exception e) { c.rollback(); // 트랜잭션 롤백 } } 2. 트랜잭션 동기화 트랜잭션 동기화란? Connection 오브젝트를 특별한 저장소에 보관해 둔 뒤, 가져다 쓰는 방식이다. 트랜잭션 동기화 적용 TransactionSyn.. 2021. 2. 1.