🌱 spring
-
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..
-
MVCC🌱 spring 2022. 10. 5. 18:58
동시성 제어 (Concurrency Control) ❓동시성 제어 ❗DBMS가 다수의 사용자 사이에서 동시에 작용하는 다중 트랜잭션의 상호간섭 작용에서 DB를 보호하는 것. 동시성을 허용하면 일관성이 낮아진다. 비관적 동시성 제어 사용자들이 같은 데이터를 동시에 수정할 것이라고 가정 SELECT 시점에 Lock을 걸어 트랜잭션이 완료될 때 까지 유지한다. ⇒ 시스템 동시성을 심각하게 떨어뜨린다 → wait 또는 no wait 옵션 사용 낙관적 동시성 제어 사용자들이 같은 데이터를 동시에 수정하지 않을 것이라고 가정 데이터 조회(SELECT)시 Lock을 걸지 않는다. ⇒ 수정 시점에 다른 사용자에 의해 값이 변경됐는지 검사가 필요하다. 목표 동시에 실행되는 트랜잭션 수를 최대화하면서 입력, 수정, 삭제,..