[PostgreSQL] 1. PostgreSQL 내부 구조 알아보기 (feat. 쿼리 처리 과정)
·
DB
0. 들어가기 전저는 이전까지 DB 벤더 중에서 학습용으로 MySQL만 사용해왔었습니다.그러나 이번 실무에서 PostgreSQL을 사용하게 되면서 PostgreSQL에 대해서 알아보고자 글을 작성하게 되었습니다. PostgreSQL의 모든 내용을 다루기에는 너무나 방대한 양이기에 제가 궁금한 부분, 중요한 부분들만 다뤄보도록 하겠습니다.하나의 주제를 잡아서 주제별로 PostgreSQL의 공식문서를 보고 글을 작성해보겠습니다. 처음은 PostgreSQL에서 커넥션을 맺고 쿼리를 어떻게 처리하는지 PostgreSQL의 내부 구조를 간략하게 추상적으로 살펴보도록 하겠습니다.https://www.postgresql.org/docs/17/overview.html Chapter 50. Overview of Pos..
[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의 트랜잭션 격리 수준을 설정할 때 서비스의 동시성과 데이터 정합성 중 무엇이 중요한지, 얼마나 중요한지를 판단해보고 설정하는 것이 중..
[Spring] 테스트 시 DB 데이터 초기화 Trouble Shooting
·
Spring
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] 친구 테이블 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' 태그의 글 목록