221229 TIL

이지섭·2022년 12월 29일

오늘의 공부

JPA 내부 구조를 잘 알고 사용해야한다!

  • Spring Data JPA 를 사용한다면
    • 그냥 Entity 생성하고 save 하면 끝
  • Spring Data JPA 를 사용하지 않는다면
    • Entity를 관리해 줄, EntityManager를 생성해 줄, EntityManagerFactory를 생성
      • 이유
        • 스레드 동시성 문제 방지를 위해
          특정 리소스는 공유하지 못하게 하는 등 처리가 필요
        • EntityManager에는 공유하면 안되는 특정 리소스나 정보가 있고
          여러 스레드가 하나의 EntityManager를 이용할 수 없도록 처리해야 함
        • 그래서 간편하게 엔티티 매니터 팩토리에서 생성
        • 하나의 요청당 하나의 엔티티 매니저 생성해서 DB에 접근
    • 수동으로 영속화 저장
      • 영속성 컨텍스트 = 엔티티를 영구적으로 저장하는 환경
        • 영속성 컨텍스트에 넣고(영속화) 빼고 활용
          • 비영속(new) - 그냥 자바 객치
          • 영속(managed - 영속성 컨텍스트에서 관리
          • 준영속(detached) - 관리하다가 분리됨
          • 삭제(removed) - 영속성 컨텍스트에서 삭제됨
        • DB작업은 부하가 심하므로 캐시를 활용하기 위해
          • 영속성 컨텍스트에 없으면 그때 DB에 SELECT 요청
        • 쓰기 지연 SQL 저장소
          • 모아놨다가 한번에 INSERT
        • 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

profile
Stop thinking. Just do it.

0개의 댓글