전체 글
-
JPA의 쓰기지연 기능 확인해보기 (transactional write-behind)개발/JPA & Hibernate 2021. 7. 16. 19:00
JPA의 특징중 하나는 영속성 컨텍스트 (Persistence Context)내에서 쓰기지연(transactional write-behind)이 발생한다는 것입니다. 이 글에서는 JPA와 Mybatis를 이용해 쓰기지연을 했을때와 안했을 때를 비교해보려고 합니다. (Mybatis는 쓰기지연을 하지 않습니다.) 쓰기지연이란? (transactional write-behind) 영속성 컨텍스트에 변경이 발생했을 때, 바로 데이터베이스로 쿼리를 보내지 않고 SQL 쿼리를 버퍼에 모아놨다가, 영속성 컨텍스트가 flush 하는 시점에 모아둔 SQL 쿼리를 데이터베이스로 보내는 기능입니다. 사전 지식 - 영속성 컨텍스트는 동일성(Identity)를 보장한다. - 영속성 컨텍스트는 1차 캐시의 역할을 한다. 즉 객체..
-
스트링을 new 로 생성하는 것과 " " 로 생성하는 것의 차이개발/Java 2021. 7. 13. 01:06
" "로 생성한 스트링의 경우 문자열이 힙 영역에 존재하는 String Pool에 상수로서 저장되고 그 값을 꺼내씁니다. 동일한 문자열이 반복적으로 사용될 때, 문자열을 새로 생성하지 않고 String Pool에서 기존에 존재하는 상수를 꺼내옴으로써 메모리를 절약합니다. 💡 String Pool은 java6 까지는 Non-heap Area에 속한 PermGen에 위치했는데, Java7 부터 heap 으로 이동하였습니다. 반면 new로 생성한 스트링은 다른 객체들처럼 heap 영역에 객체로서 생성됩니다. 아래 테스트를 통과합니다. @Test void StringPool에서_동일한_문자열을_가져온다() { String hello1 = "hello"; // string pool String hello2 = "..
-
주소 DB 로딩 (+ 반복되는 쿼리를 스크립트로 한번에 생성)프로젝트/BLUE DELIVERY 2021. 7. 11. 17:35
목적 프로젝트를 진행하면서 주소DB를 활용할 일이 있었는데, 이 과정에서 하드코딩(?)의 어려움과 팀원이 같은 환경을 구성하는데 어려움을 겪을 수도 있다는 점이 문제점으로 다가왔습니다. 그래서 이 문제를 해결한 과정을 공유하기 위해 작성하였습니다. 개요 배달어플 프로젝트를 진행하다가 주소 정보가 필요해졌습니다. 유저가 카테고리를 선택하면 지정한 주소로 배달이 가능한 가게들을 보여줘야 합니다. 그런데 String 타입으로 주소를 저장하면 같은 이름의 구나 동이 존재하면 구분이 불가능하며 띄어쓰기 하나로 다른 주소가 될수 도 있습니다. 검색해본 결과 이미 여기서 주소관련 데이터베이스를 제공하고 있었습니다. 우선 저에게 필요한 것은 다음과 같습니다. 배달가능지역을 표시하기 위해 '동' 단위의 주소를 구별할 수..