본문 바로가기

분류 전체보기72

[JPA] Fetch와 Fetch Join Fetch전략 fetch전략은 특정 엔티티를 조회할 때, 연관관계에 있는 다른 엔티티를 «언제» 불러올까에 대한 옵션입니다. User와 Team가 양방향 관계를 갖고 있는 경우 FetchType이 EAGER일 경우, Team를 조회한 «직후» User까지 조회하게 됩니다. FetchType이 LAZY일 경우, Team를 조회하고 «추후» Team를 통해 User를 사용하려하면 그제서야 User를 조회하는 쿼리를 통해 조회합니다. 하지만 FetchType이 EAGER일 경우, N+1 문제가 발생하게 되고 이 N+1의 문제를 해결하기 위해서 Fetch Join을 사용하게 됩니다. N+1 문제란? 연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의.. 2023. 9. 21.
인덱스 - 실습 인덱스 문법 CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name [index_type] ON tbl_name (key_part,...) [index_option] [algorithm_option | lock_option] ... key_part: {col_name [(length)] | (expr)} [ASC | DESC] index_option: { KEY_BLOCK_SIZE [=] value | index_type | WITH PARSER parser_name | COMMENT 'string' | {VISIBLE | INVISIBLE} | ENGINE_ATTRIBUTE [=] 'string' | SECONDARY_ENGINE_A.. 2023. 3. 6.
5장 문제 발생에 대비하기 5-1 빠른 실패 class CruiseControl { static final double SPEED_OF_LIGHT_KMH = 1079252850; static final double SPEED_LIMIT = SPEED_OF_LIGHT_KMH; private double targetSpeedKmh; void setTargetSpeedKmh(double speedKmh) { if (speedKmh < 0) { throw new IllegalArgumentException(); } else if (speedKmh SPEED_LIMIT) { throw new IllegalArgumentException(); } // 일반적인 경로 targetSpeedKmh = speedKmh; } }위의 코드 처럼 매개변.. 2023. 3. 6.
트랜잭션(Transaction) 트랜잭션(Transaction) 이란, 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻합니다. 데이터베이스에서 상태 변화를 시킨다는 것은 질의어(SQL)를 이용하여 데이터베이스에 접근하는 것을 의미합니다. SELECT INSERT DELETE UPDATE 단, 작업의 단위는 질의어 한 문장이 아니라 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정해집니다. 예시) 은행에서 A가 B에게 10,000원을 송금한다. A의 계좌에서 10,000원을 차감 : UPDATE 문을 사용해 A의 잔고를 변경 B의 계좌에 10,000원을 추가 : UPDATE 문을 사용해 B의 잔고를 변경 작업 단위 : 출금 UPDATE문 + 입금 UPDATE문 트랜잭션의 특징 원자성 (Atomicity) 일관성 (C.. 2023. 2. 26.
인덱스 인덱스란? 인덱스는 데이터를 빠르게 검색할 수 있게 해주는 객체 입니다. 컬럼을 오름차순 혹은 내림차순으로 정렬한 후 빠르게 찾을 수 있도록 도와줍니다. 인덱스 구조 Index는 논리적/물리적으로 테이블과 독립적입니다. 테이블은 컬럼에 데이터가 정렬되지 않고 입력된 순서대로 들어가지만, Index는 KEY 컬럼과 ROWID 컬럼 두개로 이루어져 있고 오름차순, 내림차순으로 정렬이 됩니다. Key : 인덱스를 생성하라고 지정한 컬럼의 값 MySQL에서 테이블 생성 시, 아래와 같은 3가지 파일이 생성됩니다. FRM : 테이블 구조 저장 파일 MYD : 실제 데이터 파일 MYI : Index 정보 파일 (Index 사용 시 생성) 사용자가 쿼리를 통해 Index를 사용하는 칼럼을 검색하게 되면, 이때 MYI.. 2023. 2. 26.
관계 데이터 모델 관계 데이터 모델의 정의 관계 데이터 모델은 테이터를 2차원 테이블 형태인 릴레이션으로 표현함 릴레이션에 대한 제약조건과 관계 연산을 위한 관계대수를 정의함 릴레이션 릴레이션: 행과 열로 구성된 테이블 속성(Attribute): 세로 값으로 열(Column)이라고도 한다. 튜플(Tuple): 가로 값으로 행(Row)이라고도 한다. 차수: 속성의 수 도메인: 하나의 속성이 가질 수 있는 값들의 범위 널: 정보의 부재를 나타내는 특수한 데이터 값 카디날리티: 튜플의 수 인스턴스: 정의된 스키마에 따라 테이블에 실제 저장된 데이터의 집합 스키마: 릴레이션이 어떻게 구성되는지, 어떤 정보를 담고 있는지에 대한 기본적인 구조를 정의(첫 행 헤더) 릴레이션의 특징 속성은 단일 값을 가진다 속성은 서로 다른 이름을 .. 2023. 2. 23.