Framework 4

하이버네이트 배치와 기본키 생성 전략

배치에 관한 공부를 진행하다, 간단한 설정만으로 하이버네이트 배치를 활용해 여러 개의 insert 쿼리를 모아 한 번에 처리할 수 있다는 사실을 알았다. 하이버네이트 배치를 사용하면 여러 개의 쿼리를 한번에 모아서 처리하기 때문에 단건씩 쿼리를 수행할 때에 비해 DB와 통신하는 횟수가 줄어들고, DB에서도 락을 잡는 횟수가 줄어들어 실행속도가 향상된다. 설정은 다음과 같다. batch_size에 한꺼번에 insert/update를 실행할 크기만큼 설정하면 된다. applicaiton.yml spring: jpa: properties: hibernate: jdbc: batch_size:100 하지만 조금 더 조사해본 결과 크리티컬하게 주의해야 할 점을 발견했다. 하지만 조금 더 조사해본 결과 현재 프로젝트..

트랜잭션 커밋 단위 축소 - @Transactional

들어가며 @Transactional을 주의깊게 보게 된 계기는 배치 서버의 데이터 업데이트 때문이었다. 일별로 업데이트 해야 하는 데이터의 양이 증가하게 되면서, 스케쥴러들의 실행 시간이 겹치게 되었다. 이전에는 3:00AM, 4:00AM 등 한 시간 간격으로 스케쥴러 시간을 설정하였어도 충분히 스케쥴러를 겹치지 않게 돌릴 수 있었다. 하지만 데이터의 양이 증가하며 스케쥴러 실행 시간이 한시간이 넘어가게 되며 문제가 시작되었다. 여러 스케쥴러들의 실행 시간이 겹치고, 겹치게 실행되는 스케쥴러들이 동일한 DB table을 업데이트 하려다보니 업데이트 중 table lock이 걸려 timeout에러를 자주 맞이하게 되었다. table lock 이슈 때문에 timeoutException이 발생하는 이유는 트랜..

우리는 왜 스프링을 사용하는가? - Java spring의 특징

앞선 글에서 왜 우리가 프레임워크를 사용해야 하는 지 알아보았다. 짧게 짚고 넘어가자보자. 결국 개발자 입장에서는 검증된 코드를 이용해서 최소한의 부분만 바꾸어 빠르게 개발하기 위해서이며, 회사 입장에서는 누구에게 개발을 맡기던 일정 수준 이상의 결과물을 기대할 수 있기 때문이다. 그렇다면 Spring(Java), Django(Python), Flask(Python), Ruby on rails(Ruby), .NET Framwork 등 수많은 프레임워크 중 Spring은 어떤 장점이 있길래 사람들이 사용하는 것일까? 그렇다면 프레임 워크 중에서 왜 자바 스프링인가? 스프링은 여러 프레임워크들 중 자바(Java)를 기반으로 하는 프레임워크이다. 우선, 자바 스프링의 특징부터 알아보자. 이러한 특징들 덕분에 ..

우리는 왜 프레임워크를 사용하는가? - Framework & Library

"우리는 왜 자바 스프링을 사용하는가?" 라는 질문에 대답하기에 앞서 선행되어야 할 대답이 있다. 그것은 바로 "우리는 왜 프레임워크를 사용하는가?"라는 질문에 대한 대답이다. 결국, 스프링도 자바라는 언어를 활용해 만들어진 프레임워크이기 때문이다. 우선, 우리가 프레임워크를 왜 사용하는 지 대답하기에 앞서 Framework와 Library 각각을 알아보고, 이 둘의 차이까지 한번 알아보겠다. Framework 프레임워크는 뼈대나 기반 구조를 뜻하고, 제어의 역전 개념이 적용된 대표적 기술이다. 소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합'이라 할 수 있다. 완성된 어플리케이션은 아니기에 프로그래머가 완성시키는 작업을 해야 한다. 객체 ..