일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 패캠강의후기
- 자바
- 코딩테스트
- 직장인인강
- 수강료0원챌린지
- 코딩자격증
- 직장인공부
- 30개프로젝트로배우는iOS앱개발withSwift초격차패키지Online.
- 자바스크립트
- 직정인자기계발
- 패스트캠퍼스
- 파이썬
- 오공완
- 패캠reactnative
- reactnative강의
- 환급챌린지
- 직장인자기계발
- 패스트캠퍼스후기
- 패캠인강후기
- 패캠
- 패캠챌린지
- fastcampus
- 코딩교육
- Today
- Total
라티의 작은 일기장
패스트캠퍼스 환급챌린지 5일차 미션 (2월 5일) : 10개 프로젝트로 시작하는 백엔드 웹개발 : 신입 개발자 취업 집중반 강의 후기 본문
패스트캠퍼스 환급챌린지 5일차 미션 (2월 5일) : 10개 프로젝트로 시작하는 백엔드 웹개발 : 신입 개발자 취업 집중반 강의 후기
코드라티 2025. 2. 5. 22:57본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
이번주는 진짜 유난히 추워서 출퇴근 때 에너지를 많이 뺏겼다... 휴.. 힘들지만 그래도 힘내서 계속 달려보자.
오늘은 데이터 일괄 처리와 트랜잭션에 관해 공부해보았다.
데이터 일괄 처리 자체는 여러 건의 데이터에 대해 SQL 쿼리를 실행하는 것을 의미하지만, 오늘 강의에서는 update() 쿼리에 대해 주로 다루어졌다. 그리고 이전에 공부했던 PreparedStatement를 활용한 쿼리 실행 방법에 대해서도 다루어져서 간단한 실습을 진행했다.
바로 이어서 트랜잭션에 대해 공부했다. (이쪽이 조금 더 재밌을 것 같았다)
트랜잭션은 쪼갤 수 없는 업무 처리의 최소 단위를 의미하고, API의 성능 지표로서 활용되는 TPS의 T가 이 트랜잭션이다.
트랜잭션은 어떤 처리가 일어났을 때 처리 과정을 유발하는 행위와, 그 처리로 인해 변경된 상태(결과)가 하나의 단위로 묶인다.
그래서 트랜잭션을 무조건 하나의 쿼리로 생각할 수 없고, 전체적인 처리과정 사이클에서 필요한 모든 쿼리가 하나의 트랜잭션에 묶여야한다.
트랜잭션은 처리결과의 성공과 실패에 따라 커밋, 롤백이라는 후속 과정을 거친다.
커밋은 트랜잭션 내 모든 작업이 성공했을때, 그 변경 사항을 DB에 영구적으로 반영하는 과정이고,
롤백은 트랜잭션 실행 중 오류가 발생하면 변경 사항을 취소하고 실행 이전의 상태로 복구하는 과정이다.
커밋과 롤백은 데이터 무결성을 유지하기 위한 핵심 매커니즘이다.
트랜잭션에는 원자성, 일관성, 격리성, 지속성의 4가지 성질이 있고, 이러한 성질들로 인해 복잡한 과정으로 변경되어야하는 데이터들은 조금 더 일관적으로, 안전하게 관리할 수 있게 된다.
스프링에서는 클래스 또는 메소드 레벨에 @Transactional 어노테이션을 활용해서 트랜잭션을 관리한다.
@Service
public class BankService {
@Autowired
private AccountRepository accountRepository;
@Transactional // 트랜잭션 시작
public void transferMoney(Long fromId, Long toId, BigDecimal amount) {
// 출금 계좌 조회
Account fromAccount = accountRepository.findById(fromId)
.orElseThrow(() -> new AccountNotFoundException("출금 계좌 없음"));
// 입금 계좌 조회
Account toAccount = accountRepository.findById(toId)
.orElseThrow(() -> new AccountNotFoundException("입금 계좌 없음"));
// 출금
fromAccount.withdraw(amount); // 잔액 부족 시 RuntimeException 발생
accountRepository.save(fromAccount);
// 입금
toAccount.deposit(amount);
accountRepository.save(toAccount);
}
}
가장 많은 예시로 활용되는 '은행 계좌 송금'을 위한 메소드를 구현하고, @Transactional 어노테이션을 할당한 예시를 보자.
이 경우 transferMoney()의 실행이 성공하면 모든 변경 사항이 자동으로 커밋되고, 중간에 Exception 등이 발생해서 실패하면 자동으로 롤백된다. 자동이라는 말을 듣고 딱 들었던 생각. '오 이거 AOP랑 비슷하다..?'
맞다. @Transactional 어노테이션도 AOP로 구현되어있어서, 이전에 공부했던 AOP 관련 어노테이션의 동작흐름과 매우 유사하게 트랜잭션과 관련된 기능을 지원한다. (원본 Bean을 기반으로 IoC 컨테이너에서 트랜잭션 기능을 지원하는 Proxy 객체를 런타임에 생성하고 원본 Bean을 대체)
학습 시작 인증
학습 종료 인증
첫 번째 클립 수강 인증
두 번째 클립 수강 인증
학습 인증