[DB- MySQL] InnoDB의 구조와 특징
·
면접 준비/DB
InnoDB 스토리지 엔진 아키텍처MySQL에서 사용할 수 있는 아키텍처 중에 거의 유일하게 레코드 기반 잠금을 제공한다. 그 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다.InnoDB 주요 특징프라이머리 키에 의한 클러스터링모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다. 이 말은 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻이다.모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키 값을 논리적인 주소로 사용한다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이요한 레인지 스캔은 더욱 더 빨리 처리 될 수 있다.쿼리의 실행 계획에서 프라이머리 키는 기본적으로 다른 보조 인덱스에 비해 가중치가 높게 설정된다.오라클의 DBMS에서 사용하는 ..
[Java- Thread] 스레드 풀 포화 정책 이란?
·
면접 준비/Java
스레드란?Cpu Core 하나당 하나의 Thread를 실행시킬 수 있다. 하나의 프로세스 안에서 여러개의 쓰레드를 작업하여 업무를 분산시킬 수 있음 단순한 Thread 사용 과정 및 발생 가능한 문제점1 1. Java는 1:1 Threading-Model로 Thread를 생성한다.2. User Thread(Process Thread) 생성시 OS Thread(OS Thread)와 연결해야 한다.3. 즉 Thread를 새로 생성할때마다 OS Kernal과 통신이 필요하다.4. Thread는 생성비용이 많이 발생하는 작업이며 작업 요청이 들어올 때 마다 생성하게되면 최종 요청 처리 시간이 증가한다.단순한 Thread 사용 과정 및 발생 가능한 문제점 21. Process의 처리 속도보다 빠르게 요청이 쏟아지..
SubQuery와 Join 절 성능 분석
·
면접 준비/DB
면접에 나왔던 질문 중 Join과 SubQuery 중 Subquery를 사용했을 때 성능이 저하하는 경우는 어떤 상황인지 적는 문제가 나왔을 때 적잖이 당황했어서 Join , Subquery에 대한 개념과 성능을 비교해서 적어보려고 한다. Join- 두 개 이상의 테이블을 연결해 하나의 결과 집합을 만드는 방식- 일반적으로 행을 수평 결합(컬럼의 확장)SELECT ...FROM AJOIN B ON A.ID = B.A_ID Join의 종류- Inner Join양쪽 테이블 모두 조건을 만족하는 행만 선택- Left Join왼쪽 테이블은 모두, 오른쪽은 없으면 Null- Right Join오른쪽 테이블은 모두, 왼쪽은 없으면 Null- Full Outer Join양쪽 모두 보존, MySQL에서는 지원하지 않음..
NullObjectPattern이란?
·
면접 준비/Java
널오브젝트 패턴이란?객체가 존재하지 않을 때, 널을 전달하는 것이 아닌 아무것도 전달하지 않는 객체를 전달하는 기법이다.예시 코드public void doSomething(SomeObject object){ if(object == null){ throw new Exception(); }}obj.process();널 오브젝트의 장점과 단점여러 곳에서 계속해서 널 체크를 한다면 코드가 증가하고 복잡성이 증가한다. 널 오브젝트 패턴은 널 값을 아무런 행위를 하지 않는 객체로 만들어 체크 코드의 중복을 제거하고 간소화시킬 수 있다. 또한 스택 자료구조를 만들때 용량이 0이라면 ZerocapacityStack을 만들수도 있다.단점으로는 예외를 탐지하기 어려운 상황을 만들수 있다. 어떤 부분..
[DB] PhantomRead란?
·
면접 준비/DB
Phantom Read(팬텀 리드)란? 팬텀 리드는 같은 트랜잭션 내에서 동일한 조건으로 여러 번 데이터를 조회했을 때, 새로운 행이 추가되거나 삭제되어 결과가 달라지는 현상입니다. 즉, 트랜잭션이 실행되는 동안 다른 트랜잭션에 의해 새로운 데이터가 삽입되거나 삭제되어, 처음 조회한 결과와 이후 조회한 결과가 달라지는 문제입니다.📌 Phantom Read 예제 1️⃣ 문제 상황 1. A 트랜잭션이 WHERE 조건을 만족하는 데이터를 조회합니다. 2. B 트랜잭션이 새로운 데이터를 INSERT합니다. 3. A 트랜잭션이 동일한 조건으로 다시 조회하면, 처음 조회할 때 없던 데이터가 추가된 것을 확인할 수 있습니다. 4. 동일한 SELECT 쿼리를 실행했는데도 새로운 데이터가 추가되면서 결과가 변경됨 → ..
[DB / Transaction] 트랜잭션 고립 수준
·
면접 준비/DB
트랜잭션 격리 수준(Isolation Level) 트랜잭션 격리 수준(Isolation Level)은 하나의 트랜잭션이 다른 트랜잭션의 변경 사항을 볼 수 있는 정도를 정의하는 규칙입니다.즉, 데이터의 일관성을 유지하면서 동시성을 관리하는 방법을 결정하는 중요한 요소입니다. 1. 트랜잭션에서 발생할 수 있는 동시성 문제 트랜잭션이 동시에 실행될 때, 아래와 같은 문제가 발생할 수 있습니다.문제 유형설명Dirty Read (더티 리드)다른 트랜잭션이 커밋하지 않은 데이터를 읽는 문제Non-Repeatable Read (반복 불가능한 읽기)같은 데이터를 읽었을 때 값이 변경되는 문제Phantom Read (팬텀 리드)같은 조건으로 조회했을 때 새로운 행이 추가되거나 삭제되는 문제각 트랜잭션 격리 수준은 이러..