spring 8

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

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

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(); }}이 메서드는 값이 존재하면 그..

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..

Spring 2024.07.22

[SPRING] Bean Scope

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

Spring 2023.03.05

[SPRING] Bean Life cycle, call back

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

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 생략이 가능하다...

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..

Spring 2023.03.03

[SPRING] Singleton

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

Spring 2023.02.26