| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 이슈관리
- 비전공개발자
- elasticsearch
- 자바
- 엘라스틱서치
- kibana
- It
- 일감관리
- 개발자
- 스프링
- AOP
- 검색
- PM
- 인덱스
- 레드마인
- backend
- 백엔드
- PreparedStatement
- Database
- frontend
- 데이터베이스
- java
- 웹프론트
- 프로젝트관리
- db
- spring
- 오라클
- redmine
- Si
- spring aop
- Today
- Total
목록backend (7)
리타의 저장소
MVCC란?다중 버전 동시성 제어하나의 데이터를 여러 트랜잭션이 동시에 읽고 쓸 수 있게 하되, 충돌 없이 일관성을 유지하도록 하는 기술동시성 제어데이터베이스에서 여러 트랜잭션이 동시에 실행될 때, 데이터의 일관성과 무결성을 보장하기 위한 제어 메커니즘요약동시성 제어는 트랜잭션 간의 충돌을 방지하고, 무결성을 지키기 위한 핵심 기술.비관적 제어(Pessimistic): 락 기반, 충돌 방지, 안전하지만 성능 손해낙관적 제어(Optimistic): 버전 기반, 충돌 허용 후 감지, 성능 좋지만 충돌 시 리스크공유락(S-Lock): 여러 트랜잭션이 읽기만 가능배타락(X-Lock): 하나의 트랜잭션만 읽기/쓰기 가능 다중 버전 동시성 제어가 무엇인지 확인해보기 이전에 우선 동시성 제어가 무엇인지 확인해보자. ..
들어가며트랜잭션 동시성은 단순히 “락을 건다”로 끝나지 않는다.DB마다 읽기 일관성(snapshot)을 구현하는 방식이 다르고, 그 결과 데이터가 메모리와 디스크 사이를 흐르는 구조도 다르다.Oracle은 버퍼 캐시, redo log buffer, undo, background process를 함께 사용해 읽기/쓰기 동시성을 처리한다.PostgreSQL은 테이블 내부의 tuple version을 쌓고 vacuum으로 정리하며,InnoDB는 undo log와 read view를 이용해 과거 버전을 보여준다.OracleOracle 아키텍처를 동시성 관점으로 봐보자Oracle 인스턴스에서 이 발표에 가장 중요한 구성요소는 네 가지이다.Shared Pool: SQL 파싱 결과, 실행 계획, 데이터 딕셔너리 정보..
JAVA 레이어에서 DB 레이어 까지 * 여기선 Spring JPA 기준으로 설명해본다.[Java Thread] ↓@Transactional ↓Persistence Context (1차 캐시, Dirty Checking) ↓flush → SQL 상태 반영 ↓JDBC SQL 전송 ↓Oracle Transaction / Undo / Row Lock / Commitsave()를 호출하면 DB에 반영되는 것인가?많은 사람들이 save() 했으니 DB에 반영되었다고 생각할 수 있으나, 실제로는 영속성 컨텍스트에만 반영된 상태일 수 있고, flush가 나가도 commit 전이면 다른 세션에까지 확정되지 않는다.JPA spec은 flush가 AUTO일 때 쿼리 실행 전이나 커밋 시점 등에 반영될 수..
트랜잭션의 특징원자성 - 분해 불가능한 업무 최소 단위일관성격리성영속성Dirty Read다른 트랜잭션에 의해 수정되었으나, 아직 커밋되지 않은 데이터를 읽는 것.변경 후 아직 커밋되지 않은 값을 읽었는데, 만약 변경을 가한 트랜잭션이 최종적으로 롤백된다면 그 값을 읽은 트랜잭션은 비일관된 상태에 놓이게 된다.Non-Repeatable Read한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이 다른 트랜잭션이 값을 수정/삭제 하는 바람에 두 쿼리 결과가 다르게 나타나는 현상을 말함Phantom Read한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유형(phantom) 레코드가 두 번째 쿼리에서 나타나는 현상.트랜잭션 수준 읽기 일관성 ?문장수준 읽기 일관성(Statem..
인덱스 만들기 #이런식으로 만든다.PUT /users # 확인 GET /users# DELETEDELETE /boards 만약 DELETE 문으로 인덱스를 삭제하게 된다면, not found exception이 뜬다. "index_not_found_exception", 인덱스에 매핑 정의하기 쉽게 얘기하면 users 라는 인덱스(테이블)에, name, age, is_active라는 컬럼을 정의해준거라고 생각하면 된다.PUT /users/_mappings{ "properties" : { "name" : {"type": "keyword"}, "age" : {"type": "integer"}, "is_active": {"type": "boolean"} }} 확..
CGLIB Proxy CGLIB Proxy는 JDK Dynamic Proxy와 다르게 바이트코드 조작(ASM 기반)으로 대상 클래스의 서브클래스를 만들어 프록시를 구현한다.JDK Proxy가 원본 객체가 구현한 Interface에 대한 Proxy를 만들어준다면, CGLIB Proxy는 직접 Class를 상속받아서 Override하는 방식으로 Proxy를 만들어주게 된다. 그래서 interface가 없는 클래스라도 Proxy를 생성할 수 있다.예를들어, ProxyService 라는 Interface를 구현한 ProxyServiceImpl이 있다면, CGLIB로 Proxy를 구현할 떄 ProxyService라는 interface가 아닌 구체 구현 클래스를 상속받는 식으로 구현된다. public class P..
PreparedStatement란?SQL 문을 미리 컴파일해둔 객체.Java의 java.sql 패키지에 포함돼 있다.주로 SQL Injection(보안 문제)을 막기 위해, 그리고 쿼리 성능 최적화를 위해 사용.Connection 객체의 prepareStatement() 메서드를 이용해서 만든다.그냥 Statement vs PreparedStatement구분 Statement PreparedStatementSQL 처리 방식SQL을 실행할 때마다 파싱, 컴파일SQL을 미리 컴파일 후 실행성능느림빠름 (특히 반복 실행 시)보안SQL Injection 취약파라미터 바인딩으로 Injection 방지코드 작성문자열 조작 많음깔끔한 파라미터 바인딩 가능PreparedStatement 기본 사용법// 1. 커넥션 얻..
