전체 글
-
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..
-
🤔 JWT공부방 2022. 10. 14. 20:40
⌨️ 로그인 방식 로그인을 처리하는 방법으로 생각할 수 있는 방법 유저에게 ID / Password를 받아 서버의 DB에 있는 데이터와 비교하는 방법 세션 방식 사용 Token 방식 사용 ID / Password 사용 방법 👎 로그인 유지가 되지 않는다. 페이지를 이동할 때마다 로그인을 다시 해야한다. ⇒ 로그인을 유지하면서 안전한 방법이 필요하다. 세션 방식 👊 - 서버 유지 세션 방식은 서버의 메모리, DB와 같은 서버의 자원들을 사용해 사용자의 정보를 유지시키는 방식이다. 토큰 방식보다 보안에 강하다 세션을 사용하는 경우 매 Request마다 서버는 쿠키를 받아, 세션 ID를 보고 해당 ID와 일치하는 유저를 찾아야한다. 요청이 있을 때마다 세션 DB를 조회해야 한다. ⇒ 유저가 증가할 수록 DB ..
-
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→ 객체 객..
-
CheckedException 과 UncheckedException☕️ java 2022. 10. 10. 14:57
에러(Error) 와 예외(Exception) 에러(Error)는 시스템에 비정상적인 상황이 발생한 경우를 말한다. 시스템이 종료되어야 할 수준의 상황 애플리케이션 코드에서 잡을 수 없다. → 개발자가 미리 예측하여 방지할 수 없다. ex) OutOfMemoryError, ThreadDeath, StackOverflowError 등 예외(Exception)은 개발자가 구현한 로직에서 발생한 실수 또는 사용자의 영향에 의해 발생한다. 개발자가 **미리 예측하여 방지할 수 있기에 상황에 맞는 예외처리(Exception Handle)**를 해야한다. Checked Exception과 Unchecked Exception으로 구분할 수 있다. ✔️ Checked Exception RuntimeException을 ..