본문 바로가기

IT/Spring9

MyBatis에서 동적 SQL 제대로 쓰는 법 (if, choose, where, trim) MyBatis는 SQL을 XML로 작성하는 방식이기 때문에, 동적 SQL 처리는 매우 중요합니다.실무에서는 입력값에 따라 조건을 달리하거나, 특정 필드만 업데이트하는 등 유연한 쿼리 작성이 필요합니다.이럴 때 MyBatis의 , , , 같은 동적 SQL 태그를 잘 활용하면 효과적으로 처리할 수 있습니다.1. : 조건 분기 처리의 기본가장 많이 사용하는 태그입니다.조건에 따라 SQL 일부를 추가하거나 생략할 수 있습니다. SELECT * FROM users WHERE 1 = 1 AND username = #{username} AND age = #{age} WHERE 1=1은 조건이 없어도 SQL 문법 오류가 나지 않게 하기 위한 패턴입니다.뒤에 오는 AND 조건들을 자연스럽게 .. 2025. 6. 7.
@Transactional이 작동하지 않는 진짜 이유 Spring에서 트랜잭션 처리를 할 때 가장 많이 사용하는 애노테이션이 @Transactional입니다.하지만 분명히 @Transactional을 붙였는데도 롤백이 되지 않거나, 트랜잭션이 작동하지 않는 현상을 겪는 경우가 많습니다.이 글에서는 그런 상황들이 왜 발생하는지, 그리고 어떻게 해결할 수 있는지 실제 사례 중심으로 살펴봅니다.✅ 기본 개념 정리@Transactional은 Spring AOP 기반으로 작동합니다.즉, 프록시 객체를 통해 메서드 호출을 가로채서 트랜잭션을 시작하거나 커밋/롤백을 결정합니다.❌ 트랜잭션이 작동하지 않는 흔한 원인1. 자기 자신 호출 (self-invocation)@Servicepublic class UserService { @Transactional pub.. 2025. 5. 24.
Spring - MySQL 대량의 데이터 삭제하는 법(batch) Spring 프로젝트를 하던 중 테이블의 1000만건 이상의 데이터를 삭제해야 하는 상황이 있었다. 처음에는 1000만 건의 데이터를 DELETE query 한번으로 했으나,이렇게 되면 인덱스가 잡혀있더라도 삭제 - 재인덱싱하는데 100초이상의 시간이 걸렸다. (컬럼 길이에 따라 다르겠지만..) 그래서 삭제 주기를 늘리는 대신 일정 단위만큼 나눠서 삭제하는 방법을 선택했다. 1.  MySQL 프로시저를 통해 삭제하는 방법SET @batch_size = 1000; -- 배치 크기 설정REPEAT DELETE FROM your_table WHERE your_index_column IN ( SELECT your_index_column FROM your_table .. 2025. 2. 9.
Spring Profile 설정법 2022. 1. 7.
반응형