오늘의 공부
JPA 내부 구조를 잘 알고 사용해야한다!
- Spring Data JPA 를 사용한다면
- Spring Data JPA 를 사용하지 않는다면
- Entity를 관리해 줄, EntityManager를 생성해 줄, EntityManagerFactory를 생성
- 이유
- 스레드 동시성 문제 방지를 위해
특정 리소스는 공유하지 못하게 하는 등 처리가 필요
- EntityManager에는 공유하면 안되는 특정 리소스나 정보가 있고
여러 스레드가 하나의 EntityManager를 이용할 수 없도록 처리해야 함
- 그래서 간편하게 엔티티 매니터 팩토리에서 생성
- 하나의 요청당 하나의 엔티티 매니저 생성해서 DB에 접근
- 수동으로 영속화 저장
- 영속성 컨텍스트 = 엔티티를 영구적으로 저장하는 환경
- 영속성 컨텍스트에 넣고(영속화) 빼고 활용
- 비영속(new) - 그냥 자바 객치
- 영속(managed - 영속성 컨텍스트에서 관리
- 준영속(detached) - 관리하다가 분리됨
- 삭제(removed) - 영속성 컨텍스트에서 삭제됨
- DB작업은 부하가 심하므로 캐시를 활용하기 위해
- 영속성 컨텍스트에 없으면 그때 DB에 SELECT 요청
- 쓰기 지연 SQL 저장소
- Dirty Checking
- 변경과 수정을 감지
- @Transactional
- application 단의 동일성 보장
프록시 객체
- 불필요한 DB 조회를 줄이는 지연로딩
- 지연로딩을 하기위해 DB 조회를 지연할 수 있는 가짜 객체가 필요하다
- 그것이 프록시 객체
- 가급적이면 지연로딩을 걸어두는게 일반적
영속성 전이
- 영속 상태인 특정 엔티티의 연관 엔티티도 영속 상태로 만들고 싶을 때
- cascade
문제와 시도
왜 Import를 못하나
import org.json.JSONArray;
import org.json.JSONObject;
- JSON을 자바에서 다루려면 JSONObject, JSONArray 클래스가 필요한데
자꾸 cannot resolve symbol JSONObject, cannot resolve symbol JSONArray 오류가 발생했다.
- 열심히 구글링을 하며
- Intellij 캐시 삭제 후 재시작
- JDK, Java 버전 확인
- Project Rebuild
- Gradle ReFresh
- 등등 여러가지를 시도해봤지만...
해결과 학습
왜 Import를 못하나
implementation group: 'org.json', name: 'json', version: '20220924'
- 애초에 org.json 패키지 설치를 깜빡했던 것이었다...
build.gradle 에 위 코드를 추가하여 해결하였다
- 무언가 안될땐 기초적인 실수일 수도 있으니,
완전히 처음으로 돌아가서 차근차근 되짚어보자 (...)
메모
null