본문 바로가기

Spring boot15

Spring DI(Dependency Injection) Spring DI(의존성 주입)이란?A 객체에서 B, C객체를 사용(의존)할 때 A 객체에서 직접 생성 하는 것이 아니라 외부(IOC컨테이너)에서 생성된 B, C객체를 조립(주입)시켜 사용하는 방식이다. 의존성 주입은 스프링 컨테이너에 스프링 빈 모두 등록 -> 빈 관계 설정(연관관계 주입)의 순서로 이루어진다. 다만 예외적으로 생성자 주입 방식으로 DI를 수행하는 경우 빈 등록시 생성자가 호출되므로 빈 등록과 동시에 DI가 이루어진다. 의존성 주입을 사용하는 이유는 다음과 같다.유지보수 용이 만약 A클래스를 서로다른 100개의 클래스에서 사용해야 할 때 주입받지 않는다면 각 클래스는 A클래스를 직접 생성해야 한다. 그런데 만약 A클래스에 변경 사항이 생긴다면 100개의 클래스를 모두 수정해주어야 한다... 2023. 4. 24.
Spring Bean Spring Bean Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 한다. Spring Ioc (제어의 역전, Inversion Of Control) 일반적으로 처음에 배우는 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했다. 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출하는 것이다. 이때는 모든 작업을 사용자가 제어한다. 하지만 IoC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡기게 된다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됩니다. 요약하.. 2023. 4. 24.
JPA N+1 문제 N+1 문제란 N+1 문제란 1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것을 의미한다. 이는 1:N 또는 N:1 관계를 가진 엔티티를 조회할 때 발생하는데, JPA Fetch 전략이 EAGER인지 LAZY인지에 따라 두 가지의 경우로 나뉜다. 1) Fetch 전략이 EAGER일 때 특정 엔티티를 조회할 때 연관된 모든 엔티티를 같이 로딩하는 것을 즉시 로딩(EAGER Loading)이라고 한다. 집사 - 고양이의 관계를 표현할 때 다음과 같은 전제조건을 가지고 있다고 가정하자. 고양이 집사는 여러 마리의 고양이를 키우고 있다. 고양이는 한 명의 집사에 종속되어 있다. /** * @author Incheol Jung */ @Entity @Getter @Setter @NoArg.. 2023. 4. 17.
트랜잭션 전파 단계 트랜잭션의 개념 트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻하고, 아래와 같은 성질을 가진다. Atomicity(원자성) : 각 트랜잭션이 성공/실패하는 단일 단위로 처리되도록 보장한다. Consistency(일관성) : 모든 데이터는 규칙에 맞는 일관성을 보장한다. (제약조건, 트리거 등의 모든 규칙에 유효해야 한다) Isolation(고립성) : 트랜잭션은 다른 트랜잭션의 영향을 받지 않는다. Durability(지속성) : 트랜잭션이 성공하면 그 결과는 영구적으로 저장된다. 트랜잭션의 전파 트랜잭션 전파는 어떤 트랜잭션이 동작중인 과정에서 다른 트랜잭션을 실행할 경우 '어떻게 처리하는가'에 대한 개념이다. 트랜잭션의 전파 설정은.. 2023. 4. 17.
JPA 영속성 컨텍스트 JPA 엔티티 JPA에서 말하는 엔티티란 테이블에 대응하는 하나의 클래스라고 생각하면 된다. @Entity public class Account { String username; String password; } 그래서 JPA에서 '하나의 엔티티 타입을 생성한다' 라는 말의 의미는, '하나의 클래스를 작성한다'는 의미와 동일하다. 엔티티 매니저 엔티티 매니저란 여러 엔티티 객체를 관리하는 역할을 하는 것을 말한다. 여기서 말하는 '관리'란 엔티티 객체의 Life Cycle을 관리하는 것이다. 즉 엔티티 매니저는 관리하는 엔티티 객체들을 영속 컨텍스트(Persistence Context)에 넣어두고, 객체들의 생사를 관리한다. 이러한 엔티티 매니저는 엔티티 매니저 팩토리를 통해서 생성된다. 엔티티 매니저 .. 2023. 4. 17.
Spring batch에서의 Step, Tasklet, Chunk Step은 Job을 구성하는 하나의 단계로서, 실제 배치 처리를 정의하고 컨트롤하는 데 필요한 정보를 가지고 있는 객체이다. Job은 Steps라는 리스트 변수를 통해 여러 개의 Step을 담고, 각각의 Step들을 execute하여 실행시킨다. 또한 Step은 내부적으로 Tasklet이라는 속성을 가지고 있어 수행 중에 자신의 tasklet들을 execute한다. Tasklet은 ItemReader, ItemProcessor, ItemWriter와 같은 chunk 기반의 클래스들을 포함하고 있다. Chunk 여러 개의 아이템을 묶은 하나의 덩어리, 블록을 의미한다. 한번에 하나씩 아이템을 입력 받아 Chunk 단위로 트랜잭션(commit, rollback)을 처리한다. Item 하나를 읽고 또다른 It.. 2023. 3. 21.