1. Connection Pool 이란? 애플리케이션이 데이터베이스와 통신을 하기 위해서는 Database Connection(데이터베이스 연결)이 필요하다. 데이터베이스 연결 수명 주기는 아래와 같다. 데이터베이스 드라이버를 사용하여 데이터베이스에 연결하기데이터 읽기 / 쓰기를 위한 TCP 소켓 열기소켓을 통한 데이터 읽기 / 쓰기연결 종료소켓 닫기 데이터베이스 연결은 상당히 비용이 많이 드는 작업이다.따라서, 가능하면 데이터베이스 연결을 최소한으로 줄여야 한다. 커넥션 풀은 애플리케이션 서버가 시작될 때 미리 일정 수의 데이터베이스 연결을 생성하고,이를 Pool에 보관하는 기술이다. 이렇게 미리 생성된 연결들은 클라이언트의 요청이 있을 때 재사용된다. 1 - 1. 동작 방식 애플리케이션 서버 시작..
DATABASE
1. JPA에서 ID 생성 전략 JPA에서는 엔티티의 기본 키(ID)를 생성하기 위한 여러 전략을 제공한다. 2. IDENTITY 전략 IDENTITY 전략은 기본 키 생성을 데이터베이스에 위임한다.MySQL에서는 AUTO_INCREMENT와 같은 데이터베이스 자동 증가 컬럼을 사용한다.엔티티가 영속화될 때 즉시 INSERT SQL이 실행되어 ID 값을 얻는다.엔티티가 영속화될 때 즉시 INSERT SQL이 실행된다는 의미는 영속성 컨텍스트의 쓰기 지연이 적용되지 않는다는 것이다. 영속성 컨텍스트는 트랜잭션이 끝날 때 까지 실행될 SQL을 쓰기 지연 저장소에 모아두고, 커밋 시점에 데이터베이스로 모아둔 쿼리를 날린다. 하지만, IDENTITY 전략을 사용한 경우, 식별자가 데이터베이스에서 할당이 되기 때..

1. 트랜잭션 격리수준(Transaction Isolation Level) 트랜잭션 격리수준은 동시에 여러 트랜잭션이 실행될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것이다. 격리 수준이 높아질수록 데이터의 일관성과 무결성은 보장되지만, 동시성과 성능은 떨어지게 된다. 데이터 정합성과 성능은 반비례 관계이다. 따라서, 각 애플리케이션의 요구사항에 맞는 적절한 격리 수준을 선택하는 것이 중요하다. 각 격리 수준은 특정 데이터 불일치 현상(Dirty Read, Non-Repeatable Read, Phantom Read)을 방지할 수 있다. 2. 트랜잭션 격리 수준 유형 트랜잭션 격리 수준은 READ UNCOMMITTED, READ COMMIT..

데이터베이스 인덱스는 테이블의 검색 속도를 향상시키기 위한 자료구조이다. 특정 컬럼에 대한 값과 해당 레코드의 위치를 매핑하여 빠른 데이터 접근을 가능하게 한다. 인덱스는 추가적인 저장 공간을 사용하지만, 대량의 데이터에서 검색 성능을 크게 개선한다. 인덱스는 ORDER BY, GROUP BY, WHERE 절의 효율적인 처리를 돕는다. 하지만 INSERT, UPDATE, DELETE 작업시 인덱스 갱신으로 인한 성능 저하가 발생할 수 있다. 1. 인덱스의 자료구조인덱스는 주로 해시 테이블과 B+Tree가 사용된다. 해시 테이블은 O(1)의 시간 복잡도로 빠른 검색이 가능하지만, 범위 검색에는 적합하지 않는다. B+Tree는 균형 잡힌 트리 구조로, O(log N)의 시간 복잡도를 가지며 범위 검색에 효율..