
언론사나 매거진 등은 구독 서비스를 제공한다. 해당 매체에 구독을 신청하게 되면 구독자가 직접 매체에 방문하지 않더라도 매체에 새로운 글이 발행되는 등의 이벤트에 따라 구독자에게 메일을 전송해 알려준다. 그럼 구독자는 메일을 보고 글을 읽는 등의 이벤트를 처리하게 된다.옵저버 패턴은 이와 동일하다. 옵저버 패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다. 옵저버 패턴의 참여자는 둘로 나뉜다.주제 객체(subject) : 언론사나 매거진 같이 데이터를 제공하는 객체옵저버(observer) : 주제 객체를 구독하고 있는 객체 옵저버 객체들은 주제 객체를 구독한다. 주제 객체의 상태가 업데이트되면..

스프링을 배웠다면 수도 없이 많이 들었던 개념 중 하나가 싱글턴 패턴일 것이다. 스프링은 빈으로 등록된 객체들은 기본적으로 싱글턴으로 관리되기 때문이다. 객체들 중에는 사실 단 하나만 존재해도 되는 것들이 있다. 스레드 풀이나 로그 기록용 객체 등이 이에 해당한다. 예를 들어 스레드 풀 객체가 두 개가 존재한다고 생각해 보자. 어떤 객체는 스레드 풀 A에서, 또 어떤 객체는 스레드 풀 B에서 스레드를 가져와 사용했을 때, 스레드 풀 A에서 가져다 쓰는 객체의 호출 빈도가 높다면 A 스레드 풀 내의 스레드는 쉴 틈 없이 사용되고 있을 것이고 이에 비해 B 스레드 풀의 스레드들은 놀고 있는 상황이 되어 모든 자원을 효율적으로 사용하지 못해 성능을 온전히 낼 수 없게 된다. 즉, 하나만 존재해도 되는 객체가 ..

SpringBoot에서 RabbitMQ의 메시지를 처리하다 예외가 발생하게 되면 어떻게 될까? `Consumer.receiveMessage(User user)` 메서드에서 일부러 `RuntimeException`을 발생시켜 보자.public void receiveMessage(User user) { System.out.println("Received "); throw new RuntimeException("message processing failed");} 저번에 메시지를 보내는 것과 동일한 테스트 코드를 실행시킨다.@Testpublic void obj_message() throws InterruptedException { User user = new User("name", "email..