이전에 step1에서 트랜잭션 + AOP 탄생에 대해 간략한 큰 그림을 그려보았다. 그 과정에서 어떤 노력들이 있었는지 확인해보려고 한다. 필자는 토비의 스프링 3.1을 참고하여 나름대로 해석하여 정리한 내용이다. public void upgradeLevels() throws Exception { TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition()); try { List users = userDao.getAll(); for (User user : users){ if(canUpgradeLevel(user)){ upgradeLevel(user); } } this.transactio..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bwQdUr/btsbQaK3TD5/anED7CarjslWq6C2AqdtBK/img.png)
트랜잭션은 데이터베이스 시스템에서 데이터를 일관성있게 처리하기 위한 단위 작업 단위이다. 데이터베이스에 대한 변경 작업은 여러 개의 SQL 문으로 이루어져 있을 수 있는데, 이러한 SQL 문을 하나의 논리적인 작업으로 묶어서 처리하는 것이다. 트랜잭션은 아래와 같은 네가지 특징을 가진다. 원자성(Atomicity): 트랜잭션에 포함된 작업은 전부 성공하거나 전부 실패해야 한다. 즉, 트랜잭션 내의 모든 작업은 한 개의 논리적인 단위로 간주되어야 하며, 어떤 작업이라도 실패하면 트랜잭션 전체가 실패해야 한다. 일관성(Consistency): 트랜잭션은 데이터베이스에 일관성 있는 상태를 유지해야 한다. 즉, 트랜잭션을 수행하기 전과 후의 데이터베이스 상태가 일관성 있어야 한다. 격리성(Isolation): ..