개념을 명확히 다시복습하였습니다.
빈 : 싱글톤패턴으로 이루어진 객체들이라고 이해했다.
빌더패턴 사용이유 : 파라메터 사용 유연성(10개중 5개이용) 과 파라매터 주입 유연성 (꼭 순서에 맞게 파라메터를 안넣어도 된다)
https://velog.io/@jaeeunxo1/spring-singleton
태선 튜터님의 JPA 강의를 다시보니 알차고 내용이 좋아서 다시 복습했습니다.
영속성 컨텐스트란 엔티티를 영구 저장하는 환경이라는 뜻이다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
비영속
엔티티 객체를 생성했지만 아직 영속성 컨텍스트에 저장하지 않은 상태를 비영속(new/transient)라 한다.
Member member = new Member();
영속
엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태를 말하며 영속성 컨텍스트에 의해 관리된다는 뜻이다.
em.persist(member);
준영속
영속성 컨텍스트가 관리하던 영속 상태의 엔티티 더이상 관리하지 않으면 준영속 상태가 된다. 특정 엔티티를 준영속 상태로 만드려면 em.datach()를 호출하면 된다.
// 엔티티를 영속성 컨텍스트에서 분리해 준영속 상태로 만든다.
em.detach(member);
// 영속성 콘텍스트를 비워도 관리되던 엔티티는 준영속 상태가 된다.
em.claer();
// 영속성 콘텍스트를 종료해도 관리되던 엔티티는 준영속 상태가 된다.
em.close();
준영속 상태의 특징
- 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩을 포함한 영속성 컨텍스트가 제공하는 어떠한 기능도 동작하지 않는다.
- 식별자 값을 가지고 있다.
삭제
엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한다.
em.remove(member);
persist() , merge() > (영속성 컨텍스트에 저장된 상태) > flush() > (DB에 쿼리가 전송된 상태) > commit() > (DB에 쿼리가 반영된 상태)
save 매소드 : merge까지 수행 후 내부 @Transactional 어노테이션에 의해 flush, commit 까지 수행됩니다.
save and flush : flush까지 수행 후 내부 @Transactional 어노테이션에 의해 flush, commit 까지 수행됩니다.
결론은, flush 와 commit 사이 즉, DB에 쿼리가 전송된 상태에서 추가동작이 필요한경우 SimpleRepository 대신 Repository 를 개별로 구현하여 @Transactional 이 달리지 않은 saveAndFlush() 를 구현하고, 그렇지 않다면 기본적으로 save() 메소드만 사용합니다.
생각해볼것
유연히 튜터님의 글을 참고했습니다.
JWT 보안관련 질문이 많이 오시는데요. XSS(자바 스크립트에 악성코드를 쓱싹 방지), CRSF 공격 대비 등을 고민해 보는 것은 여러분의 이력서를 풍성하게 만듭니다.
1. 서버의 응답 값으로 Entity 구조가 노출된다면, Jwt claim admin을 스리슬쩍 넣어서 DB를 모두 날려버린다면?
2. 자바스크립트를 활용해 SQL 문을 넣어서 서버 DB를 날려버리거나 고객 정보를 털어간다면?
다음주 월요일부터 빡세게 안들었던 강의 및 재정의해야될 강의 혹은 인프런 강의를 완강해야겠다는 목표가 있다.
오늘 후발대강의에서 정말 자주쓸것같은 generic 구분인 <T>를 공부했다. 너무 좋아서 애용해야겠다는 생각을 하였습니다.
'스파르타코딩클럽(내일배움캠프)' 카테고리의 다른 글
스파르타코딩클럽 내일배움캠프 13주차 WIL (0) | 2023.01.29 |
---|---|
스파르타코딩클럽 내일배움캠프 13주차 5일 (0) | 2023.01.27 |
스파르타코딩클럽 내일배움캠프 13주차 3일 (0) | 2023.01.25 |
스파르타코딩클럽 내일배움캠프 12주차 후기 (0) | 2023.01.24 |
스파르타코딩클럽 내일배움캠프 12주차 5일 (0) | 2023.01.20 |