[DB] DB Lock이란? (feat. Lock 종류, 블로킹, 데드락)
·
DB
0. 락(Lock)이란? 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 하나의 커넥션만 변경할 수 있게 해주는 기능 동시성을 제어하기 위한 기능 저는 처음에 DB 락을 접했을 때, 락을 이해할 때 ‘락을 획득한다’라는 의미를 ‘외부에서 잠금을 건다.’ 라는 의미로 이해해서 조금 힘들었습니다. 외부에서 잠금을 거는 것이 아니라, ‘내가 화장실 칸을 사용하기 위해 화장실 칸을 직접 들어가서 내가 잠그는 것’의 관점으로 이해하니 더 쉽게 이해할 수 있었습니다. 1. 락의 종류 락의 종류는 크게 다음과 같은 2가지 종류로 나뉩니다. 공유 Lock (Shared Lock, Read Lock, S-Lock) 배타 Lock (Exclusive Lock, Write Lock, X-Lock) 1-1. 공유 ..
[DB] 트랜잭션 격리 수준 알아보기
·
DB
1. Transaction 격리 수준 (isolation level) 트랜잭션의 격리 수준이란, 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다. - Real MySql 8.0 트랜잭션 격리 수준의 정의는 위와 같습니다. 그렇다면 해당 트랜잭션 격리 수준을 어떠한 기준으로, 무엇을 설정해야 할까요? 결론부터 말하면, 트랜잭션 격리 수준과 관련된 키워드는 '동시성'과 '데이터 정합성'입니다. 따라서 격리 수준을 어떻게 설정하는지에 따라서 동시성과 데이터 정합성이 달라지기 때문에 DB의 트랜잭션 격리 수준을 설정할 때 서비스의 동시성과 데이터 정합성 중 무엇이 중요한지, 얼마나 중요한지를 판단해보고 설정하는 것이 중..
[DB] 트랜잭션이란? (feat. ACID 특성)
·
DB
🎯 1. 트랜잭션이란? 💡 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위이다. 👉DB의 상태를 변경시킨다는 것은 INSERT, UPDATE, DELETE, SELECT SQL문을 실행하는 것이다! 이때, 작업 단위는 하나의 SQL문이 아닐 수 있다. ⚙️ 작업 단위 예시 사용자가 계좌에 입금을 진행한 후에 입금 후 금액을 보는 예시를 생각해보자. 설계 시 사용자가 금액을 입금하는 UPDATE -> 금액 조회 SELECT 문으로 설계할 것이다. 이때, 작업 단위는 금액을 입금하는 UPDATE -> 금액 조회 SELECT 문이다. 따라서 2개의 SQL문이 하나의 트랜잭션으로 구성되는 것이다. 이처럼 하나의 SQL이 아닌 여러 SQL문이 하나의 트랜잭션으로 구성될 수 있다. 🎯 2. 트랜잭션의 성질..
[DB] 친구 테이블 ERD 설계, 친구 목록 조회 기능 구현(Querydsl 셀프 조인)
·
DB
처음 프로젝트 진행 시에 친구 테이블을 어떻게 설계해야 할지 감이 안 잡혔었다. 생각해보고, 구글링으로 여러 사례를 참고해서 아래와 같이 친구 테이블 ERD를 설계하였다. 🎯 Friend 테이블 중심 Column friend 테이블에서 중요하게 봐야할 Column은 'from_user_id'와 'to_user_id', 'are_we_friend' 이다. 나머지 컬럼들은 friend User의 정보들이라서 크게 고민해야 할 것은 없다. 1. from_user_id : 친구 요청을 보낸 User의 id 2. to_user_id : 친구 요청을 받은 User의 id (FK로, User 테이블의 PK) 3. are_we_friend : 서로 친구인지 판단하는 Column 따라서 앞으로 설명 시에 위의 3가지 컬..
BE_성하
'DB' 카테고리의 글 목록 (2 Page)