전체 글

나와 더불어 성장할 개발새발 블로그
JPA

[JPA] saveAll() 문제점과 JDBC를 통한 해결

개요Spring data repository의 saveAll() 메서드는 그 이름 덕분인지, 여러 개의 데이터들을 하나의 쿼리로 처리할 것만 같다. 하지만 실제 적용해보니 예상과는 다르게 동작하는 부분들이 있었기에 기록으로 남겨보려 한다. 문제customerCreditTransactionRepository.saveAll(creditTransactions);100개 정도 되는 데이터를 한 번에 저장할 일이 있었다. 나는 위 코드처럼 saveAll()을 통해서 하나의 쿼리로 처리할 수 있을 줄 알았다. 하지만 실제 동작은 데이터를 각각의 INSERT 쿼리로 처리하는 것 아닌가... 원인왜 saveAll() 메서드가 한 번에 쿼리로 처리하지 못하는 것일까? 원인은 JPA의 기본키 생성 전략이였다. @Ent..

Language/Java

[Java] ReentrantLock을 통한 스레드 동기화

동기화란스레드 개념의 도입으로 하나의 프로세스에서 여러 스레드들이 동시에 작업을 처리할 수 있게 되었지만, 스레드들이 프로세스의 자원을 공유하며 Race Condition이나 데이터 불일치와 같은 동시성 문제들이 발생하게 되었다.여러 스레드가 접근할 때 동시성 문제가 발생할 수 있는 공유 자원을 임계 영역이라 하며, 동시성 문제가 발생하지 않으려면 임계 영역에 하나의 스레드만 접근할 수 있도록 해야한다. 스레드 간의 수행 시기를 맞추어 동시성 문제를 예방하는 것을 동기화라고 하며,자바에서도 멀티 스레드 상황에서 동시성 문제를 해결할 수 있는 여러 동기화 방법들을 제공한다. synchronized의 단점synchronized는 자바에서 동기화를 위한 가장 대표적인 키워드이다.자바에서 모든 객체는 모니터 ..

Language/Java

[Java] 자바 스레드 생명 주기와 메모리 가시성

자바 스레드 생명 주기자바 스레드의 생명 주기는 시작부터 시작하여 실행, 일시 중지, 종료의 상태를 갖고 있다. 1. New - 스레드가 생성되고 아직 시작되지 않은 상태2. Runnable - 실행될 준비가 됐거나, 실제로 실행 중인 상태3. Blocked - 동기화 락을 기다리는 상태, synchronized에서만 사용하는 특별한 스레드 대기 상태4. Waiting - 다른 스레드의 작업이 완료되기를 무기한 기다리는 상태5. Timed Waiting - 스레드가 일정 시간 동안 대기하는 상태6. Terminated - 스레드의 실행이 완료된 상태 join - 다른 스레드의 작업 대기class SumTask implements Runnable { int startValue; int endV..

kkang._.h00n
깡훈인뎁쇼