데코레이터 패턴 적용 전데코레이터 패턴을 이해하기 위한 예제 코드를 작성해보자.먼저 데코레이터 패턴을 도입하기 전 코드를 아주 단순하게 만들어보자.Component 인터페이스public interface Component { String operation();}operation() 메서드를 가짐 RealComponent@Slf4j public class RealComponent implements Component { @Override public String operation() { log.info("RealComponent 실행"); return "data"; } }RealComponent는 Component 인터페이스를 구현operation(): 단순히 로그를 남기고 ..
프록시 패턴을 이해하기 위한 예제 코드를 작성해보자.프록시 패턴 - 적용 전먼저 프록시 패턴을 도입하기 전 코드를 아주 단순하게 만들어보자.Subject 인터페이스 public interface Subject { String operation(); }예제에서 Subject 인터페이스는 단순히 operation() 메서드 하나만 가지고 있다. RealSubject@Slf4jpublic class RealSubject implements Subject { @Override public String operation() { log.info("실제 객체 호출"); sleep(1000); // 1초 쉬기 return "data"; } private void sleep(i..
클라이언트 : 의뢰인서버 : 서비스나 상품을 제공하는 사람이나 물건 클라이언트는 서버에 필요한 것을 요청하고,서버는 클라이언트의 요청을 처리하는 것이다.이 개념을 우리가 익숙한 컴퓨터 네트워크에 도입하면클라이언트: 웹 브라우저요청을 처리하는 서버: 웹 서버이 개념을 객체에 도입하면,클라이언트: 요청하는 객체서버: 요청을 처리하는 객체직접 호출과 간접 호출클라이언트와 서버 개념에서 일반적으로 클라이언트가 서버를 직접 호출하고, 처리 결과를 직접 받는다. 이것을 직접 호출이라 한다.그런데 클라이언트가 요청한 결과를 서버에 직접 요청하는 것이 아니라 어떤 대리자를 통해서 대신 간접적으로 서버에 요청할 수 있다.예를 들어서 내가 직접 마트에서 장을 볼 수도 있지만, 누군가에게 대신 장을 봐달라고 부탁할 수도 있..
준영속 상태란?영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached)영속성 컨텍스트가 제공하는 기능(1차 캐시, dirty checking 등등..)을 사용 못함Q. 준영속 상태랑 비영속 상태 차이?비영속 상태 (Transient): 객체가 한 번도 영속성 컨텍스트에 의해 관리되지 않은 상태준영속 상태 (Detached): 객체가 한 번 영속성 컨텍스트에 의해 관리되었으나, 현재는 더 이상 관리되지 않는 상태준영속 상태로 만드는 방법em.detach(entity)특정 엔티티만 준영속 상태로 전환em.clear()영속성 컨텍스트를 완전히 초기화em.close영속성 컨텍스트를 종료em.detach(entity)특정 엔티티만 준영속 상태로 전환em.find를 하면 영속 상태이다. (DB에서 가져와 1..
플러시란?영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 과정즉, 영속성 컨텍스트에 쌓인 변경된 엔티티들을 실제 DB에 반영영속성 컨텍스트 내에서 엔티티가 변경되거나 삭제된 상태는 DB에 바로 반영되지 않고, 쓰기 지연 저장소에 쌓이게 됩니다. 그리고 트랜잭션이 커밋되거나, flush() 메서드가 호출될 때 DB에 쿼리가 반영됩니다.transaction.commit()호출 시 flush()자동 호출transaction.commit()이 호출되면 flush() ,commit() 순서대로 호출플러시 발생 과정1. 변경 감지(Dirty Checking)영속성 컨텍스트는 트랜잭션 중에 엔티티 객체의 상태를 추적합니다. 엔티티가 변경된 상태인지를 감지하려면 JPA는 변경 감지(Dirty Checking)를 ..
영속성 컨텍스트의 이점1차 캐시동일성(identity) 보장쓰기 지연 (transactional write-behind)변경 감지 (Dirty Checking)1차 캐시영속성 컨텍스트는 내부에 1차 캐시를 가지고 있다.Member 객체를 생성한 후 em.persist를 통해 member 객체를 영속성 컨텍스트에 넣으면id와 함께 member객체 자체가 저장된다.em.find를 통해 조회를 하면 JPA는 영속 컨텍스트에서 먼저 1차 캐시를 뒤진다.1차 캐시에 있으면 바로 조회해 옴다음으로 find(”member2”)로 member2를 조회한다.member2가 1차 캐시에 없으면 DB를 조회한다. (member2는 DB에 있다고 가정)그리고 DB에서 조회한 member2를 1차 캐시에 저장그 다음 membe..