본문 바로가기
  • Let's study

Spring32

[Spring] Proxy란? @Transactional과 @Lazy가 동작하는 원리 Proxy란?Proxy는 진짜 객체 대신 동작하는 가짜 객체이다.사용자 │ ▼Proxy │ ▼Real Object 실제 업무는 Real Object가 수행한다.Proxy는 필요한 작업만 추가한다.Proxy를 사용하는 이유대표적으로 두 가지 목적이 있다.1. 실행을 최대한 늦추기대표적인 예가 @Lazy이다.필요하기 전까지 실제 객체를 생성하지 않는다.사용 안함↓객체 생성 X↓사용하는 순간↓객체 생성 메모리와 실행 시간을 절약할 수 있다.2. 전처리 / 후처리 수행대표적인 예가 @Transactional이다.@Transactional이 붙은 메서드를 호출하면 실제 메서드가 바로 실행되는 것이 아니라, 먼저 Proxy가 호출된다.Proxy는 메서드 실행 전후에 필요한 작업을 수행한 뒤 실제 객체.. 2026. 8. 6.
[Spring] Bean 심화 - @Bean, @Qualifier, @Order 정리 @Bean 여러 개 등록하기같은 타입의 객체도 여러 개의 Bean으로 등록할 수 있다.예를 들어 PersonRepository의 버전을 두 개 관리한다고 가정해보자. @Beanpublic PersonRepository personRepository() { return new PersonRepository(1);}@Beanpublic PersonRepository personRepositoryV2() { return new PersonRepository(2);} PersonRepository는 생성자를 통해 버전을 전달받는다. @RequiredArgsConstructorpublic class PersonRepository { private final int version; public.. 2026. 8. 6.
Spring Boot에서 HTML 페이지 출력하기 (Thymeleaf 사용법) Spring Boot에서 HTML을 화면에 출력하려면 Thymeleaf를 사용한다.Thymeleaf는 서버에서 데이터를 HTML에 렌더링해주는 템플릿 엔진이다.의존성 추가build.gradle.ktsimplementation("org.springframework.boot:spring-boot-starter-thymeleaf")implementation("nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect") thymeleaf-layout-dialect는 레이아웃(공통 Header, Footer 등)을 사용할 때 필요한 라이브러리이다.HTML 파일 위치HTML 파일은 아래 경로에 생성한다.src └─ main └─ resources └─ templa.. 2026. 8. 6.
[Spring] Lazy Loading vs Eager Loading JPA에서 연관된 엔티티를 언제 조회할 것인지를 결정하는 옵션이다. LAZY : 실제로 사용할 때 조회EAGER : 부모를 조회할 때 함께 조회구분LAZY (지연 로딩)EAGER (즉시 로딩)조회 시점사용할 때 조회부모 조회 시 함께 조회SQL 실행필요할 때 추가 SELECTJOIN 또는 추가 SELECT 즉시 실행성능일반적으로 더 좋음불필요한 데이터까지 조회 가능기본값대부분의 컬렉션(@OneToMany)대부분의 단일 참조(@ManyToOne)추천대부분의 경우 추천반드시 항상 필요한 경우만 사용EAGERpublic class Question { @OneToMany( mappedBy = "question", fetch = FetchType.EAGER ) privat.. 2026. 8. 5.
[Spring] JPA CascadeType과 Flush CascadeType.REMOVE부모 엔티티가 삭제될 때 자식 엔티티도 함께 삭제한다.@OneToMany( mappedBy = "question", cascade = CascadeType.REMOVE)private List answers = new ArrayList();questionRepository.delete(question); 실행 순서Answer 삭제Question 삭제외래키 제약조건 때문에 부모보다 자식을 먼저 삭제한다.CascadeType.PERSIST부모 엔티티를 저장할 때 새로 생성된 자식 엔티티도 함께 저장한다.@OneToMany(mappedBy = "question", cascade = CascadeType.PERSIST)private List answer.. 2026. 8. 5.
[Spring] @OneToMany와 @ManyToOne @ManyToOnepublic class Answer { @ManyToOne private Question question;} Answer가 Question을 참조한다.DB에서는 question_id 외래키가 생성된다.외래키는 항상 자식(N쪽) 에 생성된다.@OneToManypublic class Question{ @OneToMany(mappedBy = "question") private List answers = new ArrayList();} Question에서 답변 목록을 바로 조회할 수 있다.mappedBy = "question" 의 의미mappedBy = "question"은 연관관계의 주인이 Answer.question 필드라는 의미이다. @ManyToOneprivate .. 2026. 8. 5.