본문 바로가기
  • Where there is a will there is a way.

개발85

JPA 2차 캐시란 intro 우리는 개발할때 서비스에 데이터를 보여주기 위해서 애플리케이션에서 데이터베이스를 연결한다. 만약 실시간으로 변경되는데 영향도가 낮은 데이터를 보여주는데 매번 데이터베이스를 연결하면 어떨가? heap 메모리에서 데이터를 조회하는 것과 데이터베이스에서 데이터를 조회하는데 드는 시간비용을 비교한다면 수만에서 수십만 배 이상 비싸다고 한다. 그렇다면 인메모리 캐시를 이용해서 데이터를 저장한다면 훨씬 빠르게 데이터를 클라이언트에 보여줄 수 있지 않을까? 1차 캐시와 2차 캐시 2020/04/13 - [개발/spring-boot] - JPA 애플리케이션 영속성 관리 영속성 컨텍스트 내부에는 엔티티를 보관하는 영역이 있다. 이는 1차캐시라고 한다, 1차 캐시로도 이점이 많지만 애플리케이션 환경은 트랜잭션을.. 2020. 4. 26.
JPA 락 2020/04/23 - [개발/spring-boot] - spring transaction 이란 이전에 트랜잭션과 격리수준에 대해서 알아봤다. 트랜잭션의 격리수준을 보장하기 위해서 JPA 에서 락을 제공한다 이번 글에서는 JPA 의 락에 대해서 정리했다. JPA 락 락은 낙관적인 락과 비관적인 락이 있다. 낙관적인 락 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법이다. 데이터베이스가 제공하는 락을 사용하지 않고 애플리케이션이 제공하는 락이다. 비관적인 락 트랜잭션은 충돌이 발생한다고 가정하고 우선 락을 건다. 두번 갱신 분실 문제 ( second lost updates problem ) 두명이 동시에 같은 내용을 수정한다고 가정해보자 두명이 비슷한 시기에 수정완료 버튼을 눌렀다면 결.. 2020. 4. 25.
spring transaction 이란 나는 spring 개발을 하면서 흔히 서비스 메소드에 @Transaction 어노테이션을 보곤했다. 처음엔 아무것도 모르고 개발을 했었지만 점차 여러가지 문제에 직면하게 되었고 그러다 보니 Transaction 에 대해서 정리가 필요함을 느꼇다. 우리가 흔히 데이터를 처리하는 과정에서 트랜잭션에 대한 내용을 개념적으로나마 배웠었다. 트랜잭션은 논리적인 개념이고 4가지의 성질을 지닌다 Atomic Consistent Isolation Durability spring transaction 도 이 개념을 포함하고 있다. spring 은 @Transactional 로 표현하는데 이는 우리가 알고있는 어노테이션 방식으로 선언되어서 해당 메소드를 시행할때 메서드 위에 트랜잭션 기능이 적용된 프록시 객체가 생성된다... 2020. 4. 23.
JPA 애플리케이션 영속성 관리 처음 멘땅에 개발을 하면서 @Service Layer 에 @Transcational 을 본 기억이 많다. 그냥 아무 생각없이 붙이거나 붙여져 있는걸 보면서 개발했던 것 같다. 뭐 여러가지로 시간이 지나면서 어느정도 알게 되었지만 이참에 책에 나온내용을 토대로 정리해볼까 한다. 내가 정리할 내용은 스프링 + JPA 환경에서의 영속성 관리에 대해서이다. 1.1 트랜잭션 범위의 영속성 컨텍스트 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 이 전략은 이름 그대로 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다. 즉 , 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍.. 2020. 4. 13.
JPA 기초 프록시란 무엇인가 프록시란? JPA 구현체들은 연관된 객체들 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 이와 관련 된 기술이 프록시 인데, 이 프록시를 통해서 즉시로딩 ( EAGER ) 과 지연로딩 ( LAZY ) 을 할 수 있다. JPA 표준 명세는 지연 로딩 구현방법을 JPA 구현체에 위임했다. 하이버네이트는 지연 로딩을 지원하기 위해 프록시를 사용하는 방법과 바이트코드를 수정하는 두 가지 방법을 제공하는데 바이트코드를 수정하는 방법은 복잡하다. 프록시의 기초 JPA 에서 식별자로 엔티티를 하나 조회할 때 EntityManger.find(); or repository -> findById(); 이 메소드는 영속성 컨텍스트에 엔티티가 없으면 데이터베이스를 조회.. 2020. 4. 12.
SQL group by 와 기본적인 문법 이해 코딩인터뷰 완전분석에 나온 글을 인용했습니다. 조건 table Courses : courseID ( primaryKey ) , courseName , TeacherID Teachers : TeacherID ( primaryKey ) , TeacherName Student : StudenetID ( primaryKey ), StudentName StudentCourses : CourseID ( primaryKey ) , Student ( primaryKey ) group by 예제 1. 모든 학생의 목록을 뽑고 각 학생이 얼마나 많은 강의를 수강하고 있는지 확인하라 이 문제를 보게되면 우리는 다음과 같은 sql 을 작성할 수 있겠다. select Student.studentName , count(*) fr.. 2020. 3. 29.