본문 바로가기

반응형

Database

(10)
[DB] 데이터 스캔방식과 인덱스 - MySQL 예제 백엔드 개발을 하다보면 성능에 대해서 고민을 하게된다. 대표적으로 비즈니스 로직의 시간복잡도, 외부 서비스들과의 통신, 그리고 DB 쿼리의 성능 등이 있을 것이다. 오늘 이 글에서는 DB 쿼리의 성능 최적화, SQL 튜닝의 대표적인 방법인 인덱스에 대해서 정리해 보려고 한다. ORM 을 많이 사용하다보니 기반이 되는 SQL 과 그 최적화에 대해서 소홀했던 부분이 있어서 기존에 알고있던 인덱스에 대한 정보들을 정리해서 작성해보고자 한다.1. 인덱스인덱스는 이름 그대로 원하는 데이터를 빠르게 찾기 위한 자료구조이다. 인덱스로 설정한 데이터들을 실제 데이터와 따로 보관 및 관리하여 테이블 전체를 스캔하지 않고도 데이터를 찾을 수 있도록 한다. 기본적으로 B-tree 구조로 구성되어 있으며, leaf node ..
[MySQL] EXPLAIN 최근에 통계 관련 기능을 개발하기 위해 쿼리의 성능을 확인해가며 개발을 진행했다. 이때는 ORM 을 사용했기 때문에 프레임워크의 로깅 기능을 통해서 ORM 으로 작성한 쿼리에서 실제 발생하는 SQL 쿼리를 확인하면서 개발을 했다. 이번에는 한번 더 나아가서 SQL 쿼리가 실제 DB 에서 수행될 때 어떻게 수행되는지를 확인해보고자 한다. SQL 의 실행계획을 보기 위해서는 EXPLAIN 명령어를 사용하면 된다. 이 글에서는 EXPLAIN 에 대해서 설명하고 EXPLAIN 사용 방법과 결과를 해석하는 방법 등에 대해서 정리한다.1. EXPLAINEXPLAIN 은 MySQL 에서 쿼리를 실제 실행하기 전 MySQL 이 어떤 방식으로 작업을 실행할지 보여주는 도구이다. 쿼리의 성능 최적화를 위해서 많이 사용되며..
[SQLite] SQLite 설명 및 예제 프로젝트를 진행하면서 DB 를 사용해야 하는 상황이 발생했다. 프로젝트의 프로토타이핑 과정이었기 때문에 다양한 기능과 성능보다는 간단한 설정과 빠르게 적용할 수 있는 DB 가 필요했고 SQLite 를 사용하기로 했다. SQLite 는 File DB 로 가볍고 따로 DB 서버를 설정할 필요가 없고 간편하게 사용할 수 있다. 이 글에서는 SQLite 에 대한 소개와 간단한 사용 방법을 정리하려고 한다. 1. SQLite 란? SQLite 는 가볍고, 빠르며, 독립적인 SQL Database 엔진을 구현하는 C 언어 라이브러리이다.SQLite 는 내장형 SQL DB 엔진으로 MySQL 이나 PostgreSQL 과 같은 기존의 RDBMS 와 달리 서버리스이며 실행을 위해 별도의 설치나 설정이 필요하지 않다. 대..
[MongoDB] Aggregation MongoDB 를 사용하여 쿼리를 하던 중에 쿼리 최적화를 위해서 관련있는 여러 컬렉션간의 조인에 대한 필요성이 발생했다. 그런데 MongoDB 는 NoSQL 데이터베이스이기 때문에 RDB 와 다르게 테이블 개념이 아니고 FK 등을 통해 테이블 간의 관계가 정의되어 있지 않아서 어떻게 조인을 하는지 검색해보았다. 검색 중에 MongoDB 문서에서 Aggregation 에 대한 정보를 찾았고 오늘은 이에 대해서 정리해보려 한다.1. AggregationAggregation 은 여러 document 들을 연산하여 나온 결과물을 반환하는 연산이다. RDB 에서 조인을 통해 여러 테이블의 데이터를 합쳐서 반환하는 것처럼 aggregation 도 여러 document 의 값들을 조건에 맞게 묶어서 그룹화한 결과를..
[Spring] Database 연동 - 4 (JPA) 1. JPA JPA 는 Java Persistence API 의 줄임말로 Java 표준 ORM 인터페이스이다. ORM 은 Object Relational Mapping 의 줄임말로 객체와 RDB 를 매핑하는 기술이다. 객체와 DB 를 매핑하면서 SQL 쿼리 중심이 아닌 객체 중심의 코딩을 할 수 있도록 한다. JPA 는 Java 표준 ORM 인터페이스로 JPA 의 기능을 사용하면 기존의 반복적인 코드는 물론이고 기본적인 SQL 쿼리를 자동으로 생성해주어 코드를 간결하게 유지할 수 있다. 또한 JPA 를 사용하여 데이터를 객체와 매핑하게 되면, SQL 과 데이터 중심의 설계에서 Java 언어와 객체 중심의 설계로 전환할 수 있다. 2. 환경 설정 JPA 를 사용하기 위해서는 application 의 라이브..
[SpringBoot] Database 연동 - 3 (JdbcTemplate) 1. JdbcTemplate Spring 에는 Database 를 사용할 수 있는 방법으로 JdbcTemplate 이 있다. 순수 JDBC 에서는 DB Connection 을 얻고 해제하는 등의 DB 작업을 위해 반복되는 코드들이 있다. JdbcTemplate 은 이러한 반복 코드들을 제거할 수 있도록 되어서 사용에 편리하고 자원을 얻고 해제하는 등의 코드를 작성하면서 발생할 수 있는 문제들을 피할 수 있도록 해준다. 물론 SQL 쿼리문은 직접 작성하여야 한다. JdbcTemplate 은 사용할 때 설정은 앞서 JDBC 를 사용하기 위해서 했던 Spring Datasource 등의 설정과 동일하게 수행하면 된다. 2. 구현 JdbcTemplate 으로 구현 시에는 기존의 JDBC 와는 다르게 Connec..
[SpringBoot] Database 연동 - 2 (JDBC) 1. JDBC - JDBC 란? JDBC 는 Java Database Connectivity 의 줄임말로, DB 에 접근할 수 있도록 자바에서 제공하는 자바 표준 SQL 인터페이스 API 이다. 다양한 종류의 RDBMS 에 접속하고 SQL 문을 수행하여 처리하는 작업을 할 때 사용된다. JDBC 를 통한 자바 애플리케이션과 DB 의 구조는 다음과 같다. 자바 애플리케이션 - JDBC API - JDBC Driver - Database JDBC 는 인터페이스 API 이기 때문에, 각 DBMS 에 맞는 JDBC 드라이버를 설정해주어야 한다. JDBC 드라이버는 실제 DBMS 와 통신을 수행하는 자바 클래스로 jar 파일로 제공됩니다. JDBC 드라이버는 DBMS url 과 계정 정보 등을 입력받아서 DB 연..
[DB] 트랜잭션 격리수준 (Transaction Isolation Level) 1. 트랜잭션 격리 수준 (transaction isolation level) 트랜잭션의 격리 수준이란 동시에 여러 건의 트랜잭션이 수행되는 경우, 트랜잭션들이 서로 얼마나 고립되어 있는지를 나타내는 정도이다. 간단하게 특정 트랜잭션이 다른 트랜잭션으로 인해 변경된 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것이다. 격리 수준은 크게 아래의 4가지로 구분된다. - READ UNCOMMITTED - READ COMMITTED - REPEATABLE READ - SERIALIZABLE 아래로 내려갈수록 고립 정도가 높아지고, 성능이 떨어진다. 일반적인 온라인 서비스에서는 READ COMMITED 나 REPEATABLE READ 를 사용한다. 2. READ UNCOMMITED READ UNCOMMITED..

반응형