기존의 레거시 코드를 유지보수하던중 의문점이 드는 코드를 발견하였다.
전자정부프레임워크와 Mybatis를 기반에서 전역적으로 사용하는 공통 클래스가 abstract public class로 구현되어있고,
그 내부의 메소드는 static 형태로 존재하여 전역적으로 해당 method를 사용한다.
그런데, 해당 static 메소드 내부에서 Spring Bean에서 관리하는 @Service 객체를 직접 인스턴스를 생성하여 관련 처리를 하고있는것이다.
만약 위 static 메소드가 단순히 해당 메소드 내부에서 다른 어떠한 의존성을 가지지않는다면 static메소드로서 남아있으면 문제없겠지만, 해당 메소드가 Service 메소드와 의존성을 가진다면, 즉 스프링 컨테이너의 통제를 받는 다른 클래스와 연관을 가진다면 해당 메소드는 static이 아닌 스프링 컨테이너를 통해 의존성을 주입받는 형태로 변환 시켜야 한다고 생각하였다.
다른 연계된 로직들을 검토해본결과 해당 메소드가 꼭 static이 아니여도 관련 로직들을 처리하는데 문제가없다는 결론하에 static 메소드를 Spring Bean에 등록시켜 Singleton 인스턴스를 통해 해당 메소드를 호출하도록 변경하였다.
'Category > 개발일지' 카테고리의 다른 글
DB 데드락(deadlock) 해결사례 (0) | 2024.12.02 |
---|---|
데이터베이스 동시성 제어 문제_ 트랜잭션 전략 변경하기 (0) | 2024.10.11 |