DB

DB

[DB] DB Lock이란? (feat. Lock 종류, 블로킹, 데드락)

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의 트랜잭션 격리 수준을 설정할 때 서비스의 동시성과 데이터 정합성 중 무엇이 중요한지, 얼마나 중요한지를 판단해보고 설정하는 것이 중..

Spring

[Spring] 테스트 시 DB 데이터 초기화 Trouble Shooting

0. 들어가기 전 이번에 테스트를 만들다가, @Sql문으로 초기 스키마와 데이터를 넣게 되었다. 그런데 테스트를 실행해보니 중복 데이터가 있다는 오류가 발생하게 됐다. 결론적으로, main 디렉토리 아래에 있는 초기화 sql을 실행하고 나서, @Sql의 초기 스키마와 데이터 sql을 실행해서 발생한 문제였다. Trouble Shooting 과정을 기록하고자 한다! 1. 문제 상황 기존의 sql 파일 구조는 위와 같았다. src/main/resources 아래에 프로덕션용 schema.sql, data.sql이 존재했고, src/test/resources 아래에 테스트용 test-schema.sql, test-data.sql이 존재했다. 이 상황에서 아래와 같은 테스트를 실행하니 오류가 발생했다. @Jd..

DB

[DB] 친구 테이블 ERD 설계, 친구 목록 조회 기능 구현(Querydsl 셀프 조인)

처음 프로젝트 진행 시에 친구 테이블을 어떻게 설계해야 할지 감이 안 잡혔었다. 생각해보고, 구글링으로 여러 사례를 참고해서 아래와 같이 친구 테이블 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가지 컬..

UMC - 2nd Server/UMC - 2nd Server 강의 정리

UMC 2nd Server - 5th Study : 데이터베이스 실전 (쿼리 설계)

AQueryTool 사용 새로운 ERD 생성 설정 변경 ‘논리’ 들어간 것 체크 해제(테이블 논리모델 이름, 컬럼 논리 이름) 테이블 주석, 컬럼 순서, 컬럼 기본값, 컬럼 주석 체크 SQL 생성시 FK 무시 체크 테이블 생성 테이블 이름은 파스칼 케이스 방식으로(첫 글자와 중간 문자가 대문자 - PasalCase) 1. 컬럼 생성 - 컬럼 명은 카밀 케이스 방식으로(첫 글자는 소문자, 중간 문자는 대문자 - camelCase) - PK : Primary Key - 테이블을 구분할 수 있는 키, 테이블의 대표값 - AI : Auto Increment - 데이터 생성 시마다 1씩 추가해서 생성해주는 기능 - PK는 중복되지 않아야하므로 AI와 함께 써서 중복을 방지한다. - Null : Null 값 허용 ..

UMC - 2nd Server/UMC - 2nd Server 강의 정리

UMC 2nd Server - 4th Study : 데이터베이스 이론 및 설계 (RDBMS, RDS)

RDBMS 이론 및 설계 실습 RDBMS 백엔드 언어가 DBMS에게 데이터를 요청하는 방법 : “쿼리” DB가 이해할 수 있는 언어 : Structured Query Language, SQL SQL로 DB에게 요청한다. RDBMS : Related DBMS - 관계형 데이터베이스 데이터끼리 관계를 가진다. 예시) 출석부 / 성적부 설계 출석부 이름 학과 학번 연락처 성적부 이름 학과 학번 연락처 성적 수강과목 👉 출석부에는 성적부와 중복되는 정보 이름 / 학과 / 학번 / 연락처 가 존재한다. 👉 이렇게 중복되는 정보를 줄이기 위해 이름, 학과, 연락처를 빼고, 학번만 남겨 놓자. 이때 학번으로 출석부를 접근하여 나머지 이름, 학과, 연락처의 정보를 얻을 수 있다. 💡 이것처럼, 중복되는 정보를 대체해서..

Mu:ther 추천곡 Project/API 설계

날씨 버튼 좋아요 기능 API (1) - DB 설계 (MongoDB)

DB 설계 : 좋아요를 누르면 db에 없다면(find) 그 곡을 저장(insert)하고 like 수 +1(update) db에 있다면 db에서 그 곡을 찾아서 like 수 +1(update) from pymongo import MongoClient client = MongoClient('localhost', 27017) db = client.dbUser user = db.users.find_one({'name':'bobby'}) print(user) 👉 name이 bobby인 데이터가 없다면 None 출력 ※ 데이터 insert 시 나중에 like 수를 +1하므로 문자열로 저장하면 안된다. {'Sunny' : '0'} (X) {'Sunny' : 0} (O) # 사용자가 버튼을 누른 곡 이름 : title..

BE_성하
'DB' 태그의 글 목록