항해99 주특기 프로젝트 (5일차)

2024. 1. 17. 09:00· 항해99
목차
  1. ✔️ 동시성 이슈란?
  2. 🤔 RDBMS 동시성 제어
  3. 👍 참고 사이트

✔️ 동시성 이슈란?

동시성 뜻은 어떤 두 사건이 같은 시간에 일어나는 것을 이르는 말
예시) 특정 웹사이트에 100명이 동시에 버튼을 눌렀을 때 100번 DB의 입력이나 수정이 될텐데 누락되는 이슈
동시성 제어로 누락이 안되게 한다.

🤔 RDBMS 동시성 제어

1. 낙관적 락

  • 어플리케이션 레벨에서 제어 (ORM)
  • JPA에서 @Transaction에서 기본적으로 작동되는 락
  • 여러 트랜잭션이 데이터를 접근 할 때, 충돌을 방지하기 위해 일단 데이터를 읽고 트랜잭션이 커밋하기 전에 충돌을 확인
    충돌이 발생할 경우에 롤백하고 재시도
  • 실제 사용시에는 Entity에 Version 어노테이션을 사용한다.
  • 용도: 충돌이 많지 않고 수정시에 사용한다.
@Entity
@Getter
@Table(name = "cards")
@AllArgsConstructor
@NoArgsConstructor
@DynamicUpdate
public class Card {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column
	private Long id;

	@ManyToOne
	@JoinColumn(name = "users_id", nullable = false)
	private User users;

	@ManyToOne
	@JoinColumn(name = "columns_id", nullable = false)
	private Columns columns;

	@Column(nullable = false)
	private String cardName;

	@Column
	private String cardDescription;

	@Column
	private String cardColor;

	@Column
	private Integer cardOrder;

	@Column
	private LocalDate deadLine;

	@Column
	private String url;

	@Column
	private String worker;

	@Version
	private Integer version;
}

 

2. 비관적 락

  • 데이터베이스 레벨에서 제어 (RDBMS)
  • 트랜잭션이 데이터에 액세스할 때 해당 데이터를 잠금 처리하여 다른 트랜잭션이 동시에 수정할 수 없도록 하는 방식
  • 실제 사용시에는 repostiory의 메소드에 Lock을 걸어준다
  • 용도: 수정, 조회 가능
  • 데드락 (교착 상태)
    • 많은 사용자가 동시에 할 수록 데드락이 가능성이 높아진다.
    • 방지 할려면 트랙잭션 짧게 유지하고 락을 최소한 사용 실행 순서를 일관되게 관리해야한다.

2-1. 공유 락(읽기 락)

  • 여러 트랜잭션이 읽기는 가능 하지만 수정은 안됨
  • 다수의 트랜잭션이 동시에 읽을 때 사용, 수정은 안됨
  • 변경중인 리소스를 동시에 읽을 수는 없다.
public interface CardRepository extends JpaRepository<Card, Long> {
	@Lock(LockModeType.PESSIMISTIC_READ)
	List<Card> findAllByColumnsId(Long ColumnsId);
}

 

2-2. 베타 락(쓰기 락)

  • 트랜잭션이 데이터를 수정 할 때 다른 트랜잭션이 읽거나 수정하지 못하게 배타적으로 잠금 처리
  • 트랜잭션이 완료 될때까지 다른 트랜잭션이 데이터를 읽거나 쓰기가 안됨
public interface CardRepository extends JpaRepository<Card, Long> {
	@Lock(LockModeType.PESSIMISTIC_WRITE)
	List<Card> findAllByColumnsId(Long ColumnsId);
}

👍 참고 사이트

https://wookjongbackend.tistory.com/39

 

트랜잭션의 개념과 락(Lock)과 동시성에 대해 알아보자!

트랜잭션이란?? 트랜잭션이란, 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미합니다. 주로 UPDATE, INSERT, DELETE와 같은 데이터베

wookjongbackend.tistory.com

https://jokerkwu.tistory.com/125

 

[ 기술면접 / 데이터베이스 ] 동시성 제어( Concurrency Control )

동시성 제어( Concurrency Control ) 란? 동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하는 기법이다. 동시성 제어의 정의 다중 사용자 환경

jokerkwu.tistory.com

 

저작자표시 (새창열림)

'항해99' 카테고리의 다른 글

항해99 주특기 프로젝트 (7일차)  (0) 2024.01.19
항해99 주특기 프로젝트 (6일차)  (0) 2024.01.18
항해99 주특기 프로젝트 (4일차)  (0) 2024.01.17
항해99 주특기 프로젝트 (3일차)  (0) 2024.01.15
항해99 주특기 프로젝트 (2일차)  (0) 2024.01.13
  1. ✔️ 동시성 이슈란?
  2. 🤔 RDBMS 동시성 제어
  3. 👍 참고 사이트
'항해99' 카테고리의 다른 글
  • 항해99 주특기 프로젝트 (7일차)
  • 항해99 주특기 프로젝트 (6일차)
  • 항해99 주특기 프로젝트 (4일차)
  • 항해99 주특기 프로젝트 (3일차)
blablax5
blablax5
웹 백엔드취준생 입니다.
blablax5
blablax5
blablax5
전체
오늘
어제
  • 분류 전체보기 (141)
    • 개발 (39)
      • 트러블 슈팅 (25)
      • 서버 & DB (5)
      • 스프링 & 자바 (3)
      • 알고리즘 (6)
    • 스터디 (27)
      • AWS SAA (23)
      • 쉽게 배우는 운영체제 (3)
      • AWS Builders 온라인 시리즈 (1)
    • 학습부채 (0)
    • 항해99 (70)
    • 횡설수설 (3)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • SAA
  • AWS

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
blablax5
항해99 주특기 프로젝트 (5일차)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.