일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- cs 공부)준비
- 정렬 알고리즘(sort algorithm)
- 자료구조
- Java
- wil
- Til
- 자바
- css
- 프로그래머스
- 코딩문제
- 코딩
- GIT
- 메서드
- HTML
- CS
- Spring
- 코딩공부
- 99클럽
- 면접(java
- 회고
- 이진 탐색(binary search)
- 개발자 취업
- 코딩테스트 준비
- Grafana
- ArrayList
- github
- 배열
- Entity
- aop
- 항해99
- Today
- Total
hayu's 개발 일지
[TIL]240312 트랜잭션(transaction) 본문
트랜잭션(transaction)이란?
- 데이터 베이스 상에서 트랜잭션은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이면서 일관되고 밎을 수 있는 시스템을 의미한다.
트랜잭션의 특징
- 원자성 (Atomicity): 트랜잭션의 연산은 데이터베이스에 모두 반영되던지 아니면 반영되지 않아야한다. 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
- 일관성 (Consistency): 각 데이터 트랜잭션이 데이터 베이스를 일관성있는 상태에서 일관성있는 상태로 이동해야함을 의미한다. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야한다.
- 독립성 (Isolation): 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미한다. 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
-> 과부하로 인해 잘못된 트랜잭션이 발생하지 않아야 한다.
- 지속성 (Durability): 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 한다. 데이터 베이스 내의 데이터는 트랜잭션의 결과로만 변경되어야 하며 외부 영향에 의해 변경될 수 없어야 한다.
트랜잭션의 연산
- 커밋: 하나의 트랜잭션이 성공적으로 끝났으며, 데이터 베이스가 일관성이 있는 상태로 유지될 때 트랜잭션이 마무리되었다는 것을 알리기 위한 연산이다.
- 롤백: 트랜잭션의 처리가 비정상적으로 종료된 경우, 트랜잭션을 다시 시작하거나 부분적으로 연산한 경과를 취소시킨다.
@Transactional 이란?
- 스프링에서는 어노테이션 방식으로 트랜잭션 처리를 지원한다. @Transactional 을 선언적 트랜잭션이라고 하는데 @Transactional을 선언하여 사용한다.
- 클래스 또는 메서드 위에 @Transactional을 붙이면, 트랜잭션 기능이 적용된 프록시 객체가 생셩되며 트랜잭션 성공 여부에 따라 Commit 또는 Rollback 작업이 이루어진다.
+ 프록시(Proxy): 프록시는 '대신'이라는 뜻을 가지며 프로토콜에 있어서는 대리 응답에 사용하는 개념이다.
@Transactional 예시 코드
//판매 게시글 작성
@Transactional
public PostResponseDto createPost(PostRequestDto postRequestDto) {
Post post = new Post(postRequestDto); //DTO 를 받아 Entity 로 변환
Post postSave = postRepository.save(post); //데이터 베이스에 저장
PostResponseDto postResponseDto = new PostResponseDto(postSave); //다시 DTO 타입으로 변환
return postResponseDto; //반환
}
'프레임워크 > spring' 카테고리의 다른 글
[TIL]240314 Swagger (1) | 2024.03.14 |
---|---|
[TIL]240313 Builder Pattern (0) | 2024.03.13 |
[TIL]240308 트러블 슈팅: 로그인 성공 메세지 (0) | 2024.03.08 |
[TIL]240307 영속성 컨텍스트 (1) | 2024.03.07 |
[TIL]240304 스프링 MVC 와 Front Controller (0) | 2024.03.04 |