Spring/강의 52

[📕 JPA 심화] 5. SpringData JPA 심화

📕 목차좀 더 멋지게 쿼리 생성하기 (QueryDSL)테이블 객체 방명록 설정하기 (Auditing)필요한 부분만 갱신하기 (Dynamic Insert/Update)❤️ 학습 목표QueryDSL을 사용하여 타입 안전 쿼리를 작성하는 방법을 배웁니다. 복잡한 조건과 정교한 쿼리를 쉽게 구성할 수 있는 기법을 소개합니다.Auditing을 사용하여 엔티티의 생성 및 수정 시간을 자동으로 관리하는 방법을 배웁니다. Spring Data JPA에서 제공하는 Auditing 기능을 통해 데이터의 일관성과 추적성을 확보합니다.Projection을 사용하여 필요한 데이터만 선택적으로 조회하는 방법을 배웁니다. 과도한 데이터 로드를 방지하고 성능을 최적화하는 기법을 학습합니다.1. 좀 더 멋지게 쿼리 생성하기 (Que..

Spring/강의 2025.06.26

[📕 JPA 심화] 4. SpringData JPA 기본

📕 목차테이블 객체 다루는 법테이블 객체로 자동 쿼리 생성하기테이블 객체로 페이지 조회하기테이블 객체로 수동 쿼리 생성하기❤️ 학습 목표Spring Data JPA를 사용하여 엔티티 객체를 효율적으로 관리하는 방법을 배웁니다. 리포지터리 인터페이스의 역할과 기본적인 메소드 사용법을 설명합니다.JpaRepository 인터페이스를 활용하여 CRUD 작업을 자동으로 처리하는 방법을 배웁니다. 메소드 이름만으로 쿼리를 생성하는 방법과 그 장점을 학습합니다.페이지네이션을 사용하여 대량의 데이터를 효율적으로 조회하는 방법을 배웁니다. Spring Data JPA에서 제공하는 Pageable 인터페이스를 사용하는 실습을 통해 데이터 처리 성능을 최적화하는 방법을 학습합니다.JPQL을 사용하여 복잡한 쿼리를 수동으..

Spring/강의 2025.06.26

[📕 JPA 심화] 3. RawJPA 기본

📕 목차쿼리 파일 만들기 (QueryMapper)쿼리 코드 만들기 (JpaRepository)테이블 객체 이해하기테이블 객체 만들기 & 테이블 객체끼지 관계 만들기❤️ 학습 목표Query Mapper를 사용하여 SQL 쿼리를 관리하는 방법을 배웁니다. 별도의 쿼리 파일을 통해 SQL을 관리함으로써 코드의 가독성과 유지보수성을 높입니다.Annotation을 사용하여 SQL 쿼리를 클래스나 메소드에 직접 정의하는 방법을 배웁니다. 이를 통해 동적 쿼리 생성과 실행 과정을 이해하고 실습합니다.RawJPA를 사용하여 테이블과 연동되는 객체(엔티티)의 구조와 작동 원리를 배웁니다. JPA의 기본적인 구성 요소와 엔티티의 생명주기를 이해합니다.실제 데이터베이스 테이블과 매핑되는 Java 객체를 생성하는 방법을 배..

Spring/강의 2025.06.26

[📕 JPA 심화] 2. 데이터베이스 다루기

📕 목차데이터베이스 생성 (H2)데이터베이스에서 테이터 다루기 (SQL)데이터베이스 연결 (Driver)데이터베이스 데이터를 외부에서 다루기 (JDBC)❤️ 학습 목표이 섹션에서는 내장형 H2 데이터베이스를 설치하고 설정하는 방법을 배웁니다. H2 데이터베이스의 주요 특징과 장점을 소개하며, 간단한 데이터베이스 생성 방법을 설명합니다.SQL 기본 구문을 사용하여 데이터를 생성, 조회, 수정, 삭제하는 방법을 배웁니다. 이를 통해 데이터베이스 관리의 기본이 되는 SQL 문법에 대한 이해를 높입니다.데이터베이스 드라이버의 역할과 중요성을 이해하고, 적절한 드라이버 선택 및 설정 방법을 배웁니다. JDBC 드라이버를 사용하여 애플리케이션과 데이터베이스 간의 연결을 구성하는 과정을 다룹니다.JDBC를 통해 J..

Spring/강의 2025.06.26

[📕 JPA 심화] 1. 프로젝트 세팅

📕 목차JDBC 프로젝트 세팅JDBC Template 프로젝트 세팅QueryMapper 프로젝트 세팅QueryFileMapper 프로젝트 세팅JPA 프로젝트 세팅1. JDBC 프로젝트 세팅https://github.com/thesun4sky/jdbc/tree/jdbc GitHub - thesun4sky/jdbcContribute to thesun4sky/jdbc development by creating an account on GitHub.github.com2. JDBC Template 프로젝트 세팅https://github.com/thesun4sky/jdbc/tree/jdbc-template GitHub - thesun4sky/jdbcContribute to thesun4sky/jdbc develo..

Spring/강의 2025.06.26

[📘 심화 Spring] 3-4. N+1 문제

📘 목차N + 1 문제Fetch Join @BatchSize 어노테이션정리1. N + 1 문제 N + 1 문제 ORM 프레임워크(특히 JPA, Hibernate)를 사용할 때 가장 빈번하게 발생하는 성능 병목 현상이다.N + 11번의 쿼리로 기본 데이터(부모 엔티티)를 조회하고,이후에 N번의 쿼리로 연관된 데이터(자식 엔티티)를 각각 조회하는 상황을 의미한다.즉, 전체적으로는 N + 1번의 쿼리가 발생하여, 쿼리 수가 기하급수적으로 늘어나서 성능 저하를 유발한다. N + 1 문제 발생 원리와 과정부모 엔티티 한 번 조회 (1번 쿼리)예: 게시글 10개를 조회한다.쿼리 1번 실행 → select * from post자식 엔티티를 지연로딩 방식으로 각각 조회 (N번 쿼리)각 게시글마다 작성자(Memb..

Spring/강의 2025.06.09

[📘 심화 Spring] 3-3. JPQL (Java Persistence Query Language)

📘 목차JPQL 등장 배경과 한계기본 문법 반환 타입 및 결과 파라미터 바인딩 Embedded Type 프로젝션 (Projection) 페이징 (Paging) JOIN CASE 식함수1. JPQL 등장 배경과 한계 객체 중심 설계와 JPA 의 한계JPA는 객체(Entity) 중심의 데이터베이스 접근을 지향한다.단순 조회는 em.find() 또는 객체 간 참조 탐색으로 가능하다.모든 데이터를 객체로 불러올 수는 없음특정 조건 기반의 복잡한 검색은 불가능→ 조건 기반 조회가 필요한 상황에서는 SQL 같은 쿼리가 필요해짐 JPQL의 등장JPQL(Java Persistence Query Language)은 객체(Entity)를 대상으로 SQL과 유사한 문법으로 작성된 객체지향 쿼리 언어이다.특징Entity..

Spring/강의 2025.06.09

[📘 심화 Spring] 3-2. API 예외 처리

📘 목차@ExceptionHandler@ControllerAdvice@RestControllerAdvice정리1. @ExceptionHandler특정 컨트롤러 또는 컨트롤러 메서드 내에서 발생하는 예외를 처리하기 위해 사용한다.메서드에 붙이며, 처리할 예외 타입을 지정한다.특징해당 컨트롤러 내에서만 적용됨여러 예외를 하나의 메서드로 처리 가능 (파라미터에 여러 예외 타입 지정)@RestControllerpublic class UserController { @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { // 예외 발생 가능 return userService.findById(id); ..

Spring/강의 2025.06.09

[📘 심화 Spring] 3-1. Spring Bean 생명주기

📘 목차Bean 생명주기생명주기 콜백 종류Bean Scope와 생명주기1. Bean 생명주기Spring이 Bean을 생성하고 의존성을 주입한 뒤, 초기화 작업을 수행하고, 필요 시 종료 메서드를 호출하는 일련의 과정을 의미한다. 생명주기 요약 Spring Container 초기화Bean 인스턴스 생성의존성 주입 (DI)초기화 메서드 호출 (@PostConstruct, afterPropertiesSet())Bean 생성 및 의존관계 설정이 완료된 후 호출Bean 사용소멸 메서드 호출 (@PreDestroy, destroy())Bean이 소멸되기 직전에 호출Bean 소멸2. 생명주기 콜백 종류Spring은 Bean의 초기화와 소멸 시점에 사용자 정의 로직을 삽입할 수 있도록 다양한 콜백 수단을 제공한다. ..

Spring/강의 2025.06.09

[📘 심화 Spring] 2-2. JPA 고급 매핑

📘 목차프록시 (Proxy)지연 로딩 (Lazy) vs 즉시 로딩 (Eager)영속성 전이 (Cascade)고아 객체 (Orphan Removal)1. 프록시 (Proxy)JPA는 엔티티를 실제로 조회하지 않고도 프록시 객체를 통해 지연 조회(Lazy Loading)를 가능하게 한다. Entity 조회 방식 em.find(): 실제 객체를 즉시 조회한다.em.getReference(): 프록시 객체를 반환하며, 실제 객체는 필요 시 조회한다. (지연 로딩)Item item = em.getReference(Item.class, 1L); // 프록시 반환 프록시 특징실제 클래스를 상속받은 가짜 객체실제 데이터를 사용하는 시점에 쿼리 실행instanceof는 사용할 수 있으나, 프록시 초기화 여부는 주..

Spring/강의 2025.06.09