작성
·
1K
2
안녕하세요 선생님, 명강의 늘 감사드립니다.
바로 본론으로 들어가겠습니다. 질문 내용은 다음과 같습니다.
16:47에서 말씀하시는 캐싱이라는 뜻에 대한 상세한 개념을 정리하고자 질문을 드립니다.
캐시의 추상적인 개념은 나중에 요청을 결과를 미리 저장해두었다가 빠르게 서비스를 해준다는 의미로 인지하고 있습니다.
1. 컴퓨터 자체에서의 캐시 메모리에 캐싱한다는 것인지, DB 자체에서 내부적인 캐시에 데이터를 캐싱? (데이터를 가지고 있다) 한다는 의미인지 궁금합니다.
2. 만약 DB 자체에서의 캐쉬라면 DB의 캐시와 컴퓨터의 캐시 메모리의 차이점이 무엇인지 궁금합니다. 예를 들어 DB 자체의 캐시란 요청을 결괏값을 컴퓨터 캐시 메모리에 올려놓고 트랜잭션이 완료되기 전에 재사용하는 의미인지 궁금합니다.
3. 일반적으로 알고 있는 웹서비스의 구조는 다음과 같습니다.
일반적으로 마이바티스를 사용할 경우 다음과 같은 구조가 된다고 알고 있습니다.
[Look aside cache]
jpa를 사용하면 다음과 같은 구조가 되나요?
감사합니다.
출처 : https://www.youtube.com/watch?v=mPB2CZiAkKM
답변 1
10
안녕하세요. junmo sung님 좋은 질문입니다.
먼저 캐시는 여러가지가 있지만, 심지어 CPU 레벨에도 캐시가 있으니까요. 여기서는 단순히 애플리케이션 서버가 사용하는 캐시로 한정지어서 말씀드리겠습니다.
JPA는 1차 캐시, 2차 캐시라는 것을 제공합니다.
1차 캐시
먼저 JPA의 1차 캐시는 쉽게 이야기해서 1명의 고객의 요청이 들어오고 나갈 때 까지 유지되는 생존범위가 매우 짦은 캐시입니다. 이것은 애플리케이션 서버 메모리에 저장됩니다. (더 정확히는 애플리케이션에서 데이터베이스 트랜잭션을 시작하고 종료할 때 까지 유지되는 캐시)
이런 1차 캐시는 사실 일부 성능 향상이 있기는 하지만, 사용 목적이 성능 향상 때문에 사용하는 것은 아니고, JPA의 내부 메커니즘을 유지하기 위해서 사용됩니다. 그리고 여러명이 동시에 같은 캐시에 접근할 수 없습니다.
2차 캐시
본격적인 캐시는 여러 사용자가 동시에 같은 데이터를 요청하면 애플리케이션 메모리나 캐시 별도의 캐시 서버에 저장되어 있는 데이터를 조회하는 것이 빠르겠지요. JPA는 엔티티 단위로 공유 가능한 캐시를 제공하는데 이것을 2차 캐시라 합니다. 그런데 이런 2차 캐시는 너무 복잡하고, 다루기가 쉽지 않아서, 실무에서는 애플리케이션 레벨의 캐시를 더 많이 사용합니다.
애플리케이션 레벨 캐시
JPA를 사용하더라도, JPA가 제공하는 캐시가 아니라 말씀하셨던 마이바티스 같은 구조를 사용할 때와 동일한 캐시 구조도 사용할 수 있습니다.
감사합니다^^