본문 바로가기

728x90
반응형

공부 정리/DB

(46)
Connection Pool & DataSource 개요 기존에 커넥션을 얻기 위해 JDBC 구현체를 DriverManager로 찾던 전통적인 방법의 한계점과 대안을 알아보겠습니다. Connection Pool과 DataSource 중심 코드의 구성과 성능 개선을 확인해보겠습니다 전통적 Jdbc DriverManger의 문제점 기존 DriverManager는 커넥션이 필요할 때마다 새롭게 생성하고 작업이 끝나면 해제하는 작업을 반복했습니다. 커넥션을 연결하고 종료하는 작업이 가볍지 않기 때문에 매 요청마다 커넥션을 만드는 것은 리소스가 많이 필요하고 시간이 걸리는 작업이라는 한계가 있었습니다. 그래서 커넥션 풀이라는 기술이 등장했습니다. 커넥션 풀(Connection pool) 커넥션 풀이란, 미리 커넥션을 풀에 담아두어서 커넥션이 필요할때마다 꺼내어주는..
JDBC 의 역사 개요 JDBC의 역사를 알아보겠습니다. 일반적인 애플리케이션 - DB 사용법 아래 그림처럼, 애플리케이션 서버는 총 3가지 과정으로 DB와 연동하여 원하는 데이터를 조회, 추가, 수정, 삭제 등을 합니다. 첫째로 TCP/IP 커넥션 연결, 두번째로 SQL 전달, 세번째로 결과 응답입니다. 문제점 1. DB 종류에 따라 데이터베이스 사용 코드가 달라집니다.(MySQL, Oracle 등등) 2. 개발자는 직접 커넥션 연결, SQL 전달, 결과 응답 코드 작성을 데이터베이스마다 학습해야 합니다. JDBC 표준 인터페이스 JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API입니다. JDBC는 데이터베이스에서 자료를 쿼리 하거나 업데이트하는 방법을 제공합니다 - 나무위키 JDBC 표준 인터페이스 ..
DB의 인덱스와 B-tree, B+tree 개요 DB의 인덱스 개념이 궁금해 정리했습니다. MySql은 인덱스의 구조도 같이 찾았습니다. 인덱스는 B-tree, B+tree 2가지 구현방식이 있으며, 결론적으로 B+tree 방식이 사용됩니다. 각 특징은 무엇이고 차이점은 무엇인지 확인해 봅시다. 학습 목표 B-tree와 B+tree의 특징을 알 수 있다 MySql에서 왜 B+tree가 사용되는지 알 수 있다 B-tree 이진트리는 일반적으로 하나의 노드에 하나의 값, 최대 2개의 자식으로 구성되어 있습니다. 하지만 B-tree는 하나의 노드에 여러 개의 값을 가질 수 있고 최대 자식이 2개 이상 일 수 있습니다 아래 사진처럼, B-tree는 3개의 값, 4개의 자식이 있을 수 있습니다. 하나의 노드의 최대 자식수가 3개이면 3차 B-tree, 4..
낙관적 잠금과 비관적 잠금으로 동시성 해결하기 개요 동시성 문제를 이전 시간에 정리했는데, 결국 동시성 문제를 어떻게 해결할 것인가가 다음 관심사입니다. 따라서, 이번 시간에는 동시성 문제를 해결하기 위한 데이터베이스의 잠금 모델 2가지 낙관적 잠금과 비관적 잠금을 알아보려고 합니다. 낙관적 잠금은 상황을 낙관적으로, 비관적 잠금은 비관적으로 본다고 접근하면 됩니다. 비관적 잠금(Pessimistic Lock) 비관적 잠금은 자원 경쟁을 비관적으로 보기 때문에, 다중 트랜잭션이 데이터를 동시에 수정할 것이라고 가정합니다. 따라서 하나의 트랜잭션이 데이터를 읽는 시점에서 락(Lock)을 걸고, 조회 또는 갱신 처리가 완료될 때까지 유지합니다. 조회 때 락 잠금을 획득하는 방법은 대표적으로 SELECT.. FOR UPDATE 입니다. SELECT...F..
트랜잭션 격리 수준 개요 회사 게시판에서 db 트랜잭션 관련하여 재미있는 글을 봤습니다. 예약 시스템을 만드는데 select로 채번 순서를 가져오고 insert를 하다 보니 중복되는 예약번호가 나오는 문제가 있었고 어떻게 해결했는지를 적은 글이었습니다. 다중 쓰레드의 동시성으로 발생한 문제이며, select 시 동시성 문제를 해결해야 했습니다. 그러면서 트랜잭션 격리 레벨이 궁금해져서 찾아보게 되었습니다. 트랜잭션이란? 트랜잭션이란, 데이터베이스 작업의 논리적 단위입니다. 삽입, 수정, 삭제가 성공적으로 끝나 영구적으로 반영을 할 때 commit을 사용합니다. 삽입, 수정, 삭제의 변경 내용을 취소하고 복구해야 한다면 rollback을 사용합니다. DBMS는 잠금(Lock) 기능을 사용하며 다른 트랜잭션의 접근을 제어하여 ..
고급매핑 - 상속관계 *JPA에서 상속관계 구현방식은? 1. 관계형 데이터베이스는 상속 관계가 없다. 2. "슈퍼타입 서브타입 관계"라는 모델링 기법이 "객체 상속"과 유사하다. 4. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑한다. * 슈퍼타입 서브타입 논리 모델을 물리 모델로 구현하는 방법 1. 각각 테이블로 변환 (조인전략) @Entity @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn(name = "DTYPE") public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; } @Disc..
JDBC란? * JDBC JDBC는 관계 데이터베이스에 접근하는 자바 API입니다. 클라이언트가 데이터베이스에 접근하는 방법을 정의한 어플리케이션 프로그래밍 API입니다. 자바와 데이터베이스 연결을 위해 사용되는 데이터 접근 기술입니다. JDBC는 데이터베이스와 커넥션을 만들고, SQL 작업을 위한 인터페이스를 제공하고, 결과를 처리합니다, JDBC API는 데이터베이스와 연결하기 위해 JDBC 드라이버를 사용합니다. JDBC Driver는 아래 4가지가 있습니다. JDBC-ODBC Bridge Driver Native API Driver (partially java driver) Network Protocol Driver (fully java driver) Thin Driver (fully java driver) ..
HikariCP란? * 개요 DataSource를 여러개 만드는 과정에서, connection Pool로 Hikari를 이용하는 예제를 보았습니다. Hikari는 성능이 좋아서 쓴다고 생각은 했지만, 어느정도 성능이 좋고 어떤 개념을 가지고 있는지 확인하려고 합니다. * Hikari란? Hikari는 connection pooling을 제공하는 JDBC DataSource의 구현체입니다. 이 프레임워크가 다른 connection pooling 보다 가장 빠른 이유는 몇몇 바이드코드 레벨의 구현이 있으며, 마이크로 최적화, ArrayList 사용 대신 FastList 직접 구현으로 처음부터 끝까지 모든 것을 스캔하는 과정 생략 등이 있습니다. 실제 성능의 테스트 결과를 보고 싶다면 다음 벤치마크를 확인해주세요. Hikari ..

728x90
반응형