spring 8

JPA에서 단방향 및 양방향 일대일 관계의 외래키 처리와 지연 로딩 문제

JPA에서 단방향 및 양방향 일대일 관계의 외래키 처리와 지연 로딩 문제❗️일대일 대상 테이블에 외래키 단방향 관계는 JPA에서 지원하지 않으며, 양방향 관계만 지원합니다. [인프런 김영한님 자료]대상 테이블에 외래키가 존재하는 경우, 프록시 기능의 한계로 인해 지연 로딩으로 설정해도 항상 즉시 로딩됩니다.예를 들어, Member 객체를 가져왔을 때 JPA는 가져온 Member 객체에 Locker가 있는지 여부를 알아야 합니다. 1. 외래키가 Locker 에 있을 때외래키가 Locker에 있다면, Member 엔티티를 가져올 때 Member 클래스에 정의된 Locker가 존재하는지 확인해야 합니다. 이때 Member 테이블에는 외래키가 존재하지 않기 때문에, 지연 로딩 설정 여부와 상관없이 Locker ..

Framework/Spring 2024.07.22

Optional 클래스의 orElseThrow

Optional 클래스의 orElseThrow orElseThrow는 Optional 클래스의 메서드로, 값이 존재하면 그 값을 반환하고, 값이 존재하지 않으면 예외를 던지도록 설계되었습니다. 이 메서드는 Supplier 인터페이스를 통해 예외를 생성하는데, Supplier는 인자를 받지 않고 결과를 반환하는 함수형 인터페이스입니다. orElseThrow 메서드는 다음과 같이 정의되어 있습니다public T orElseThrow(Supplier exceptionSupplier) throws X { if (value != null) { return value; } else { throw exceptionSupplier.get(); }}이 메서드는 값이 존재하면 그..

Framework/Spring 2024.07.22

[Spring] Enum 타입으로 Exception 구현하기

[Spring] Enum 타입으로 Exception 구현하기기존에 예외 처리를 다음과 같이 Enum 타입으로 구현했습니다.public enum AdminException { FAIL_TO_SIGN_IN(HttpStatus.BAD_REQUEST, "로그인에 실패했습니다."); private final HttpStatus status; private final String message;} Enum 타입은 기본적으로 java.lang.Enum을 암시적으로 상속받기 때문에 extends 키워드를 사용할 수 없습니다. 따라서 상속 기능을 구현하기 위해 interface를 사용했으며, interface는 다중 상속을 지원하므로 아래 코드와 같이 enum 클래스들이 CustomException 인터페이스를 impl..

Framework/Spring 2024.07.22

[SPRING] Bean Scope

✔Bean scope란? Bean scope란 bean이 존재할수 있는 범위를 의미한다. 스프링이 지원하는 Scope 종류 (그대로 복붙임 수정해) 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. application: 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. ✔Prototype Scope 싱글톤 스코프에서 bean조회시 스프링 컨테이너는 항상 같은 인스..

Framework/Spring 2023.03.05

[SPRING] Bean Life cycle, call back

📌 커넥션풀, 소켓같은 애플리케이션 시작시점에 필요한 연결을 미리 해둔뒤, 애플리케이션 종료시점에 모든 연결을 종료하는 작업을 하기위해선 객체의 초기화 작업 및 종료 작업이 필요하다. 이를 Spring을 통해 할수 있는 방법을 알아본다. ✔ Spring Bean Life Cycle 스프링 빈은 다음과 같은 라이프 사이클을 가진다. 객체생성 ▶ 의존관계 주입 따라서 의존관계를 주입한뒤 개발자가 필요한 초기화 작업을 진행해야한다. 이때 Spring은 개발자에게 의존관계 주입이 완료되었다는것을 알려주기위한 초기화 콜백 을 제공하며, bean이 소멸되기 직전 즉 스프링 컨테이너가 종료되기 직전에 소멸전 콜백 을 알려주는 기능을 제공한다. ✔ Spring의 call back 인터페이스를 통한 콜백 Initiali..

Framework/Spring 2023.03.05

[SPRING] 의존관계 자동 주입

✔의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 public class MyService { private final MyRepository myRepository; @AutoWired public MyService(MyRepository myRepository) { this.myRepository = myRepository; } // ... rest of the class implementation } 위 예시처럼 생성자에 @AutoWired 설정을 통해 의존관계를 주입한다. 생성자를 통해 의존관계를 주입할때 생성자 호출시점에 1번만 호출되는것을 보장하도록 만들며 이는 불편,필수 의존관계에 사용한다.(주로) ❗❗이때, 생성자가 1개있다면 @AutoWired 생략이 가능하다...

Framework/Spring 2023.03.05

[SPRING] Component scan

기존엔 Appconfig.class에서 Spring bean으로 사용하려면 @Bean을 붙여줬지만 Component Scan을 사용하면 @Bean 없이 자동적으로 bean이 추가되도록 할수있다. @Configuration @ComponentScan( basePackages = "hello.core.member" ) public class AutoAppConfig { } @Component public class MemberServiceImpl implements MemberService{ ... @Component Scan을 설정정보에 붙이면 ComponentScan을 사용할수 있게 된다. 이렇게 되면 @Component설정정보를 가진 모든 클래스들이 (ex)MemberServiceImpl...) bea..

Framework/Spring 2023.03.03

[SPRING] Singleton

[SPRING] Singleton ✔Singleton pattern을 사용하는 이유 대부분 Spring 애플리케이션은 웹 애플리케이션이다. 웹 애플리케이션은 아래와같이 여러 클라이언트의 요청이 동시에 들어오는 경우가 많다. 이때 여러 클라이언트로부터 동시에 요청이들어오면 각 클라이언트마다 필요한 객체를 생성해야하고, 따라서 메모리낭비가 발생하게된다. 이러한 현상 즉 각 클라이언트마다 새로운 객체가 생성됨에 따른 메모리낭비를 해결해줄수 있는것이 Singleton 패턴이다. ✔Singleton pattern이란 Singleton pattern은 앞서말했듯 각 클라이언트마다 객체를생성하는게 아닌 클래스 인스턴스를 하나만 생성하여 모든 클라이언트에 대한 작업을 처리한다. ❗ Singleton을 생성하는 많은 방..

Framework/Spring 2023.02.26