분류 전체보기
-
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을 ..
-
가비지 컬렉션(GC) ❓☕️ java 2022. 10. 10. 13:40
🗑️ Garbage Collection (GC) 가비지 컬렉션은 자바의 메모리 관리 방법중 하나이다. JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역중 필요없게된 메모리 영역을 주기적으로 삭제하는 프로세스 C 나 C++에서는 이런 가비지 컬렉션이 없어 프로그래머가 수동으로 메모리를 할당하고 해제해줘야 한다. 반면, Java는 JVM에 탑재되어 있는 가비지 컬렉터가 메모리 관리를 대신해주어 개발자는 메모리 관리 메모리 누수(memory leak) 문제에 대해 완벽하게 관리하지 않아도 되고 개발에 집중할 수 있다. 메모리 누수 (memory leak) 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상 할당된 메모리를 사용한 다음 반환하지 않고 누적이 되어 메모리 누수 발생 장 / 단점 장점..
-
Java version 별 특징☕️ java 2022. 10. 9. 20:01
Java 8 Lambda stream interface default method Optional new Date, Time API Lambda Java 8 이전 익명 클래스의 사용을 람다를 이용해 더 간결하고 직관적으로 구현을 할 수 있게 되었다. 람다식 (Lambda Expression) 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현을 하면 메소드 이름이 필요 없어, 람다식은 익명 함수의 한 종류라고 볼 수 있다. 불필요한 코드를 줄이고, 가독성을 높였다. 함수형 인터페이스의 인스턴스를 생성하여 함수를 변수처럼 선언한다. Runnable runnable = () -> System.out.println("Hello, World!"); Stream Java 8은 str..