BE/Spring & Spring Boot 62

[Spring Boot, Java] Cascade

Cascade (영속성전이)는 특정 엔티티의 상태변화 (예: 저장, 삭제)가 연관된 엔티티에도 전이되도록 설정하는 기능연관관계가 있는 엔티티들 간에 일일이 상태를 동기화하지 않아도, 부모 엔티티의 상태변화를 통해 자식 엔티티의 상태도 자동 변경된다종류1. CascadeType.PERSIST부모 엔티티를 저장할때, 연관된 자식 엔티티도 함께 저장된다자식 엔티티를 따로 persist() 하지 않아도 된다@Entitypublic class Parent { @Id @GeneratedValue private Long id; @OneToMany(cascade = CascadeType.PERSIST) private List children = new ArrayList();}// 사용 예시Pare..

[Spring Boot, JPA] 스냅샷

JPA에서 변경 감지(Dirty Checking) 기능을구현하기 위해 사용하는 내부 메커니즘 중 하나엔티티의 초기상태를 복사하여 저장한값을 의미, 이를 통해 엔티티 객체의 변경 여부를 감지할 수 있음 스냅샷이 필요한 이유JPA는 데이터베이스와 객체 간 동기화를 위해 엔티티의 변경 여부를 확인해야 한다이를 위해 엔티티가 영속성 컨텍스트에 저장될때 스냅샷을 만들어 초기 상태를 기록한다트랜잭션이 커밋되거나 flush()가 호출될때 현재 엔티티의 상태와 스냅샷을 비교하여 변경사항이 있는지 판단한다스냅샷 작동 방식1. 엔티티 영속 상태로 전환em.persist() 를 호출하거나 데이터베이스에서 조회하여 엔티티가 영속성 컨텍스트에 저장되면, 스냅샷이 생성된다스냅샷은 엔티티의 초기 상태를 복사하여 저장한 데이터2. ..

[Spring Boot, JPA] 영속성 컨텍스트

영속성 컨텍스트 (Persistance Context)JPA 에서 엔티티 객체를 관리하는 메모리 상 저장소.JPA는 영속성 컨텍스트를 통해 데이터베이스와 상호작용하며, 엔티티의 생명주기를 관리하고, 데이터베이스 작업을 효율적으로 처리한다핵심 개념1. 엔티티 관리영속성 컨텍스트는 엔티티 객체를 생성, 읽기, 수정, 삭제 등 다양한 방식으로 관리한다엔티티는 JPA에서 데이터베이스의 한 행에 해당하는 자바 객체를 말함2. 1차 캐시영속성 컨텍스트는 1차 캐시로 작동하며, 데이터베이스 접근을 최소화하기 위해 객체를 메모리에 저장한다동일한 트랜잭션 내에서 같은 엔티티를 다시 조회하면, 데이터베이스에 쿼리를 보내지 않고 1차 캐시에서 데이터를 반환한다3. 변경 감지 (Dirty Checking)영속성 컨텍스트는 엔..

[Spring Boot] @ManyToOne, @OneToMany

