RDB와 커서 기반 페이징을 사용하는 이유
·
Database
본 글은 하루 매일메일의 “RDB에서 페이징 쿼리의 필요성을 설명해 주세요”를 읽고 심화학습하여 정리한 내용입니다. 매일메일 - 기술 면접 질문 구독 서비스기술 면접 질문을 매일매일 메일로 보내드릴게요!www.maeil-mail.kr RDB란?RDB의 정의RDB는 Relational Database의 약자이다. 관계형 데이터베이스라고도 한다. 이는 데이터를 table형태로 저장하고, 테이블 간의 관계를 column을 통하여 정의하는 데이터베이스이다. 오늘날 대부분의 대규모 서비스에서 사용되고 있는 데이터베이스 구조이다.RDB에서 가장 중요한 것은 테이블과 그 관계라고 생각한다. RDB에서는 하나의 테이블이 하나의 entity를 표현하는 구조를 갖는다. 사용자 userEntity → users 테이블, p..
어떻게 Phantom Read를 방지할 것인가!
·
Database
지난 cloud computing 수업에서 phantom read를 다룬 적이 있다.오늘은 phantom read에 대해서 알아보고, 이를 어떻게 방지할 것인지 알아보고자 한다.Phantom read란?!Phantom Read는 데이터베이스의 트랜잭션 격리 수준에 따라 발생할 수 있는 동시성 제어 이슈 중 하나다.두번의 동일한 query 사이에서 다른 트랜젝션에 의해 행이 INSERT되거나 삭제되어 기존에 없던 데이터가 생기거나 사라지는 현상이다.코드로 살펴보면 다음과 같다.INSERT INTO employees (salary) VALUES (1000), (1500), (2000);-- Transaction A 시작START TRANSACTION;SELECT COUNT(*) AS cnt_before FR..
QueryDSL의 HQL injection 방지하기
·
Database
우리는 데이터 접근 기술로서 QueryDSL을 이용한다. QueryDSL이란?QueryDSL은 자바 기반의 HQL(Hibernate query language)빌더 라이브러리 이며, HQL은 Hibernate 프레임워크에서 제공하는 쿼리 언어이다. HQL은 SQL과 비슷한 문법을 가지지만, SQL과 달리 데이터베이스 테이블이 아니라 Hibernate Entity를 대상으로 한다. 흔히 QueryDSL의 비교 대상이 되는 기술은 JPQL이다.JPQL은 query를 문자열로 직접 작성하고,// JPQL 문자열 정의String jpql = "SELECT u FROM User u WHERE u.age >= :age ORDER BY u.name ASC";TypedQuery query = entityManager...