본문 바로가기
반응형

학습/DB46

JDBC 의 역사 개요 JDBC의 역사를 알아보겠습니다. 일반적인 애플리케이션 - DB 사용법 아래 그림처럼, 애플리케이션 서버는 총 3가지 과정으로 DB와 연동하여 원하는 데이터를 조회, 추가, 수정, 삭제 등을 합니다. 첫째로 TCP/IP 커넥션 연결, 두번째로 SQL 전달, 세번째로 결과 응답입니다. 문제점 1. DB 종류에 따라 데이터베이스 사용 코드가 달라집니다.(MySQL, Oracle 등등) 2. 개발자는 직접 커넥션 연결, SQL 전달, 결과 응답 코드 작성을 데이터베이스마다 학습해야 합니다. JDBC 표준 인터페이스 JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API입니다. JDBC는 데이터베이스에서 자료를 쿼리 하거나 업데이트하는 방법을 제공합니다 - 나무위키 JDBC 표준 인터페이스 .. 2022. 9. 1.
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.. 2022. 8. 24.
낙관적 잠금과 비관적 잠금으로 동시성 해결하기 개요 동시성 문제를 이전 시간에 정리했는데, 결국 동시성 문제를 어떻게 해결할 것인가가 다음 관심사입니다. 따라서, 이번 시간에는 동시성 문제를 해결하기 위한 데이터베이스의 잠금 모델 2가지 낙관적 잠금과 비관적 잠금을 알아보려고 합니다. 낙관적 잠금은 상황을 낙관적으로, 비관적 잠금은 비관적으로 본다고 접근하면 됩니다. 비관적 잠금(Pessimistic Lock) 비관적 잠금은 자원 경쟁을 비관적으로 보기 때문에, 다중 트랜잭션이 데이터를 동시에 수정할 것이라고 가정합니다. 따라서 하나의 트랜잭션이 데이터를 읽는 시점에서 락(Lock)을 걸고, 조회 또는 갱신 처리가 완료될 때까지 유지합니다. 조회 때 락 잠금을 획득하는 방법은 대표적으로 SELECT.. FOR UPDATE 입니다. SELECT...F.. 2022. 8. 19.
트랜잭션 격리 수준 개요 회사 게시판에서 db 트랜잭션 관련하여 재미있는 글을 봤습니다. 예약 시스템을 만드는데 select로 채번 순서를 가져오고 insert를 하다 보니 중복되는 예약번호가 나오는 문제가 있었고 어떻게 해결했는지를 적은 글이었습니다. 다중 쓰레드의 동시성으로 발생한 문제이며, select 시 동시성 문제를 해결해야 했습니다. 그러면서 트랜잭션 격리 레벨이 궁금해져서 찾아보게 되었습니다. 트랜잭션이란? 트랜잭션이란, 데이터베이스 작업의 논리적 단위입니다. 삽입, 수정, 삭제가 성공적으로 끝나 영구적으로 반영을 할 때 commit을 사용합니다. 삽입, 수정, 삭제의 변경 내용을 취소하고 복구해야 한다면 rollback을 사용합니다. DBMS는 잠금(Lock) 기능을 사용하며 다른 트랜잭션의 접근을 제어하여 .. 2022. 8. 12.
고급매핑 - 상속관계 *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.. 2022. 7. 7.
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) .. 2022. 7. 5.
HikariCP란? * 개요 DataSource를 여러개 만드는 과정에서, connection Pool로 Hikari를 이용하는 예제를 보았습니다. Hikari는 성능이 좋아서 쓴다고 생각은 했지만, 어느정도 성능이 좋고 어떤 개념을 가지고 있는지 확인하려고 합니다. * Hikari란? Hikari는 connection pooling을 제공하는 JDBC DataSource의 구현체입니다. 이 프레임워크가 다른 connection pooling 보다 가장 빠른 이유는 몇몇 바이드코드 레벨의 구현이 있으며, 마이크로 최적화, ArrayList 사용 대신 FastList 직접 구현으로 처음부터 끝까지 모든 것을 스캔하는 과정 생략 등이 있습니다. 실제 성능의 테스트 결과를 보고 싶다면 다음 벤치마크를 확인해주세요. Hikari .. 2022. 7. 4.
JPA를 이용해 페이징 만들기 [ 개요 ] Paging은 각 회사마다, 각 프로젝트마다 환경에 맞게 구성되어 있다. 따로 페이징을 위한 클래스를 구분하기도 하고, 엔티티가 페이징 클래스를 상속받도록 만들기도 한다. 새로운 프로젝트를 짤 때 특이사항이 아니라면 다른곳에서 사용하던 것을 그대로 사용한다. 사실상 핵심 비지니스도 아니고 복사 붙여넣기를 많이하다보니 굉장히 귀찮고 번거로운 작업이다. 이 작업을 JPA Data가 제공하는 기능을 통해 간편하게 만들어 줄 수 있다. [ 목표 ] Spring JPA에서 제공하는 페이징 쿼리 기능을 시작으로 Data에서 제공하는 @PageableDefault 기능을 알아본다. 1. 순수 JPA 페이징 기능 이용하기 public List findByPage(int age, int offset, int.. 2021. 12. 15.
JPA를 이용해 자동으로 시간, 작성자 추가하기 개요 DB 테이블에는 생성시간, 수정시간, 작성자, 수정자의 정보가 공통적으로 많이 사용됩니다. 이 공통 칼럼은 핵심 칼럼들은 아니지만 매번 일일이 만들어주어야 합니다. 따라서, 굉장히 번거롭고 귀찮은 일인데, JPA에서는 자동으로 INSERT, UPDATE를 수행하도록 방법을 만들어 두었습니다. 자동 설정을 위한 Spring Data의 핵심은 "Audit"입니다. Spring Data는 Audit이라는 용어를 사용하여 어노테이션과 클래스들을 만들 수 있습니다. Audit의 사전 뜻은 "감시하다"입니다. 예를 들어, 경찰은 차량 검문소에서 음주여부 측정을 하고 음주가 적발되면 벌금을 부과합니다. 마찬가지로 JPA의 조회, 생성, 수정, 삭제 등을 감시하다가 저장을 했을 때, 생성시간, 수정시간을 추가합니.. 2021. 12. 14.
반응형