728x90

transaction 3

(@Scheduled 관련) 스케쥴러 관련 메소드안에 JPA 저장하는 메서드가 같이 있을 경우 저장이 안되는 오류

스케쥴러 메소드안에 JPA 저장하는 메서드가 같이 있을 경우, 저장이 안되는 오류가 발생하였다. 스케쥴러가 돌면서 JPA의 프록시에 있는 값에 영향을 준다(프록시 초기화)고 한다. 또한, 트랜잭션 매니저가 @EnableTransactionManagement를 통해 DataSourceTransactionManager로 구성된 경우, 하이버네이트의 begin() 메소드가 AbstractTransactionImpl을 부르지 않는다고 한다. 해결 → @Scheduled 클래스와 @Transacional이 있는 xxService를 분리하여 해결한다. //예제 class schedule { @Schedule go() { service.call(); } } @Transactional class xxService { ..

Spring 2023.08.24

WITH (NOLOCK) 의 개념

MSSQL 은 기본적으로 SELECT 시 공유잠금(S Lock) 이 걸린다. 이는 MSSQL 의 기본 격리수준(Isolation Level) 이 Read Committed 이기 때문이다. 즉, DML(INSERT, UPDATE, DELETE) 작업중인 ROW 또는 TABLE 에 SELECT 할 경우,해당 작업이 끝나야 SELECT 할 수 있다는 의미이다. 만일 이렇게 수행된다면 DB의 성능은 떨어지고, 데드락(Deadlock) 이 발생될 수 있다. 이를 방지하기 위해 WITH(NOLOCK) 을 사용할 수 있다. WITH(NOLOCK) 의 격리수준(Isolation Level)은 Read Uncommitted 와 같다고 보면 된다. 즉, SELECT 할 ROW 또는 TABLE 이 잠겨있어도(작업중이여도) ..

MS-SQL 2022.12.13

[MSSQL]저장 프로시저 장단점, 사용 예제 정리

저장 프로시저 장단점 저장 프로시저의 장점 1) 프로시저만 수정이 필요할 경우 애플리케이션을 배포하지 않고 프로시저만 배포하면 됩니다. → 즉 어플리케이션 코드 내에 SQL 로직이 포함되었을 경우 애플리케이션도 재배포 해야하지만 프로시저 내에 포함될 경우 프로시저만 수정하여 배포하면 됩니다. 2) 자연스럽게 프로시저에 인자를 추가하여 바인드 변수를 사용하게 되므로 SQL 하드 파싱을 걱정할 일이 없습니다. → 어플리케이션 코드에 SQL 작성을 아래와 같이 하는 코드들이 종종 보입니다. [어플리케이션 레벨에서 작성된 Dynamic SQL 예] //strCOL1 : 입력마다 바뀌는 String 변수 String strSQL = "SELECT * FROM T1 WHERE COL1 = '" + strCOL1 +..

MS-SQL 2022.12.04
728x90