Spring JPA 영속성 컨텍스트 EntityManager 영속성 컨텍스트 엔티티 생명주기 영속성 컨텍스트란, 애플리케이션과 데이터베이스 사이에서 엔티티를 저장하고 관리하는 논리적인 환경이다. EntityManager가 생성되면 논리적 개념인 영속성 컨텍스트가 1:1로 생성되고 EntityManager를 통해 접근할 수 있게 된다. 처음에 객체를 new 메서드로 생성을 하면 영속성 컨텍스트와 관계가 없는 비영속 상태이다. entitymanager를 생성하고 persist(객체) 를 하면 영속 상태가 되면서 영속성 컨텍스트 에 객체가 올라간다. 이 때 DB에 저장되는 것이 아니라 커밋이나 flush를 해야 DB에 저장되고 그 전까지는 영속성 컨텍스트에만 존재한다. 영속성 컨텍스트의 주요 역할로는 1차 캐..
스프링JPA를 이용할 때 나타날 수 있는 N+1 문제는 무엇이며 어떻게 해결해야 할까? N+1은 JPA를 이용해서 데이터를 조회할 때 한 개의 쿼리로 처리되길 기대했는데 N개의 추가 쿼리가 발생하는 현상으로 불필요한 리소스를 낭비하고 조회 성능을 악화시키는 문제이다. 예를 들어 멤버와 팀간 관계를 생각해볼 때, 한 명의 멤버는 하나의 팀을 가질 수 있고 팀 입장에서는 여러 명의 멤버를 가질 수 있는데 team1의 멤버를 findAll() 하게 되면 멤버들을 전체 조회하는 쿼리가 먼저 나가고 그 다음으로 멤버수만큼 멤버를 조회하는 쿼리가 추가로 나가게 되는 것이다. N+1문제가 발생하는 이유는 JPA와 JPQL의 동작 특성 때문이다. JPA가 JPQL을 분석해서 SQL을 생성할 때는 글로벌 Fetch전략을..
JPA와 ORM JPA는 자바 언어를 DB가 이해할 수 있도록 하는 번역기라고 할 수 있다. 원래 DB는 SQL이라는 언어를 사용해서 객체를 저장하거나 불러올 수 있는데 매번 DB와 소통할 때 SQL을 작성하게 되면 객체지향적으로 프로그래밍을 할 수가 없다. 이러한 객체지향과 관계형 DB간 패러다임 불일치를 해결하기 위한 기술이 ORM 프레임워크이고 자바 진영의 ORM 기술 표준이 JPA이다. JPA는 개발자가 SQL을 작성하지 않아도 적절한 SQL을 생성해서 DB와 소통하고 객체를 Mapping해주기 때문에 생산성을 크게 높일 수 있고 DB를 바꾼다고 해도 매핑 정보가 class로 명시되어 있기 때문에 쿼리를 수정할 필요가 없어 유지보수에 유리하다. 그러나 쿼리가 자동으로 생성되는 만큼 개발자가 의도하..
양방향순환참조에러, Stackoverflow: null 에러내용 미니프로젝트 중 comment를 등록하면 로그에 stackoverflow: null이라는 메시지와 함께 무한 로그가 출력되며 서버가 터졌다. 로그에는 post["comment"] -> comment -> member -> post["comment"] 이런식으로 찍혀있어 무한 순환참조가 일어나는 듯 했다. 원인 JPA에서 양방향으로 연결된 entity를 JSON형태로 직렬화하는 과정에서 서로의 정보를 계속해서 순환하여 참조하여 stackoverflow가 발생한 것이다. Spring Boot는 @ResponseBody(rest api)를 구현할 시 Object를 JSON 형태로 변환하기 위해 Jackson 라이브러리를 이용하는데, Jackson..
What I Learned JPA를 이야기 하기 전에 ORM(Object-Relational Mapping)을 알 필요가 있다. ORM이란 객체는 객체대로 생성을 하고 관계형 데이터베이스는 데이터베이스대로 설계를 한 후에 ORM이라는 프레임워크가 중간에서 매핑해주는 기술이다 개발자는 오로지 매핑하는 방법만 전달해주면 되는 것이다. JPA는 이러한 ORM을 위한 표준 인터페이스(기술)이다.데이터베이스는 SQL 이라는 언어를 사용하기 때문에 자바 언어로 명령을 내릴 수가 없다. 또한 데이터베이스별로 문법이 조금씩 다르기 때문에 데이터베이스에 종속될 수 밖에 없는데 JPA는 개발자가 직접 SQL을 작성하지 않고 JPA가 SQL을 생성하여 DB와 소통함으로써 객체지향 프로그래밍을 할 수 있게 된다. JPA는 워..
- Total
- Today
- Yesterday
- JPA
- SQLD
- Algorithm
- java
- dfs
- 프로그래머스
- 형변환
- SQL
- BFS
- JavaScript
- 자바트리
- Spring
- 정렬
- 자바dp
- 타입스크립트
- Nest
- 자바스크립트
- Comparator
- 스프링
- 자바
- 백준
- 이분탐색
- 자바bfs
- 해시맵
- 스프링부트
- Queue
- DP
- 리액트
- CS
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |