트랜잭션 (@Transactional)
트랜젝션이란, 논리적으로 쪼갤 수 없는 업무 단위로, 하나의 업무를 묶어주는 역할을 한다.
하나에 메서드에 여러 기능이 들어가있거나, 하나의 단위로 실행되어야 하는 경우 메서드 위에 @Transactional 어노테이션을 선언하면 하나의 단위로 묶어 사용할 수 있다.
트렌젝션은 별도의 설정을 하지 않으면 기본 설정이 되지만, 별도의 설정을 추가로 할 수 있다.
rollbackFor = Exception.class : 모든 Exception에 대해서 롤백 수행noRollbackFor = SQLSyntaxErrorException.class : 해당 Exception 에 대해서는 롤백을 수행하지 않는다. (잘 사용하지 않음)isolation : 격리 수준isolation = Isolation.READ_COMMITTED(디폴트와 동일) : 내가 커밋한 데이터만 다른 사용자가 볼 수 있도록 한다.(기본)isolation = solation.READ_UNCOMMITTED : 내가 커밋하지 않은 데이터도 다른 사용자가 볼 수 있도록 한다.isolation = Isolation.REPEATABLE_READ : 조회중인 데이터는 UPDATE 하지 못하도록 한다. (누가 보고있으면 데이터 건들지 말아라) *굉장히 중요한 데이터에 사용isolation = Isolation.SERIALIZABLE : 누군가가 커밋할 때까지 누구도 CRUD 할 수 없다.❌ 트랜젝션을 해주면 try-catch 를 했을 땐 rollback이 먹히지 않기 때문에 수동으로 처리해줘야 한다.