노트1차 캐시
First-Level Cache
백엔드#jpa · 연결된 개념 4개
쉽게 말하면
1차 캐시는 한 작업을 하는 동안 한 번 꺼낸 서류를 책상 위에 펼쳐 두는 거예요. 같은 서류를 또 찾으면 창고(DB)에 다시 가지 않고 책상 위 바로 그 서류를 건네죠.
비유가 깨지는 곳 이 책상은 트랜잭션 하나 동안만 쓰고 요청끼리 공유하지 않아요. 또 JPQL은 책상을 거치지 않고 항상 SQL을 보내되, 이미 관리 중인 엔티티는 책상 위 인스턴스로 돌려줘요.
영속성 컨텍스트 안에서 id별로 엔티티를 보관하는 맵. 같은 트랜잭션 안에서 findById(1)을 두 번 부르면 SELECT는 한 번만 나가고 같은 인스턴스가 돌아온다.
- 트랜잭션 범위라 요청끼리 공유하지 않는다. 애플리케이션 전역 캐시(2차 캐시, second-level cache)와 다르다
- JPQL(Jakarta Persistence Query Language) 쿼리는 1차 캐시를 거치지 않고 항상 SQL을 보낸다. 결과 중 이미 관리 중인 엔티티는 1차 캐시의 인스턴스로 돌려준다
- 엔티티를 처음 올릴 때 떠 둔 스냅샷(snapshot)이 더티 체킹의 비교 기준이 된다
책: 7장. 영속성 컨텍스트라는 출석부
출처: Hibernate ORM User Guide: Obtain an entity by identifier · Caching
연결된 개념
이 노트를 가리키는 문서
뜻이 가까운 노트
- React.cache
cache(fn)은 서버 컴포넌트(Server Component)용 React API(Application Programming Interface)로, 함수 결과를 한 번의 서버 요청(렌더) 동안만 기억한다. 같은 요청 안에서 같은 인자로 여러 번 불러도 실제 실행은 한 번이다. React 19 정식 API이며 서버 컴포넌트에서만 쓴다.
- LRU 캐시와 캐시 계층 비교
LRU(Least Recently Used) 캐시는 크기를 정해 두고, 가득 차면 가장 오랫동안 쓰지 않은 항목부터 버리는 메모리 캐시다. Node.js에서는 lru-cache 패키지가 대표적이다. 자주 쓰는 데이터는 계속 남고 안 쓰는 것만 밀려난다.
- Next.js 캐시 계층
Next.js 14~15의 App Router 문서는 캐시를 위치와 수명이 다른 네 계층으로 설명했다. Next.js 16에서 Cache Components를 켜면 캐싱을 'use cache'로 명시하는 모델로 바뀌고 문서도 이 이름들을 쓰지 않는다(use-cache). 그래도 옛 코드와 아티클을 읽으려면 이 그림이 필요하다(2026 기준).
- 저장소 역할 분담 (DB·캐시·큐·검색)
서버 애플리케이션 옆에는 거의 늘 관계형 DB, 인메모리 캐시, 메시지 브로커(message broker), 검색 엔진이 붙는다. 하나로 다 하지 않는 이유는 데이터의 성격(영구성·속도·전달·검색)마다 잘하는 도구가 다르기 때문이다.
- 영속성 전이 (cascade)
영속성 전이(cascade, transitive persistence)는 부모 엔티티에 한 영속성 작업(저장·병합·삭제 등)을 연관된 자식 엔티티에도 자동으로 적용하는 JPA 옵션이다. 기본값은 아무것도 전이하지 않는 것이다.