본문 바로가기

Spring

(3)
[JPA] 1차 캐시 작동 조건과 적용 범위 1차 캐시 작동 조건JPA 1차 캐시 작동 조건은 다음과 같다.1차 캐시는 PK로 조회하는 것이 아니면 작동하지 않는다. 영속성 컨텍스트에서 조회할 때 @Id 즉 PK로 등록하고 조회하기 때문이다. 1차 캐시(영속성 컨텍스트)는 다음과 같이 key-value 형태의 구조를 가진다. - Key: DB의 PK- Value: Entity 1차 캐시 적용 범위 JPA 1차 캐시의 적용 범위는 동일 트랜잭션, 동일 스레드 내 이다. 다시 말하면, 로직에 트랜잭션을 설정하지 않으면 1) JPA 1차 캐시는 동작하지 않는다.1차 캐시가 동작하지 않기 때문에 2) 변경 감지도 적용되지 않는다. 나아가 3) 멀티 스레드를 이용한다면, 서로 다른 스레드 간에는 JPA 1차 캐시가 적용되지 않는다.  1. 1차 캐시 ..
동시성 처리 자바 코드에서 Thread Safe하도록 만드는 방법으로 synchronized 키워드 사용하는 것이 있다. 하지만 Thread Safe와 동시성 이슈로 인한 DB 데이터 정합성과는 또 다른 이야기이다.즉 synchronized 키워드로는 모든 동시성 이슈를 해결할 수는 없다. 이유는 다음과 같다.Synchronized 의 문제점1. Synchronized 는 하나의(각각의) 프로세스 안에서만 보장이 된다.서버가 여러 대일 경우에는 각 서버에서 돌아가는 프로세스에서 각각 하나씩의 synchronized 메소드를 실행할 수 있게 된다.즉 두 개 이상의 프로세스에서 동일한 DB값에 접근해서 데이터를 수정할 수 있게 된다는 것이다. 둘 이상의 프로세스가 동일한 DB값에 접근해서 데이터를 수정한다면 synchr..
Not Found QClass querydsl이 사용된 프로젝트를 clone하게 되면 QClass를 찾지 못한다는 에러를 꼭 한번은 만나게 된다. 일단 기본적인 해결방법은 빌드 파일을 clean하고 재빌드를 하는 것이다. 하지만 이 방법으로도 해결되지 않는다면 intelliJ에서 설정이 필요하다. 생성된 QClass의 경로를 찾지 못하고 있기 때문이다. 따라서 IntelliJ가 QClass의 경로를 찾을 수 있게 설정을 해주어야 한다. IntelliJ 설정 과정 파일 → 프로젝트 구조 → 모듈 (좌측 메뉴바) → target/generated-sources 폴더가 처음에는 ‘제외’로 설정이 되어 있는데, 이것을 우클릭해서 ‘소스’로 선택해서 적용하면 된다. 이렇게 하고 나면 빨간 줄이 뜨던 QClass들이 경로를 찾는 데에 성공하여 ..