🌱 spring
-
JPA - Embedded Type🌱 spring 2022. 11. 2. 17:23
🗂 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 값 타입 Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체를 의미 식별자가 없고 값만 존재 → 변경시 추적 불가 값 타입 분류 기본 값 타입 자바 기본 타입 (int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입 컬렉션 값 타입 임베디드 타입(Embedded Type) ❓ 복합 값 타입을 의미한다 새로운 값 타입을 직접 정의할 수 있다. JPA는 임베디드 타입 이라고 불려진다 주로 기본 값 타입을 모아서 만들어서 복합 값 타입이라고 한다. 직접 정의한 임베디드 타입도 int, String 처럼 값 타입이다!!! ⭐ 사용방..
-
Spring Scheduler🌱 spring 2022. 10. 24. 17:08
📌 Spring Scheduler @Scheduled Spring Scheduler는 @Scheduled 어노테이션을 명시해 사용할 수 있다. 보통 실행하고자 하는 메소드명 위에 명시 Scheduler가 정상 작동하기 위해서는 스프링 어플리케이션에서 Scheduling을 활성화 시켜주어야 한다. @EnableScheduling 어노테이션을 클래스 위에 명시해 활성화 시킨다. 사용하고자 하는 클래스 위에 명시할 수 도 있고 @SpringBootApplication 이 위치한 클래스 위에 명시해도 된다. 동작 Spring Scheduler는 동기적으로 스케줄러를 실행한다. 옵션 fixedRate fixedDelay Cron fixedRate 작업의 시작부터 시간을 카운트한다. @Scheduled(fixedR..
-
Filter, Interceptor🌱 spring 2022. 10. 11. 14:30
Spring은 공통적으로 여러 작업을 처리해 중복된 코드를 제거할 수 있도록 많은 기능을 지원한다. 필터(Filter) vs 인터셉터(Interceptor) 인터셉터와 AOP 📌 필터(Filter) 💡 필터(Filter)는 Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. Dispatcher Servelt은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리가 된다. ⇒ 일반적으로 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할 때 사용한다. 즉, 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 된다 스프링 빈으로 등록은 된다. 디스패처 서블릿 전 / 후..
-
OSIV 🧐🌱 spring 2022. 10. 11. 02:24
OSIV (Open Session In View) 💡 OSIV는 영속성 컨텍스트를 뷰까지 열어둔다는 의미 영속성 컨텍스트가 살아있으면 엔티티는 영속상태로 유지가 된다. 따라서, 뷰에서도 지연로딩을 사용할 수 있다. 스프링 컨테이너의 기본 전략은 트랜잭션 범위의 영속성 컨텍스트 전략이다. 따라서, 서비스 계층에서 조회한 엔티티는 서비스와 리포지토리 계층에서는 영속성 컨텍스트에 관리되지만, 컨트롤러라 뷰 같은 프레젠테이션 계층에서는 준영속 상태가 된다. 프레젠테이션 계층에서는 영속성 컨텍스트에서 제공하는 기능을 사용하지 못한다 지연로딩 기능을 사용하지 못한다. @Controller public class UserController { @PostMapping("/api/v1/users") public void..
-
JPA - N + 1 문제🌱 spring 2022. 10. 11. 01:44
💡 연관관계가 설정된 엔티티를 조회했을 때 조회하려는 엔티티와 연관관계를 맺고 있는 엔티티들의 수만큼 추가로 쿼리가 N번 실행된다. 1번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가 실행 이러한 현상을 N+1 문제라고 한다 즉시 로딩과 지연 로딩 둘다 N+1 문제가 발생한다. 지연 로딩은 N+1 문제가 발생하지 않는 것처럼 보이지만 막상 개게를 조회하려고 하면 N+1 문제가 발생한다 결국 발생되는 시점만 다를 뿐이다. 발생 상황 1 : N 또는 N : 1 관계를 가진 엔티티 조회시 발생 언제 Fetch 전략이 EAGER일 때 데이터를 조회하는 경우 Fetch 전략이 LAZY일 때 데이터를 가져온 이후 연관관계인 다른 엔티티를 다시 조회하는 경우 왜 JPQL은 기본적으로 글로벌 Fetch 전략을 ..
-
영속성 컨텍스트🌱 spring 2022. 10. 11. 00:49
영속성 컨텍스트 ❓ 영속성 컨텍스트란 엔티티를 관리하는 영역으로, key-value 형태로 엔티티를 관리한다. key는 엔티티의 식별자 값이고 value는 엔티티 그 자체 따라서 식별자 값이 꼭 필요하다. 특징 엔티티 매니저를 생성할 때 하나 만들어진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하고 관리할 수 있다. 엔티티 생명주기 비영속 : 영속성 컨텍스트와 관계가 없는 새로운 상태 영속 : 영속성 컨텍스트에 저장된 상태 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 : 삭제된 상태 비영속 엔티티 객체를 생성했지만 아직 영속성 컨텍스트에 저장하지 않은 상태 영속 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태 영속성 컨텍스트에 의해 관리가 된다. 준영속 영속성 컨텍스트가..
-
JPA와 Hibernate, Spring data JPA🌱 spring 2022. 10. 10. 22:21
ORM ❓ ORM (Object Relational Mapping) 객체 관계 매핑 객체가 테이블이 되도록 매핑시켜주는 프레임워크 프로그램의 복잡도를 줄이고 자바 객체와 쿼리를 분리할 수 있어 트랜잭션 처리나 DB관련 작업들을 좀 더 편리하게 처리할 수 있다. SQL Mapper vs ORM SQL Mapper SQL ← mapping → 객체 Mybatis의 프레임워크 SQL Mapper는 SQL문으로 직접 DB를 조작한다. 직접 SQL문을 작성해 복잡한 쿼리도 처리할 수 있다. 관계를 직접 명시할 수 있다. 단점 SQL문을 직접 작성해야 한다. 객체모델과 관계 모델을 각각 개발해야해서 유지보수가 힘들다. DBMS마다 SQL문이 달라 DBMS에 종속적이다. ORM DB 데이터 ←mapping→ 객체 객..
-
Spock 로 테스트 해보기🌱 spring 2022. 10. 6. 13:53
Spock ❓❓❓ Spock 는 BDD(Behaviour-Driven Development) 프레임워크 이다. Java 및 Groovy를 위한 테스트 프레임워크 내부적으로 JUnit Runner로 구동되며, 대부분의 IDE에서 지원된다. TDD 프레임워크인 JUnit 과 비슷한 점이 많지만, 기대하는 동작과 테스트의 의도를 더 명확하게 드러내주고 산만한 코드는 뒤로 숨겨주는 등 큰 장점이 있다. 기존 JUnit의 단점 테스트시 중복 코드가 많다. JUnit, Hamcrest, Mockito를 알아야 코드를 이해할 수 있다. Spock 시작하기 spring-boot : 2.7.4 java : 11 build.gradle testImplementation'org.spockframework:spock-core..