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전략을..
객체지향프로그래밍 객체지향 프로그래밍이란, 문제를 여러개의 객체 단위로 나누고 객체들끼리 유기적으로 상호작용하도록 프로그래밍하는 방법이다. 공통된 특성을 하나로 추상화하고 그것들을 한 군데에 모아서 캡슐화를 통해 객체를 만든다. 새로운 객체가 그 객체를 상속받아서 다형성을 통해 기능을 수정하거나 추가하여 재사용할 수 있도록 한다. 추상화란, 객체들의 공통적인 특성을 하나의 묶음으로 나타내는 것. 아이언맨이라는 구체적인 클래스보다 마블 유니버스라는 추상화된 인터페이스를 만들어두면 스파이더맨, 토르, 블랙팬서 등을 기존 코드의 수정 없이 만들어낼 수 있다. 캡슐화란, 관련된 기능과 특성을 클래스라는 캡슐에 넣어놓은 것으로 관련 있는 것들끼리는 높은 응집도를 가지고 다른 객체와는 의존도를 낮게, 접근제어자를 ..
쿠키와 세션 HTTP 프로토콜은 요청에 대한 응답을 하고나면 연결을 끊고 클라이언트의 상태정보를 유지하지 않는다. 하지만 실제로는 로그인을 유지한다던가 선택한 상품을 다른 페이지에서도 봐야한다던가 하는 등 데이터 유지가 필요한 경우가 많다. 이러한 경우를 대처하기 위해 쿠키와 세션을 이용하는 것이고 둘의 차이는 정보의 저장 위치와 라이프사이클이다. 쿠키는 사용자의 PC 에 저장하는 작은 기록 정보이다. 사용자가 웹사이트에 접근을 했을 때 웹서버가 생성을 하고 쿠키에 정보를 담아서 HTTP 응답을 할 때 클라이언트에게 넘겨준다. 클라이언트는 그 쿠키를 로컬PC 에 가지고 있다가 서버에 요청을 할 때 쿠키를 함께 넘깁니다. 로그인 페이지에 아이디와 비밀번호를 저장한다던가 팝업창을 하루 동안 보지 않도록 체크..
URI와 URL 차이 URI는 네트워크상에서 자원을 식별하기 위한 문자열의 구성이고 URL은 네트워크상에서 자원이 어디에 있는지 알려주기 위한 주소이다. https://www.google.com 의 경우 URI 이면서 URL이다. https://www.google.com/images/cat.png 의 경우 cat.png 라는 자원의 위치를 가리키므로 URI이면서 URL이다. https://www.google.com/user?id=hello 의 경우 https://www.google.com/user 까지는 유저라는 자원의 위치를 가리키므로 URI이자 URL이지만 쿼리스트링으로 붙은 id=hello 부분은 자원 중에서도 식별하기 위한 문자열이므로 URI라고만 할 수 있다. MVC 패턴 애플리케이션을 Mode..
- Total
- Today
- Yesterday
- 정렬
- Spring
- 해시맵
- JPA
- 알고리즘
- SQL
- SQLD
- 스프링
- 리액트
- 프로그래머스
- dfs
- BFS
- 백준
- CS
- 형변환
- DP
- Nest
- Queue
- 이분탐색
- java
- 자바트리
- JavaScript
- Algorithm
- 스프링부트
- 자바
- 타입스크립트
- Comparator
- 자바bfs
- 자바스크립트
- 자바dp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |