Spring 6과 MyBatis 3.5 유틸리티 클래스: 안전한 사용과 버전 경계
기준 환경: Spring Framework 6, Spring Boot 3, MyBatis 3.5.x, Java 17+. 유틸리티 클래스의 시그니처와 패키지명은 현재 의존성의 Javadoc을 기준으로 합니다.
1. Bean과 속성
BeanUtils.copyProperties는 얕은 복사를 수행하므로 매핑 프레임워크를 대체할 수 없습니다. BeanWrapper, DataBinder 및 ConversionService는 프레임워크 내부 바인딩에 적합하며, 대량 바인딩 시에는 허용할 필드를 제한해 사용자가 노출되어서는 안 되는 속성을 변경하지 못하도록 해야 합니다.
2. 리플렉션과 표현식
ReflectionUtils, MethodInvoker, SpEL 및 OGNL은 모두 입력 출처를 제한해야 합니다. 사용자 입력을 클래스명, 메서드명, 표현식 또는 SQL 조각으로 직접 실행하지 마세요. 표현식 캐시를 사용하더라도 권한 검사를 대신할 수는 없습니다.
3. AOP와 프록시
AopUtils, ProxyFactory 및 Advisor는 인프라스트ructure 구성요소입니다. 프록시 유형, self-invocation, Bean 생명 주기, JDK 프록시와 CGLIB 중 무엇을 선택할지는 실제 Bean 구성에 따라 판단해야 합니다.
4. SQL과 MyBatis
MyBatis의 #{}는 미리 컴파일된 매개변수를 사용하며, ${}에는 화이트리스트로 통제된 구조만 전달해야 합니다. 플러그인, 페이징, 테넌트 및 논리 삭제는 반드시 통합 테스트를 통해 최종 SQL을 확인해야 합니다.
5. 사용 원칙
이 유틸리티들은 개별적인 메커니즘을 해결하는 도구일 뿐, 범용 아키텍처가 아닙니다. Spring 6 또는 MyBatis 3.5의 마이너 버전으로 업그레이드한 후에는 예제를 다시 컴파일하고 지원 중단 예정 API, 패키지명 및 모듈 의존성을 점검해야 합니다.