jpa는 기본적으로 하나의 엔티티를 가져올 때, 연관관계에 있는 엔티티를 모두 가져온다. 사용하지 않는 엔티티까지 모두 가져오는 것은 굉장한 손해이다. 물론, jpa가 mybatis에 비해 쿼리 재사용성이 높으니 이 정도 손해는 감수해도 되지 않나(?) 라고 생각할 수도 있지만그럼에도 불구하고 사용하지 않는 엔티티를 가져오는것은 누가 생각하더라도 손해이다.이러한 손해를 해결해줄 수 있는 방법이 바로 "지연로딩 LAZY"이다. 이를 알아보기 전에 먼저 알고 있으면 도움이 되는 개념이 "프록시" 이다. jpa의 프록시는 실제 엔티티를 상속받은 가짜 엔티티이다. 따라서 실제 엔티티와 겉모양이 같고 실제 엔티티에 접근할 수 있는 권한이 있다.만약 내가 조회한 엔티티가 연관관계가 있는 엔티티이고 지연로딩을 사용..

영속성 컨텍스트영속성 컨텍스트란 jpa에서 엔티티를 db에 반영하기 전에 영속화하는 공간이다. 서버단에 존재하는 가상의 DB역할을 하는 일종의 메모리 공간이며 엔티티의 변화를 감지하여DB에 반영전 우선적으로 작업하는 공간이라고 생각하면 된다. 영속성 컨텍스트의 구조를 보면 위와 같이 영속성 컨텍스트는 EntityManger 안에 존재하며"1차 캐시 공간"과 "SQL 저장소"로 이루어져 있다.1차 캐시 안에서 사용자가 조회 및 수정한 엔티티가 관리되고SQL저장소는 사용자 SQL을 저장하여 트랜잭션을 커밋하는 시점에 일괄적으로 DB에 반영한다. 1차 캐시 공간에서 엔티티를 관리하니 내가 사용하려는 엔티티와 동일한 엔티티가 캐시공간에 있다면DB에 접근하지 않고 영속성 컨텍스트에 있는 엔티티를 사용할 수 있는것..
https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/#crayon-60fa2fbab27f7557869434 Storing UUID Values in MySQLKarthik Appigatla revisits a post Peter Zaitsev wrote on UUIDs (Universal Unique IDs), rearranging the timestamp and talks about storing UUID Values.www.percona.com 본 글은 위의 글을 참조하여 실제 데이터를 생성하여 테스트 해본 결과를 공유하는 것입니다. UUID 개념은 구글링의 많은 문서가 있으므로 가볍게 다루고 위 solution을 이해하는데 필요한 부..

안녕하세요. 오늘은 리액트(웹서버)와 스프링부트(was)를 연동해보겠습니다. 제가 그동안 관리해오던 어플리케이션은 was와 web서버를 구분하지 않고 was가 동적컨텐츠와 정적컨텐츠(html,css,script)를 모두 제공해주는 어플리케이션이었습니다. 이러한 형태는 was에서 모든 자원을 관리하여 was의 부하가 많은 구조입니다. web서버와 was를 분리하여 web서버에서 정적 컨텐츠를 처리하게 하고 was에서는 동적컨텐츠만 처리하게 한다면 상대적으로 많은 처리와 DB접근까지 해야하는 was의 부하를 어느정도 줄여줄 수 있습니다. 저 또한 이러한 부분 때문에 웹서버와 was를 별도로 분리하여 구성될 수 있는 프로젝트를 만들어 볼까 합니다. 프론트엔드 라이브러리로 가장 많이 사용되는 리액트와 스프링 부..

안녕하세요. 오늘은 형상관리 소프트웨어 깃에 대해 알아보겠습니다. 깃에는 크게 깃허브와 깃랩이 있습니다. 국내에서는 깃허브가 사용도가 굉장히 높고 깃랩은 깃허브에 비해 인지도가 현저히 낮죠. 깃과 관련된 형상관리 소프트웨어가 두개이지만 다행이 깃의 개념과 구조, 사용법 모두 같으니 두 소프트웨어를 각각 공부할 필요는 없습니다. 깃의 개념과 구조를 알면 형상관리를 하며 일어날 수 있는 위기상황에 적절한 대응을 하는데 큰 도움이 될 것입니다. 목차깃의 개념과 구조깃 연동깃 사용법(소스 올리기)깃 사용법(커밋내용 보기)깃 사용법(로컬 소스 복원)깃 사용법(잘못올라간 소스 복원)깃 사용법(소스 내려받기)브랜치 생성 및 원격지 머지 깃의 개념과 구조 깃은 위와 같은 구조로 이루어져있습니다. ..

B-tree (Balaced tree) Mysql DB는 인덱스 및 실제 데이터를 B-tree 알고리즘을 통해 관리한다. 각 노드는 하나의 페이지 형태로 여러 레코드 정보를 갖고 있다.페이지의 크기가 정해져 있기에 인덱스 키 값의 크기에 따라 저장할 수 있는 레코드 수가 달라진다.클러스터드 인덱스는 데이터 파일의 물리적 저장 방식을 결정하기에 리프 노드에 모든 칼럼 정보가 저장되며,세컨더리 인덱스의 경우 데이터의 주소로 클러스터드 인덱스 키값을 사용한다.따라서 세컨더리 인덱스로 조회하는 경우 클러스터드 인덱스를 한번 더 거쳐 조회되는 특징이 있다.세컨더리 인덱스 리프 노드에 데이터 주소가 아닌 pk 값을 할당하는 이유?데이터 주소를 사용하게 되면 데이터 변경, 이관, 분리와 같은 상황에서 이를 사용하는..

안녕하세요. 스프링프레임워크&부트 aws redis 연동(로컬에서 실서버까지) 3편입니다. 이전 포스팅에서 로컬환경에서 세션정보를 레디스 로컬 서버에 옮겨 관리 하게끔 했다면 이번 포스팅에서 실서버에서 작업을 해보도록 하겠습니다. 이전 포스팅을 안 보신 분들은 이전 포슽팅을 꼭 따라하신 후 이번 포스팅으 따라하시기 바랍니다. https://developer111.tistory.com/73 스프링 프레임워크 redis 연동(로컬에서 실서버까지)[1] 안녕하세요. 다중서버 환경에서 세션이 was 안에서 관리가 되면 세션 간의 공유가 되지 않아 특정 서버가 다운 되었을때 해당 서버의 사용자들은 다른 서버로 접속경로가 바뀌어도 로그인을 다 developer111.tistory.com 작업환경 aws ec2 am..

안녕하세요. 오늘은 스프링프레임워크&부트 redis 연동(로컬에서 실서버까지) 2편입니다. 지난번 포스팅에서 스프링부트를 통해 간단히 redis도 사용해보고 세션정보가 redis 서버로 전달됨을 확인했는데요. 이번 포스팅에서는 좀더 제대로 구현하고 테스트 하기 위해 스프링 시큐리티를 통해 로그인 인증 권한 관리가 되고 있는 프로젝트에서 세션정보 전달 뿐만 아니라 세션 관리까지 되는지 확인해보겠습니다. 로컬 환경 윈도우 OS 스프링 프레임워크 4.3.2 스프링 시큐리티 4.1.3 Redis-x64-3.2.100 mysql 5.5.2 빌드 툴 이클립스 레디스 설치 및 사용법은 이전 포스팅을 참조해주세요. https://developer111.tistory.com/72 스프링부트 레디스 연동하기(레디스 서버에..