spring

게시글이 올라왔을 때 게시글에 특정 키워드가 있는 경우 해당 키워드를 구독한 사용자에게 실시간으로 푸시 알람을 전달하기 위한 어플리케이션 설계 요구사항 게시글이 올라왔을 때 게시글에 특정 키워드가 포함되어 있으면, 해당 키워드를 구독한 사용자에게 알람을 보내야 한다. 하나의 게시글에 여러 키워드가 존재하고, 특정 유저가 여러 키워드에 대해 구독을 하고 있다면 알람을 한번만 보내야 한다. 게시글이 올라왔을 때 매우 빠른 시간 내에 알람을 보내야 한다. 일부 누락은 용인이 가능하다. 키워드의 개수가 100,000건까지 존재할 수 있다. 키워드가 매우 빈번하게 변경될 수 있다. 분산 환경에서 쉽게 scale out을 할 수 있어야 한다. 구현 아키텍처 이번 구현에서는 Push 로직에 집중하기 위해 Push A..
Spring Data Reids에서 Redis Streams를 구현 Redis Streams는 redis pub/sub과 다르게 message queueing system 즉 queue 형태의 자료구조에 publisher가 append하면, consumer가 데이터를 읽는다. 이때 consumer group 단위로 데이터를 읽을 수 있다. redis pub/sub과 다르게 redis 내의 메모리를 사용해 데이터를 저장하기 때문에 consumer는 놓친 부분부터 데이터를 다시 읽을 수 있다. publishing spring을 통해서 redis streams에 데이터를 append할 수 있다. low-level의 RedisConnection을 사용할 수도 있고, high-level의 StreamOperati..
Redis는 다양한 setup 환경에서 동작할 수 있고. 각 환경마다의 별도 설정이 필요 Redis Standalone single Redis Server를 사용할 때 가장 쉬운 방법 @Configuration class RedisStandaloneConfiguration { /** * Lettuce */ @Bean public RedisConnectionFactory lettuceConnectionFactory() { return new LettuceConnectionFactory(new RedisStandaloneConfiguration("server", 6379)); } /** * Jedis */ @Bean public RedisConnectionFactory jedisConnectionFactor..
Spring에서 Redis를 사용하기 위해서는 IoC Container를 사용해 spring과 redis를 연결해야 함 Java connector를 사용 Java connector를 통해 Spring Data Redis API를 통해 일관되게 동작하도록 할 수 있다. RedisConnection과 RedisConnectionFactory interface를 통해 이를 제공 RedisConnection and RedisConnectionFactory 해당 interface를 통해 redis와 연결 및 통신을 수행 그 외에도 Spring DAO Exception를 발생시키기 때문에 에러를 일관적으로 처리할 수 있도록 함 💡 Redis의 native library API가 직접적으로 필요한 경우에는 getNa..
빈 스코프란 빈 스코프 : 빈이 존재할 수 있는 범위 스코프 종류 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여 따라서 @preDestruct가 수행되지 않는다. 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지 session : 웹 세션이 생성되고 종료될 떄까지 유지 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지 스코프 설정 @Scope("prototype") @Component public class ProtoTypeBean{ ... } 프로토타입 스코프 프로토타입 스코프 : 빈 조회를 할 때마다 새로운 인스턴스를 생성해 반환 싱글톤 ..
빈 생명주기 콜백 시작 빈 생성 직후, 소멸 직전에 할 작업을 정의할 수 있다. 빈 생성 직후 : 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 어플리케이션 시작 시점에 필요한 연결을 미리 수행 빈 소멸 직전 : 연결을 모두 종료하는 작업을 수행 스피링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료 객채의 생성과 초기화 분리 위의 연결은 생성자를 통해서도 수행할 수 있다. 하지만 생성자와 초기화를 분리해서 코드를 작성하는 것이 유지보수 관점에서 좋다 생성자 : 필수 정보를 받고, 메모리를 할당해 객체를 생성 초기화 : 생성된 값을 활용해 외부 커넥션을 연결하는 등의 무거운 동작 수행 빈 생명주기 콜백 종류 인터..
larcane
'spring' 태그의 글 목록