OSIV(Open Session In View) 영속성 컨텍스트를 뷰까지 열어두는 기능을 말한다. 뷰에서도 지연 로딩을 사용할 수 있어 스프링 프레임워크에서는 OSIV 사용 여부를 기본적으로 true로 설정하고 있다. JPA가 데이터베이스 커넥션을 언제 가져올까? 트랜잭션이 처음 발생할 때 데이터베이스 커넥션을 가져온다! 그렇다면 JPA는 데이터베이스 커넥션을 언제 종료할까? OSIV가 켜져 있는 경우 OSIV가 켜져있다면 Service, Repository 단에서 트랜잭션이 끝나도 영속 상태를 끝까지 유지한다. 그래서 데이터베이스 커넥션과 영속 컨텍스트는 컨트롤러 단에서 최종적으로 Response를 내보낼 때까지 살아있고 컨트롤러에서도 지연 로딩이 가능하다. 그러나 영속성 컨텍스트를 끝까지 유지한다는 ..
N+1이란? Lazy Loading을 사용할 때 일대다(OneToMany) 관계에서 흔하게 발생하는 문제로 일대다 관계가 설정된 엔티티를 조회할 때 다(N)에 해당되는 컬렉션의 데이터 개수만큼 조회 쿼리가 추가로 발생하는 상황을 말한다. 최종적으로 하나의 엔티티를 N+1번의 조회 쿼리로 읽어오면서 성능 상의 이슈가 발생한다. 예를 들어 하나의 게시물에 10개의 댓글이 달렸다고 생각해보자. 이 하나의 게시물을 읽어오는데에 게시물 조회 1번과 10개의 댓글 조회 10번, 총 11번의 조회 쿼리가 발생한다. 이 문제를 해결하기 위한 방법은 무엇이 있을까? 해결 방법 1. 엔티티 조회 방식을 최우선으로 사용하자. 1-1. Fetch Join으로 쿼리 수를 최적화한다. 먼저 ManyToOne, OneToOne 관..
JPA JPA(Java Persistence API)란 자바 진영의 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음을 의미한다. ORM ORM은 Object-Relational Mapping의 줄임말로 객체는 객체대로, 관계형 DB는 관계형 DB대로 설계하되 ORM 프레임워크가 중간에서 둘을 매핑해준다. Java와 같이 대중적인 언어에는 대부분 ORM 기술이 존재한다. ORM을 사용하면 개발자는 데이터베이스의 데이터를 객체처럼 관리할 수 있기 때문에 객제 지향적인 코드를 작성할 수 있다. 비즈니스 로직에 더 집중할 수 있으며 SQL을 사용하는 것에 비해 직관적이고 유지보수가 쉬워진다. JPA의 성능 최적화 기능 1차 캐시와 동일성(Identity) 보장 같..
Dependency Lookup(DL) 의존관계를 외부에서 주입받는 걸 Dependency Injection(DI)이라 불렀다면, 직접 필요한 의존관계를 찾는 것은 Dependency Lookup(DL)이라고 부른다. ObjectFactory와 ObjectProvider가 스프링에서 DL 기능을 제공한다. ObjectFactory, ObjectProvider ObjectProvider: 지정한 빈을 컨테이너에서 대신 찾아주는 DL 서비스를 제공한다. ObjectFactory: ObjectProvider의 구 버전 클래스이다. 스프링 컨테이너에서만 사용 가능하다는 단점이 있다. @Autowired private ObjectProvider prototypeBeanProvider; public int logi..
스프링의 빈 스코프 빈 스코프란 빈이 존재할 수 있는 범위를 뜻한다. 싱글톤 기본 스코프로 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프. 프로토타입 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 컨테이너가 생성, 의존관계 주입, 초기화까지만 관여해 종료 메소드가 호출되지 않는다. 웹 관련 스코프 request: 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session: 웹 세션이 생성되고, 종료될 때까지 유지되는 스코프 application: 웹의 서블릿 컨텍스와 같은 범위로 유지되는 스코프 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component public class HelloBean {}..
@Bean(initMethod = "method 명", destroyMethod = "method 명") Config 클래스에서 빈을 등록할 때 초기화 또는 소멸 메소드도 함께 지정할 수 있다. 스프링 뿐만 아니라 외부 라이브러리에서도 적용할 수 있다. destroyMethod를 설정하지 않으면 기본적으로 'close', 'shutdown' 이름의 메소드를 자동으로 호출한다. 소멸 메소드를 사용하고 싶지 않다면 빈 공백으로 남겨두도록 하자! 예시 @Configuration class LifeCycleConfig { @Bean(initMethod = "init", destroy = "close") public NetworkClient networkClient() { NetworkClient networkC..
- Total
- Today
- Yesterday
- atq
- 버추억박스오류
- GithubAPI
- cron시스템
- linuxtouch
- linuxgedit
- linux파일
- whatis
- 버추억박스에러
- linuxawk
- E_FAIL
- 백준27211
- cat
- baekjoon
- 리눅스
- awk프로그램
- virtualbox
- 리눅스cron
- 사용자ID
- OnActivityForResult
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- 백준
- Baekjoon27219
- GitHubAPIforJava
- Linux
- Baekjoon27211
- 쇼미더코드
- 백준27219
- api문서
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |