DB 테이블 설계 시 자주 부딪히는 두 가지 고민: 매핑 테이블 vs 별도 엔티티, 공통 코드 vs 개별 코드
·
Database
테이블 설계에서 자주 고민하는 두 가지 포인트매핑 테이블을 얼마나 써야 하는가?코드 관리를 공통 코드로 묶을 것인가, 개별 테이블로 나눌 것인가?실제 프로젝트를 하다 보면 거의 빠짐없이 부딪히는 주제입니다. 저도 여러 차례 설계하면서 이 문제로 고민했고, 각 방식마다 장단점이 분명히 있음을 깨달았습니다. 이번 글에서는 그 고민을 정리해보려 합니다.1. 매핑 테이블 남발의 문제점매핑 테이블은 보통 N:M 관계를 풀어내기 위해 사용합니다. 예를 들어:사용자(User) ↔ 역할(Role)게시글(Post) ↔ 태그(Tag)이런 경우에는 매핑 테이블이 적합합니다. 하지만 모든 관계를 무조건 매핑 테이블로 풀어내다 보면 문제가 발생합니다.(1) 장점유연성 확보: 새로운 관계가 생겨도 테이블 추가 없이 매핑 테이블에..
인덱스(Index)와 실행계획(Explain Plan)
·
Database
인덱스(Index)와 실행계획(Explain Plan)데이터베이스 성능 튜닝에서 가장 먼저 배우고 가장 자주 쓰이는 개념이 바로 인덱스(Index) 와 실행계획(Explain Plan) 입니다.1. 인덱스(Index)란?사전에서 단어 찾기와 비슷하다책에서 특정 단어를 찾을 때 인덱스(찾아보기) 를 보면 바로 해당 페이지를 알 수 있죠.데이터베이스도 마찬가지로, 인덱스를 사용하면 특정 데이터를 더 빨리 찾을 수 있습니다.👉 즉, 인덱스는 데이터를 빠르게 조회하기 위한 자료구조입니다. 인덱스 없는 검색 (Full Table Scan)SELECT * FROM member WHERE name = '홍길동';name 컬럼에 인덱스가 없으면, DB는 member 테이블을 처음부터 끝까지 뒤져야 합니다. (Full..
DB Isolation Level
·
Database
DB Isolation Level개발을 하다 보면 동시에 여러 사용자가 DB에 접근하는 상황을 자주 만나게 됩니다. 예를 들어, 쇼핑몰에서 같은 상품을 동시에 결제하거나, 게시판에 동시에 댓글을 다는 경우가 그렇죠.이런 상황에서 문제가 생기지 않도록 도와주는 게 바로 트랜잭션(Transaction)이고, 그 안에서 중요한 역할을 하는 게 격리 수준(Isolation Level)입니다.트랜잭션과 격리(Isolation)란?트랜잭션(Transaction) : DB에서 하나의 작업 단위를 의미합니다.예: 은행 계좌 이체 → A 계좌에서 돈 빼기 → B 계좌에 돈 넣기 (이 전체가 하나의 트랜잭션)격리(Isolation) : 동시에 실행되는 여러 트랜잭션이 서로에게 영향을 주지 않도록 막는 것.예: 내가 은행에..
데이터베이스 락(Lock)
·
Database
DB Lock데이터베이스를 쓰다 보면 동시에 여러 사용자가 같은 데이터를 읽고 수정하는 상황이 생깁니다.이때 잘못하면 데이터가 꼬이거나 충돌할 수 있는데, 이런 문제를 막아주는 장치가 바로 Lock입니다.DB Lock이란?Lock은 말 그대로 데이터를 누군가 사용 중일 때 다른 사람이 건드리지 못하게 막는 장치입니다.쉽게 말해, 화장실 문에 걸어두는 “사용 중” 표시 같은 거예요.누가 먼저 들어가면, 다른 사람은 문이 열릴 때까지 기다려야 하죠.Lock의 종류DB에서는 상황에 맞게 여러 종류의 Lock을 제공합니다.1. 공유 락 (Shared Lock, S Lock)데이터를 읽을 때 걸리는 잠금여러 사용자가 동시에 읽을 수는 있지만, 쓰기는 불가능예: 여러 사람이 게시글을 읽을 수는 있지만, 누군가 수정..