개발을 하다보면, 특히 firebase 의 cloud-firestore 라는 read 나 write 회수마다 돈 결제가 나가는 baas(backend as a service) 를 활용하다 보니!!
자연스럽게 어플 내에 캐시 컨트롤러를 고민하게 된다.
데이터를 불러올때, 굳이 또 firebase 에 횟수 1을 더 추가해줘야하나?
라는 생각들로 자연스레 캐시를 구현하게 되고,
아얘 새로운 데이터가 필요할때는 refresh라는 변수를 두어 다시 불러오고.
등등을 반복하다보면 자연스레 snapshot 같은 기능이 있으면 좋겠다라는 생각에 다다른다.
맞다. 이 생각에 다다른 개발자 분들이 만들어낸 개념이 영속성 컨텍스트이다.
물론 객체를 사용하다 firebase에 맞게 사용해야하는 귀찮음
1. 모든 class 마다 toMapForData, fromMapData, clone 을 지정해주어야 하는 노가다 작업들...
2. firebase에서 다루는 데이터 형식에 맞게 변환해주는 TypeChange같은 기능들
이런것들을 한 곳에서 할 수 있게 해주는 컨트롤러(?), 클래스를 떠올리기 마련이고 이게 jpa 가 해주는 일.
다만, baas 를 썼기때문에, 데이터 트랜잭션에 대한 고민은 아얘 하지 않았지만, 어플 내에서도 firebase transaction 속에서 server 함수들을 사용했기에 어느정도 익숙하다.
영속성 컨텍스트의 역할은
우리가 지금껏 해왔던 수많은 노가다,
데이터 불일치 및 비효율적인 CRUD 를
대신 해결해주는 하나의 도구 이다.
JPA 찬양해! 감사합니다! 멋진 개발자님들