본문 바로가기

Spring Boot Redis Subscriber 저번에 작성한 Spring Boot Redis Publisher에 이어 Subscriber 구현하는 방법입니다. spring-boot-starter-data-redis 라이브러리를 추가합니다. Redis 채널로부터 메시지를 수신하는 설정 클래스입니다. application.yml에 있는 Redis 메시지 채널명을 속성으로 받습니다.(18 ~ 19라인) Redis 메시지 수신 담당하는 redisSubscriberService 빈을 주입받습니다.(21 ~ 22라인) Redis 메시지 수신하는 컨테이너를 빈으로 등록합니다.(24 ~ 32라인) redisConnectionFactory를 통해 Redis에 연결하고, messageListenerAdapter를 통해 실제 메시지를 수신하는 리스너를 등록합니다. Re..
Spring Boot Redis Publisher 스프링 부트로 Redis Publisher 간단하게 구현하는 방법입니다. 스프링 부트와 Redis를 연계하기 위해 spring-boot-starter-data-redis 라이브러리를 추가합니다. 클라이언트로부터 채널명과 메시지를 받는 컨트롤러를 생성합니다. 채널명과 메시지를 Post 방식으로 받는 publish 메소드를 작성합니다.(21 ~ 33라인) 채널명과 메시지가 HttpBody로 전달되는 것을 자바 객체로 변환하기 위해 @RequestBody와 도메인 객체(RedisDomain 클래스)를 사용합니다.(22라인) Redis에 메시지를 발행하는 서비스의 메소드를 호출합니다.(26라인) Redis 데이터 연산처리를 하는 RedisTemplate를 주입받아 생성합니다.(14 ~ 17라인) 컨트롤러에서 전..
Spring Boot Session Store Type Redis 스프링 부트에서 세션을 redis에 저장하는 방법입니다. 저번에 세션 클러스터링 하는 방법으로 JDBC로 DB에 저장하는 글을 올렸는데 JDBC를 사용하는 것은 디스크 IO를 사용하기 때문에 성능면에서 부족한 점이 있습니다. https://tiqndjd12.tistory.com/253 Spring Boot Session Store Type JDBC 스프링 부트에서 세션은 주로 메모리에 저장합니다. 하지만 이렇게 했을 때 어플리케이션을 재부팅하면 세션이 초기화되는 단점이 있습니다. 이런 문제점을 해결하려면 어플리케이션 간의 세 tiqndjd12.tistory.com 이전에 작성한 스프링 부트 세션 JDBC에 이어서 하겠습니다. pom.xml에서 기존 spring-session-jdbc는 주석처리하고 spr..
docker install redis docker로 redis 설치하는 방법입니다. alpine 버전 이미지가 아닌 최신 공식 이미지를 다운받아서 진행하면 메모리 오버 커밋이나 실행 권한이 부족하다는 오류가 발생합니다. 그래서 alpine 버전 이미지를 다운받아서 진행했습니다. alpine 버전 redis 이미지를 검색합니다. alpine 버전 redis 이미지를 다운받습니다. 이미지 다운받았는지 확인합니다. 컨테이너를 생성해서 실행하면 정상적으로 올라온 것을 확인할 수 있습니다. 컨테이너에 bash가 없을 수 있기 때문에 접속하려고 하면 오류가 발생할 수 있습니다. 그런 경우 bash가 아닌 sh를 사용하면 컨테이너에 접속할 수 있습니다. 컨테이너 내부에 있는 redis 서버에 접속하여 정보를 확인합니다. 해당 글에 대한 정보는 아래 링크..
카카오프렌즈 컬러링북 프로그래머스에서 카카오프렌즈 컬러링북 문제를 풀었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/1829 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제에 대한 설명의 위의 링크에서 확인하시면 됩니다. DFS로 풀기 위해 재귀함수를 사용해서 풀었습니다. 문제는 해당 같은 색상의 영역을 구하는 것입니다. 같은 색상이어도 상하좌우로 연결되어 있지 않다면 같은 영역으로 취급하지 않습니다. 색상은 0보다 큰 수이기 때문에 0보다 큰 경우 탐색을 실행합니다.(37 ~ 43라인, 60 ~ 83라인)..
여행경로 프로그래머스에서 여행경로 문제를 풀었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제에 대한 설명은 위의 링크에서 확인하시면 됩니다. 저는 이 문제를 BFS로 풀어서 큐를 사용했습니다. 여행 경로의 출발지는 무조건 ICN(인천)이라서 출발지가 ICN인 티켓을 찾아서 큐에 추가하고 주어진 항공권 사용여부를 확인하기 위한 boolean 배열을 큐에 추가합니다.(35~47라인) 항공권을 조회해서 여행 경로를 탐색합니다.(51~88라인) ..
Spring Boot yml 외부 참조 스프링 부트 설정은 application.yml 파일로 하는데 application.yml 파일을 환경별로 두면 중복되는 부분이 발생하거나 환경별로 따로 참조해야 하는 경우가 발생합니다. 위의 application.yml 파일들을 보면 환경별 DB 접속 정보와 로그 파일 위치가 다르지만 암호화를 담당하는 Jasypt 빈은 중복되는 것을 알 수 있습니다. encyrpt.yml을 생성하여 중복되는 Jasypt 빈을 따로 관리합니다. 각 환경별 application.yml에서 spring.config.import 속성을 사용하여 encrypt.yml 파일을 참조하면 중복되는 Jasypt 빈을 스프링 환경에 적용할 수 있습니다. spring.config.import 속성은 외부에 있는 파일 정보를 참조하는 역할..
Spring Boot Session Store Type JDBC 스프링 부트에서 세션은 주로 메모리에 저장합니다. 하지만 이렇게 했을 때 어플리케이션을 재부팅하면 세션이 초기화되는 단점이 있습니다. 이런 문제점을 해결하려면 어플리케이션 간의 세션을 클러스터링 하거나 RDB 또는 메모리 DB에 저장하는 방법이 있습니다. 그중에서 RDB에 저장하는 방법을 포스팅하겠습니다. 앞에서 작성한 OAuth 프로젝트에 이어서 spring-session-jdbc 라이브러리를 추가합니다. https://tiqndjd12.tistory.com/252 Spring Boot OAuth2 로그인 스프링 부트에서 OAuth를 사용하여 소셜 로그인 기능 구현하는 방법입니다. OAuth를 지원하는 서비스가 많은데 그중에서 네이버 로그인을 사용하겠습니다. 먼저 네이버 로그인 서비스가 등록되어 tiq..