트러블 슈팅(8)
-
Batch INSERT 데드락
최근 업무 중에 INSERT 문에 대해 갑자기 데드락이 발생한 로그가 남았었습니다. 에러 로그가 발생한 쿼리는 아래와 유사한 형태의 쿼리였습니다.INSERT INTO `TABLE` (colunmA, columnB) VALUES (valueA, valueB), (valueA2, valueB2) ON DUPLICATE KEY UPDATE ... MySQL에서 데드락 관련 로그를 확인해보니 예시와 같은 형태인 두 개의 Batch INSERT 쿼리가 문제였습니다. 구글링으로 찾아보니 Batch INSERT 구문은 트랙잭션의 걸린 여러 개의 구문처럼 동작하기 때문에 각각의 쿼리에 포함된 데이터의 PK가 겹치게되면 데드락이 발생할 수 있다고 나와있었습니다.Query A:INSERT INTO my_table (pk,..
2025.07.03 -
Spring Batch Transaction Executor Type 오류
최근에 회사에서 Spring-Batch로 개발을 하면서 다음과 같은 오류를 보게되었습니다.org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction제가 당시에 사용하던 코드는 아래와 같은 모양이었습니다.@Beanpublic MyBatisPagingItemReader mybatisPagingItemReader() { ...}@Beanpublic ItemWriter itemWriter() { return (chunk) -> { modelMapper.insertModelList(chunk.getItems()); ..
2025.01.01 -
Spring boot jar 파일 실행시 profile 적용
기존에 제가 담당하던 시스템을 매우 Legacy한 시스템입니다.최근에 spring boot를 적용하고 생성된 jar 파일을 실행시키는데 profile이 제대로 적용되지 않는 상황이 발생했습니다.여러 자료들을 찾아보니 jar 파일을 실행새키면서 profile을 적용하는 방법은 총 2가지가 있었습니다.Java System Propertiesjava -jar -Dspring.profiles.active={프로파일} 파일위치 java option현 구조에서 주의해야할 사항은 -Dspring.profiles.active 옵션이 파일 위치보다 앞에 있어야 합니다. 만약 그렇지 않다면 실행시 profile을 인식하지 못 합니다.Program Argumentsjava -jar 파일 위치 --spring.profiles..
2024.12.21 -
MySQL select insert Deadlock
최근 업무 중에 시스템에 아래와 같은 에러 로그가 발생한 것을 보았습니다. java.sql.SQLException: Deadlock found when trying to get lock; try restarting transaction Query: update … 에러 로그가 발생한 쿼리는 아래의 예시와 같은 단순한 update 구문이었습니다. UPDATE `TABLE` SET `column1` = `column1` WHERE `column2` = `column2`운영환경에서 사용하는 DB는 MySQL이었고 모든 설정은 default 설정으로 되어 있었습니다. MySQL에서 deadlock 관련 로그를 확인해보니 에러가 발생한 update 구문의 테이블과 동일한 테이블을 사용하는 SELECT INSERT..
2022.10.20 -
Ajp Protocol packetSize 제한 오류
최근 Tomcat과 Apache를 연동하는 도중에 Apache에서 다음과 같은 에러 메시지가 나타났습니다. [Fri May 13 19:09:51 2022] [79415:140343571771968] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (1409): (node2) wrong message size 65536 [Fri May 13 19:09:51 2022] [79415:140343571771968] [error] ajp_get_reply::jk_ajp_common.c (2289): (tomcat) Tomcat is down or network problems. Part of the response has already been sent to t..
2022.05.19 -
Public Key Retrieval is not allowed
MySQL 8.0 이상의 버전의 DB 로 접속하려고 하는데, Public Key Retrieval is not allowed라는 에러가 발생했습니다. MySQL 8.0 미만의 버전에서는 주소값, 데이터베이스, 드라이버이름, 유저아이디, 패스워드 등만 가지고 있으면 DB 접속이 가능했습니다. 하지만 MySQL 8.0 이상의 버전부터는 보안적인 이슈로 useSSL=false와 allowPublicKeyRetrieval=true 설정을 추가해줘야합니다.J JDBC 주소를 예시로 하자면 아래와 같습니다. jdbc:mysql://localhost:3306/database?allowPublicKeyRetrieval=true&useSSL=false
2022.01.22