inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

테이블 락 원인 궁금

43

백엔드공부화이팅

작성한 질문수 28

0

지금 제가 신입으로 와서 SM 하고 있는 서비스는 JSP + Spring4로 진행하고 있습니다.

현재 테이블 락이 너무 자주 걸려서 (데드락) 계속 머리가 아픈 상황입니다.

이게 왜 걸릴까에 대해서 한번 고민하고 있는데, 혹시 이 추측이 맞을까요 ? (폐쇄망이라 AI를 전혀 못 쓰는 상황입니다..)

특정 서비스 (비즈니스 로직)마다 상단에
ex.

@Inject
private SupplyEvaluationResultDao supplyEvaluationDao;

이런 식으로 DI를 하고 있습니다.

그리고

@Autowired
private DataSourceTransactionManager transactionManager;

이렇게 트랜잭션 메니저를 DI한 후 데이터를 업데이트 하는 서비스에서는 (U, D).. 서비스마다

DefaultTransactionDefination def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
Transaction status = transactionManager.getTransaction(status);

이것들을 매번 선언하고

모든 과정이 통과하면 transactionManager.commit(status);

특정 과정 진행 중 오류가 발생하면 transactionManager.rollback(status); 를 하고 있습니다.

근데 이게 SM이다 보니까, 여럿이서 개발을 진행해서 transactionManager.commit() 이나 transactionManager.rollback()을 안하고 Map 형태로 그냥 RES_CODE에 오류 코드, RES_MSG에 오류 메시지만 담아서 반환하는 경우가 있습니다.

서비스 메서드 위에서는 TransactionStatus까지 그대로 적용은 하는데...

resMap.put("RES_CODE", "0020");
resMap.put("RES_MSG", "파일은 금지된 형식입니다.");
return resMap;

트랜잭션 상태를 가져온 후 commit 이나 rollback 없이 그대로 Map을 반환해버린 경우
혹시 테이블 락이 발생하는 것일까요 ?

트랜잭션 상태를 끝맺음을 안 내서 테이블 락이 걸리는 것인지 가능성이 있는 것일지 궁금합니다 !

데드락

답변 0

데드락 탐지에서 강의 극후반에 LLockStack 관련한 질문입니다!

0

276

1

데드락 어떻게 해결할 지 궁금합니다.

0

375

1

수업의 코드가 이해가 안되어서 질문드립니다.

0

343

1

안녕하세요? 여쭤볼 곳이 없어 질문남깁니다

0

934

3