JPA 에서 사용하는 관계 매핑 어노테이션.데이터베이스 테이블간의 연관 관계를 자바 객체로 표현할때 사용.@ManyToOne (다대일 관계)의미여러개의 엔티티가 하나의 엔티티에 연결된 관계ex) 여러명의 학생이 하나의 학급에 소속되는 경우예제@Entitypublic class Student { @Id @GeneratedValue private Long id; private String name; @ManyToOne @JoinColumn(name = "class_id") // 외래 키를 매핑 private ClassRoom classRoom; // 한 명의 학생은 하나의 학급에 소속}다대일 관계를 나타냄JoinColumn은 외래키를 매핑하는데 사용, 위 예제에서는 cl..

[Spring Boot] Eager, Lazy

데이터베이스와 상호작용할때 연관된 데이터를 언제 가져올지를 결정하는 방식.주로 ORM(Object-Relational Mapping) 프레임워크(예: JPA, Hibernate)에서 사용된다.Eager (즉시 로딩)데이터를 즉시 가져오는 방식연관된 데이터까지 한번에 로드한다필요한 것 뿐만 아니라, 나중에 쓸지도 모르는 것 까지 미리 다 가져온다특징1. 즉시 로드객체를 조회할때 연관된 데이터도 함께 조회하여 메모리에 로드2. SQL 쿼리 증가 가능성연관된 모든 데이터를 가져오기 때문에 SQL 쿼리가 복잡하거나 많아질 수 있음3. 성능 저하 가능필요하지 않은 데이터를 가져오면 메모리를 낭비하거나 성능에 영향을 줄 수 있음 예시@Entitypublic class User { @Id @Generate..

[Spring Boot] IoC 컨테이너

IoC 컨테이너객체의 생성, 라이프사이클 관리, 의존성 주입을 책임지는 Spring프레임워크의 핵심 구성 요소이다제어의 역전(Inversion of Control, IoC) 원칙을 구현하여 애플리케이션의 객체와 객체 간의 의존성을 관리한다IoC객체 생성 및 의존성 관리를 개발자가 아닌 컨테이너가 담당하는 디자인 원칙이다즉, 객체는 자신이 사용할 의존성을 직접 생성하거나 관리하지 않고, 외부에서 주입받는다 IoC 의 핵심 개념객체 간의 결합도를 낮추어 코드 재사용성과 유지보수성을 높임애플리케이션의 구성 요소를 유연하고 확장 가능하게 설계IoC 컨테이너의 주요 역할1. 빈 등록 및 관리개발자가 정의한 빈을 생성하고 컨테이너에 등록빈의 라이프사이클(생성, 초기화, 소멸)을 관리2. 의존성 주입(DI)빈 간의 ..

[Spring Boot] 빈이란

빈(Bean)이란Spring IoC컨테이너에 의해 관리되는 객체를 의미한다Spring 애플리케이션에는 주요 구성 요소, 서비스, 리포지토리 등의 객체를 빈으로 등록하고 관리한다 특징1. 생성 및 관리Spring 컨테이너가 Bean의 생성, 초기화, 소멸을 책임진다개발자가 직접 객체를 생성하고 관리할 필요가 없다2. 의존성 주입(DI)빈 간의 의존성을 Spring이 관리하며 애플리케이션이 실행될 때 필요한 객체를 주입한다3. 싱글톤 기본 설정Spring 컨테이너는 기본적으로 각 빈을 싱글톤으로 생성하여 동일한 인스턴스를 애플리케이션 전반에서 공유한다 (필요시 다른 스코프를 지정 가능)4. 구성 파일 또는 어노테이션으로 정의XML 파일, 자바클래스, 또는 어노테이션을 통해 빈을 정의할 수 있다Spring B..

[Spring Boot] ApplicationRunner

ApplicationRunner란Spring Boot 애플리케이션 에서 애플리케이션 이 시작된 후 실행할 코드를 정의하기 위해 사용되는 인터페이스다.주로 초기화 작업이나 애플리케이션 시작 시 필요한 논리를 실행할 때 활용된다 특징애플리케이션 초기화 작업 수행 : 데이터베이스 초기화, 캐시 로드, 외부 API 호출 등Spring Boot 컨텍스트가 완전히 초기화된 후 실행 : 모든 Bean이 로드되고 애플리케이션 컨텍스트가 준비된 상태에서 실행된다CommandLineRunner와 유사 : 차이점은 `ApplicationRunner`는 `ApplicationArguments`를 사용하여 더 구조화된 방식으로 인수를 처리할 수 있다 ApplicationRunner 사용 방법1. ApplicationRunner..

[Spring Boot] ORM, @Query

ORM은 객체와 데이터베이스의 관계를 매핑하여, 객체지향 프로그래밍 언어의 객체를 데이터베이스의 테이블에 대응시키는 기술이다. 개발자는 SQL을 직접 작성하지 않아도 객체지향 방식으로 데이터를 다룰 수 있다 장점생산성 향상: 데이터베이스 쿼리를 객체지향 방식으로 다룰 수 있어 코드 작성이 단순해짐가독성 증가: 객체와 테이블 간 매핑으로 인해 코드가 더 직관적이고 읽기 쉬움유지보수 용이: 데이터베이스가 변경되더라도 매핑 설정만 수정하면 애플리케이션 수정 최소화데이터베이스 독립성: 특정 데이터베이스에 종속되지 않고 다양한 데이터베이스에서 동작 가능단점성능 오버헤드: ORM이 쿼리를 자동으로 생성하므로 직접 작성한 SQL보다 성능이 낮을 수 있음복잡한 쿼리 처리 어려움: 복잡한 비즈니스 로직이 필요한 경우 S..

[Spring] Spring 과 Spring Boot

1. Spring 프레임워크1.1. Spring이란Spring은 효율적으로 개발할 수 있도록 지원하는 경량 오픈소스 프레임워크기존의 복잡한 Java EE 기반 개발의 단점을 보완하여 등장POJO(Plain Old Java Object) 프로그래밍과 의존성 주입(DI, Dependency Injection) 및 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming) 같은 기능을 중심으로 설계됨1.2. Spring의 핵심 개념1.2.1. IoC (Inversion of Control)객체의 생성과 생명 주기를 개발자가 관리하지 않고, spring컨테이너가 관리주로 의존성 주입(DI) 으로 구현됨예 : `@Autowired` 를 통한 주입1.2.2. AOP (Aspect-Orient..