본문 바로가기

Java192

Singleton Pattern 싱글턴 패턴 싱글턴 패턴의 특징싱글턴 패턴은 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다.- 싱글턴이 Lazy 방식으로 생성되도록 구현할 수 있습니다.- 자원을 많이 잡아먹는 인스턴스에 특히 유용합니다 ( 애플리케이션이 시작될 때 객체가 생성되는 전역변수로 선언하는 것보다 자원을 아낄 수 있습니다.) 멀티스레딩 문제- 멀티스레드 환경에서는 동시 접근 문제 때문에 의도치 않게 여러 인스턴스가 만들어질 수 있다.- 단순히 public 접근자에서 인스턴스 유무를 가지고 판단하게 되면 인스턴스가 여러개 생성될 수 있다class Singleton { private static Singleton instance; private Singleton() {} public static S.. 2025. 9. 7.
팩토리 메서드 패턴 vs 추상 팩토리 패턴 팩토리 메서드 패턴과 추상 팩토리 패턴은 객체 생성을 캡슐화 하는 패턴이며,클라이언트와 구상 클래스가 서로 분리된 유연한 디자인을 구현할 수 있게 도와준다. 팩토리 메서드: “어떤 구체 Product를 만들지”를 하위 Creator가 결정한다추상 팩토리: “어떤 제품군(여러 Product 계층) 을 만들지”를 팩토리 인스턴스 교체로 결정한다언제 어떤 패턴을 쓰나?팩토리 메서드한 제품 계층만 다루고, 구체 타입 선택을 상속(하위 Creator) 으로 바꾸고 싶을 때.상위 로직(템플릿) 속에서 객체 생성 지점을 오버라이드로 바꾸고 싶을 때.클래스 수가 비교적 적고 “템플릿 메서드” 흐름이 중요할 때.추상 팩토리여러 제품 계층(예: Button/Checkbox/…)이 세트(제품군) 로 맞물려야 할 때.런타임.. 2025. 9. 7.
Quartz 라이브러리 기본 구성 ✅ Quartz의 기본 구성 요소 구성요소 설명Job실제로 수행할 작업을 정의한 인터페이스 (org.quartz.Job)Spring에서는 @Component, @DisallowConcurrentExecution 등으로 관리 가능JobDetailJob 인스턴스를 정의하고 구성하는 정보 객체 (Job의 클래스, 이름, 그룹, 데이터 등 포함)Job 클래스에 대한 메타 정보라고 할 수 있고, 동일 Job이라도 파라미터 달리 해서 여러 개 만들 수 있음TriggerJob이 언제 실행될지를 정의 (시간, 주기, 조건 등)단일 Job에 여러 개도 붙을 수 있음JobDataMapJob 실행 시 함께 전달할 데이터(Map 구조)JobDetail과 Trigger 양쪽에서 설정 가능. 병합되어 Job에 전달됨Schedul.. 2025. 4. 5.
스케줄러 cron 설정을 Global Properties 값으로 변경 스케줄러의 실행 시점을 설정해주는 cron 설정에 Enum상수의 필드값을 사용할 수 없었습니다.private String every30Minutes = ServerProperties.SCHEDULER_CRON.getValue();@Scheduled( cron = every30Minutes, zone = "Asia/Seoul" ) @Transactional public void findExpiredMembers(){실행 결과 : error: element value must be a constant expression @Scheduled( cron = every30Minutes, zone = "Asia/Seoul" ) ^이는 컴파일 타임에 @Sched.. 2024. 7. 1.
ChannelGroup과 GlobalEventExecutor ChannelGroup 생성 시 왜 GlobalEventExecutor 를 사용하는지, GlobalEventExecutor 가 어떤건지 여쭤보셨습니다.  GlobalEventExecutor 가 단일 스레드 싱글톤 EventExecutor라는 내용은 알고 있었지만 어떻게 동작하는지는 알고 있지 않아서 이에 대해 알아보고자 합니다. ChannelGroup우선 ChannelGroup은 채널을 저장할 수 있으며, Channel이 닫히면 ChannelGroup 컬렉션에서도 자동으로 제거되는 Netty 제공 인터페이스입니다. 여러 Channel을 그룹화하여 관리하는 인터페이스라고 볼 수 있습니다.ChannelGroup 은 스레드 안전하며, 하나의 channel은 여러 ChannelGroup에 속할 수 있고, 소속된.. 2024. 7. 1.
@TransactionalEventListener @transactionalEventListener 가어떻게 이벤트를 인식하여 리스너를 실행하는지 알아보겠습니다. Spring에서의 Spring event의 실행 단계 : 생성 주체에서 이벤트를 발생하면 이벤트 디스패처에게 전달이벤트 디스패처가 이벤트 핸들러를 연결이벤트 핸들러에서 이벤트에 담긴 데이터를 통해 원하는 기능을 실행이번에 사용한 @TransactionalEventListener 는 적용할 메서드의 매개변수에 이벤트 객체를 정의해주면 지정한 이벤트가 발생했을 때 수신해서 처리할 수 있습니다. (이 점은@EventListener 와 동일)또한 이벤트 발행자의 트랜잭션을 기준으로 이벤트 실행 시점을 조절할 때 사용할 수 있습니다.option :AFTER_COMMIT (default) : 트랜잭션이 .. 2024. 7. 1.