2025 년 02 월 19 일 TIL
✅ 오늘 할일
- CS책 독서
-
디자인 패턴
프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계등을 이용하여 해결할 수 있도록 하나의 규약 형태로 정의한 것
- 싱글톤 패턴
하나의 클래스는 하나의 인스턴스를 가지는 패턴
보통 데이터베이스 연결 모듈에 사용한다.
장점 : 하나의 인스턴스를 사용해 다른 모듈들이 공유해 사용하여 인스턴스 생성 비용을 줄일 수 있다
단점 : 미리 생성된 인스턴스를 기반으로 구현하는 패턴이라 테스트마다 독립적인 인스턴스를 만드는것에 제한된다, 의존성이 높아진다
- 해결 방법
부가 적으로 옛날에 동시성 제어할때 Synchronized를 사용한적이 있는데 @Transactional 과 같이 쓸때 문제점을 한번 정리해보자Synchronized 인스턴스를 반환하기 전 까지 격리 공간에 놓기위해 Synchronized 로 잠금 최초로 접근한 스레드가 해당 메서드를 호출 시 다른 스레드가 접근하지 못하도록 lock을 건다 => 메소드를 호출 할 때 마다 Lock이 걸리기 때문에 성능이 저하된다.
Synchronized는 한 프로세스 내에서만 스레드의 접근제한을 보장한다. 즉 분산 환경에서는 동시성이 제어가 되지 않는다 @Transactional는 데이터베이스 트랜잭션 관리하고 트랜잭션이 커밋될 때 까지 다른 트랜잭션이 동일한 데이터를 수정하는 것을 방지한다. 또 Spring의 @Transactional은 프록시 기반으로 동작하기 때문에 같은 클래스 내에서 호출될 경우 트랜잭션이 제대로 적용되지 않을 수 있다. 따라서 Synchronized는 DB 트랜잭션을 고려하지 않고 JVM 내부의 스레드만 제어하기 때문에, 실제 DB 에는 동시 수정이 발생할 수 있다. => 비관적락,낙관적락을 고려 할 수 있고 추후 분산락을 고려할 수 있다.
'TIL' 카테고리의 다른 글
2025년 02월 18일 TIL (1) | 2025.02.18 |
---|---|
2025년 02월 17일 TIL (1) | 2025.02.17 |
[TIL] 스파르타 백엔드 캠프 (0) | 2024.12.10 |
[TIL] 스파르타 백엔드 캠프 & 트러블 슈팅 (2) | 2024.11.28 |
[TIL] 스파르타 백엔드 캠프 & 트러블 슈팅 (1) | 2024.11.15 |