Spring

    DBMS의 트랜잭션과 @Transactional

    DBMS의 트랜잭션트랜잭션제일 먼저 DBMS의 전체적인 구조에 대해서 그림을 통해 나타내보기로했다.DBMS마다 구조가 다르기는 하지만, 위의 그림처럼 질의 처리기와 저장 시스템로 구분되어진다. 데이터베이스 시스템은 보통 비휘발성 저장 장치인 디스크에 데이터를 저장하며 전체 데이터베이스의 일부분을 메인 메모리에 유지한다. DBMS는 데이터를 고정 길이의 페이지로 저장하며, 디스크에서 읽거나 쓸 때에 페이지 단위로 입출력이 이루어진다. 메인 메모리에 유지하는 페이지들을 관리하는 모듈을 보통 페이지 버퍼 관리자 또는 버퍼 관리자라고 부르는데, DBMS의 많은 주요 모듈 중에서 매우 중요한 모듈 중의 하나이다.DBMS에서 트랙잭션 관리에 있어서 버퍼 관리자의 버퍼 관리 정책이 매우 중요한 결정을 가져오게 된다...

    JPA와 Spring Data JPA

    JPA ? Java Persistence API 의 약자로 관계형 데이터베이스를 사용하기 위한 양식이다. Java 객체와 관계형 DB 사이를 매핑하는 ORM 기술 표준 인터페이스이므로 실제 구현체는 Hibernate 등등 SQL 코드를 구현하지 않고, 객체 지향 프로그래밍 방식으로 DB를 사용 Java 에서 애플리케이션과 JDBC 사이에서 동작한다. Hibernate JPA의 구현체이다. 실제로 JPA의 핵심체인 EntityManagerFactory, EntityManager, EntityTransaction을 Hibernate에서는 SessionFactory, Session, Transaction으로 상속 받고 각각 Impl로 구현하고 있다. 중간에 ORM이 JDBC API를 직접 사용하여 DB에 접근..

    Sring Boot + Redis를 이용한 Cachcing

    Sring Boot + Redis를 이용한 Cachcing

    0. 환경구성 1. Window용 Redis 1) https://github.com/tporadowski/redis 에서 Redis 설치 2) Redis 기본포트 (6379) 설정 3) 간편한 접속을 위한 Redis 경로 환경변수 Path 등록 4) Cmd에서 redis-cli 입력으로 localhost로 설정된 Redis 접속 2. Ubuntu용 Redis 1) sudo apt-get redis-server 로 Redis 설치 2) sudo vi/etc/redis/redis.conf 에서 최대 메모리 설정 maxmemory 1g // 최대 사용 메모리 1G 로 설정 maxmemory-policy allkeys-lru // 최대 메모리 초과 시 가장 오래된 데이터 삭제 3) redis-cli로 접속 1...

    [JPA] 더티 체킹 (Dirty Checking)

    JPA에서 더티 체킹과 트랙잭션의 필요성을 인지하지 못한다면 비지니스 로직에서 다루는 엔티티 데이터가 꼬이는 경우가 발생한다. 이런 경우를 방지하지위해 더티 채킹을 알아야 한다. 더티 (Dirty) ? - 상태의 변화가 생긴 정도 더티 체킹 (Dirty Checking) ? - 상태 변경 검사 JPA에서는 트랙잭션이 끝나는 시점에 변화가 있는 모든 엔티디 객체를 데이터베이스에 자동으로 반영해준다. → 변화의기준 : 최초 조회 상태 JPA에서의 Dirty Checking 엔티티를 조회하면 해당 엔티티의 조회 상태 그대로 스냅샷을 만든다. 트랜잭셔니 끝나는 시점에는 이 스냅샷과 비교하여 다른점이 있다면 Update Query를 데이터베이스로 전달한다. 이런 상태에 변경 검사의 대상은 영속성 컨텍스트가 관리하..

    [JPA]  Bulk Insert 적용기

    [JPA] Bulk Insert 적용기

    적용이유 크롤링된 keyword 들을 insert 할때 하나하나 진행되다보니 많은 시간 소요 -> 시간을 줄일 수 있는 방법은 없을까 ? 1. Bulk insert 2. JPA batch insert 적용 전 insert 횟수와 소요시간 문제점 현재 insert시 id값을 IDENTITY 로 생성하여 제약사항에 해당 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id; Why does Hibernate disable INSERT batching when using an IDENTITY identifier generator The Hibernate documen..