[백업][가리사니] 스프링 부트 레디스 세션 연동
redis, spring

이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.

스프링 부트 세션 시리즈

서론

이번엔 저번에도 소개한적있는 key-value 데이터베이스 레디스를 스프링세션에 연동하는 강의를 써보도록 하겠습니다. 레디스 소개 : 윈도우에서 Redis (레디스) 설치

레디스 설치

데비안 계열 (우분투등..)

> sudo add-apt-repository ppa:chris-lea/redis-server
> sudo apt-get update
> sudo apt-get install redis-server
> sudo vim /etc/redis/redis.conf
  • vim 을 예제로.. 적당히 설정을 보고 고쳐줍니다.
  • 특별히 설정을 하지 않아도 됩니다. -필자도 포트정도만.. 윈도우 https://github.com/MSOpenTech/redis/releases
  • 다운받아 설치 기타 리눅스/유닉스등.. http://redis.io/download

레디스 데스크탑 매니저

레디스 GUI 관리 툴 입니다.

  • 설치 : https://redisdesktop.com/ 접속해보시면 db0 부터 db15까지 16개의 데이터베이스가 있습니다.

메이븐 설정

<!-- 스프링 세션 -->
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session</artifactId>
	<version>1.2.1.RELEASE</version>
</dependency>
<!-- 스프링 레디스 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-redis</artifactId>
</dependency>

properties 설정

필자는 db관련 프로퍼티는 별도로 저장하기 때문에 application.properties 가 아닌 프로젝트/src/main/resources/database.properties 에 저장하였습니다.

#레디스
redis.host: 호스트
redis.port: 포트
redis.database: 데이터베이스번호(위 매니저에서봤던 0~15범위내 숫자[데이터베이스번호])

세션설정

@Configuration
@EnableRedisHttpSession
@PropertySource("classpath:database.properties")
public class SessionConfig
{
	@Value("${redis.host}")
	String host;

	@Value("${redis.port}")
	int port;

	@Value("${redis.database}")
	int database;

	@Bean
	public JedisConnectionFactory connectionFactory()
	{
		JedisConnectionFactory conn = new JedisConnectionFactory();
		conn.setHostName(host);
		conn.setPort(port);
		conn.setDatabase(database);
		conn.setUsePool(true);
		return conn;
	}

	@Bean
	public CookieSerializer cookieSerializer()
	{
		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
		// 위 레디스 처럼 serializer 의 각종 설정 가능.
		// tomcat context 로 설정한 쿠키 기능들도 여기서 설정가능.
		return serializer;
	}
}

테스트

세션 스코프빈은 다음 강의에서 할 예정이니 HttpSession 을 사용해보겠습니다.

@Controller
public class UsingSessionTestController
{
	@ResponseBody
	@RequestMapping(path="/session-test", produces="text/plain")
	public String sessionTest(HttpSession session)
	{
		session.setAttribute("test", "hello");
		return (String)session.getAttribute("test");
	}
}
  • /session-test 에 접속합니다.
  • 레디스 매니저로 조회하여봅니다.
  • 해더 Cookie: 와 일치하는 세션아이디가 보이면 성공!