지난 글에서 엔티티 매니저와 영속성 컨텍스트에 대해 설명했다.이번에는 이어서 영속성 컨텍스트에서 관리되는 프록시 객체와 객체 그래프 탐색시에 발생할 수 있는 N + 1 문제에 대해 이야기해보겠다.왜 프록시 객체가 필요할까?JPA를 사용하다보면 객체들끼리 복잡한 연관관계를 가지게 된다. 이때 필드에 List를 가진 엔티티를 상상해보면 해당 엔티티를 불러오기 위해 몇 천명, 몇 만명일지 모르는 유저 리스트를 데이터베이스에서 같이 꺼내와야하는 상황이 발생한다. 실제로 사용할 필드가 아니라고 해도 말이다.때문에 모양만 비슷한 가짜(proxy) 객체를 만들어서 사용하는 방법을 떠올렸다.이를 통해 JPA에서 어떠한 엔티티를 불러올떄, *데이터를 사용할 때까지 데이터베이스 조회를 지연시키는 * 것이 가능해졌다.그렇다..
자바의 경우 우리가 직접 메모리를 관리하는 영역이 적고,JVM이 메모리를 관리하는 만큼 메모리 누수를 크게 신경 쓸 필요없다.하지만 그만큼 JVM의 메모리 관리 방법을 모르다보면 이해할 수 없는 동작으로 인해 골머리를 썩히기도 한다.해당 글은 간단한 예제를 통해 객체 생성시에 일어나는 일들을 체감해보는 걸 목표로 한다. 자바의 런타임 메모리 영역 자바의 런타임 메모리 영역은 다음과 같이 나눌 수 있다.프로세스의 시작과 동시에 만들어지는 영역도 있고, 쓰레드의 시작과 종료에 맞춰서 생성/삭제되는 영역도 있다.메서드 영역 (Method Area)JVM이 시작될 때 생성되며 JVM이 종료될 때까지 유지된다.가비지 컬렉션에 의해 관리된다.클래스 데이터, 메서드 코드, 상수 풀, 필드, 메서드 데이터 등을 저장하..
Spring Web MVC는 Spring의 모듈 중 하나이며, 이름에서 볼 수 있듯이 MVC 디자인 패턴과 관련이 있다.Spring Web MVC가 하는 일을 간단하게 요약하자면 MVC 디자인 패턴을 따르는 웹 애플리케이션을 구현할 수 있도록 돕는 것이라 할 수 있는데, 어떻게 이를 가능하게 하는지 알아보자.MVC 디자인 패턴에 대해.먼저 MVC 디자인 패턴에 대해 말해보자.MVC는 Model, View , Controller를 의미한다. 다시말해서, MVC 디자인 패턴은 어플리케이션을 Model,View,Controller의 상호연결을 통해 구현하는 디자인 패턴이다. 이를 알기 위해 Model,View,Controller의 정의를 먼저 알아보자Model : smalltalk(MVC 패턴을 최초로 사용하..
엔티티, 도메인, 모델이 라는 단어를 혼용해서 사용하곤 한다.Java에서는 Domain을 더 많이 쓰고, C#에서는 Model이 더 많이 사용된다.찾아본 결과 엄밀하게 정의되지 않은 관념적 언어에 가까웠는데,이에 대해 여러 글들을 통합해서 적어보았다.Domaindomain is the conceptual area I’m working inside of.원문 글 The difference between domains, domain models, object models and domain objects - Code with JasonI recently came across a question regarding the difference between domains and domain models. Thes..
1.Entity ManagerEntity Manger란 무엇인가?The EntityManager is an API that manages the lifecycle of entity instances. An EntityManager object manages a set of entities that are defined by a persistence unit. Each EntityManager instance is associated with a persistence context.IBM에서 정의한 엔티티 매니저는, 엔티티의 인스턴스의 생명주기를 관리하는 API로,각 EntityManager 인스턴스는 영속성 컨텍스트와 연결되어 있는 것을 강조한다.그렇다면, 엔티티 매니저는 어떻게 생성되고, 어떻게 데이터..
DB Connection Pool이란데이터베이스 커넥션 풀(Database Connection Pool)은 데이터베이스와의 연결(Connection)을 미리 여러 개 생성해 두고, 필요할 때마다 이를 재사용하는 기술입니다. 왜냐하면 매번 데이터베이스 연결을 새로 생성하는 것은 시간과 자원을 많이 소모하기 때문입니다.(https://f-lab.kr/insight/understanding-database-connection-pool 참조) 이때의 커넥션 풀은 LISTEN 상태나 SYN-RECEIVED 상태의 소켓이 아니라,3-way-handshake를 통해 송신 버퍼와 수신 버퍼를 메모리에 탑재한 소켓(Established 상태의)을 말한다.번외. TCP/IP 연결의 3-way handshakeConnec..
sql은 선언형 질의언어이다. 즉, 무엇을 할지만 사용자가 기술한다면, 어떻게 할지는 데이터베이스 엔진이 결정한다. 따라서 우리가 SQL문을 작성하면 DBMS 내부 엔진이 어떻게 해당 결과를 만들어낼 지 프로시저(절차)를 작성한다.이때 해당 프로시저를 작성하는 것이 SQL 옵티마이저이다. 때문에 SQL 옵티마이저가 어떻게 프로시저를 작성했냐에 따라 쿼리의 성능이 달라질 수 있다.sql옵티마이저에 대한 다양한 내용 중 실제로 옵티마이저가 어떤 기준으로 실행계획을 선택하는지, 사용자가 특정 실행 계획을 선택할 수 있는지 Mysql 예제를 통해 알아보는 것을 목표로 한다.1.예제 데이터처음에는 H2를 사용하려고 했지만, H2의 explain 키워드의 경우 쿼리의 실행 비용을 보여주지 않기 때문에 Mysql을 ..
공식문서 참조https://docs.spring.io/spring-security/reference/servlet/exploits/csrf.html#csrf-token-request-handler-breach혼자 할 때는 잘되는데, 왜 같이 하면 오류가 나지?프런트엔드, 백엔드로 나누어서 협업을 하다보면 위와 같은 생각이 들 때가 많다.프로젝트의 복잡성, 소통의 문제 등 이유는 다양할 수 있지만 로그인에서 문제가 생겼다면 웹, 브라우저, 보안 정책에 대한 지식이 부족해서일 가능성이 높다.구현에 대한 내용보다는 왜 그런 문제가 발생했는지, 해결방법으론 무엇이 있을지에 대한 내용을 정리했다.1. 대부분의 문제는 프런트, 백엔드 배포주소가 다르기 때문.웹 개발자가 처음 협업을 할 때 CORS 오류는 피해갈 수..
- Total
- Today
- Yesterday
