백엔드/JPA

코드리뷰를 하던 중 동료 개발자 분 코드에서 1건 저장 행위만 하는 Service 레이어 메서드의 @Transactional 이 없는 것을 발견했습니다. 나: "어? 이게 있어야하지 않을까요?" 동료 개발자 : "1개 만 저장하는 건데 있어야 하나요?" 생각해 보니 딱히 이유를 찾지 못했습니다. 어차피 spring-data-jpa 구현체인 SimpleJpaRepository의 save 메서드에서 @Transactional 이 걸려있습니다. 분명 제가 본 강의에서는 서비스 레이어의 클래스에는 @Transactional(readOnly=true) 어노테이션을 붙이고 쓰기 메서드에는 @Transactional을 붙이는 방식을 많이 활용한다고 했는데 이유가 기억나지 않았습니다. 조금 더 검색해 본 결과 다음과 ..
HikariCP와 JPA로 프로젝트를 구성했는데, 갑자기 에러가 발생하였습니다. o.h.engine.jdbc.spi.SqlExceptionHelper : hikari-pool-1 – Connection is not available, request timed out after 30000ms. hikariCP의 옵션 중 connectionTimeout의 default 가 30000ms 인 것을 확인하고 왜 이런 일이 발생했는지 찾기 시작했습니다. hikariCP 의 Pool에 유지시킬 수 있는 connection 개수인 maximumPoolSize의 default는 10입니다. 에러의 발생 원인은 HikariCP 데이터베이스 커넥션 풀에서 커넥션을 가져오려고 시도했지만 사용 가능한 커넥션이 없거나, 요청이..
요즘 TDD를 조금 씩 실천해보고 있는 와중 이것 저것 해보다, JPA Repository테스트를 좀 더 가볍게 진행하기 위해 @DataJpaTest 어노테이션을 사용해 보았습니다. @DataJpaTest 어노테이션을 사용하게 되면 장점은 JPA 관련 테스트 설정만 로드하게 된다. 1번의 이유로 테스트가 좀 더 가벼워 진다. 내장형 인메모리 DB를 사용하여 실제 데이터 베이스를 사용하지 않고 테스트 할 수 있다. 기본 적으로 @Transactional 어노테이션을 포함하고 있다. 테스트가 끝난 후 롤백된다. 가 있고, 테스트 시에는 다른 DB를 사용하고 싶다면, test/resources/application.yml 파일을 만든 후 datasource를 설정합니다. // application.yml sp..
Batch Insert란? # insert INSERST INTO TABLE_A(name, phone) VALUES ('test1', '01000000001') # batch insert INSERST INTO TABLE_A(name, phone) VALUES ('test1', '01000000001'), VALUES ('test2', '01000000001'), VALUES ('test3', '01000000001'), VALUES ('test4', '01000000001'), VALUES ('test5', '01000000001') 만약 10,000 건의 insert가 필요한 경우, 1건 씩 DB에 요청을 하게되면 10,000 건의 커넥션을 맺게 된다. 서버에서 DB서버로 요청과 응답을 10,000번..
infitry
'백엔드/JPA' 카테고리의 글 목록