동시성 제어를 DBMS 관점이 아닌 java 관점에서 처리할 수 있는 방법을 알아보았다.
immutable 개념을 기반으로, DTO같은 자원을 static으로 처리하여 동시성 제어를 할 수 있지 않을까 생각하였는데, 일단 static 자체가 클래스 로더가 생성되면서 해당 클래스를 생성하게 되어 불필요한 메모리 낭비, 메모리 릭을 일으킨다고 한다.
동시성 제어를 하고자 하는 클래스(DTO) 내부에 LazyHolder 이너 클래스를 생성, 해당 DTO를 생성할때 이너 클래스를 생성하여 내부적으로 Singleton DTO 객체를 생성하고 이를 통해 thread safe한 동시성 제어를 구현할 수 있다.
class Singleton {
private Singleton() {}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
}
Singleton DTO = new Singleton();
DTO instance = DTO.getInstance();
...(동시성 제어)
문제가 현재 동시성 제어는 DBMS(쿼리 for update나 채번 테이블에서 wait를 통한 row lock) 차원의 조치로 대응이 가능하였는데, 더욱 규모가 큰 트랜잭션에서는 singleton을 이용한 동시성 제어를 하는 것이 효율적일 것 같았다.
singleton을 활용한 동시성 제어 - https://seunghyunson.tistory.com/28