1. 필수 defendency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2. configuration
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.database}")
private int database;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(host);
redisStandaloneConfiguration.setPort(port);
redisStandaloneConfiguration.setPassword(password);
redisStandaloneConfiguration.setDatabase(database);
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory());
template.setKeySerializer(new StringRedisSerializer());
/**
* 2017-11-15 (고병만)수정
* 필수처리 key StringRedisSerializer 처리를 해줘야 key앞에 이상한 특수 문자들이 임의로 붙는 상황을
* 막을 수 있음 ex)\xAC\xED\x00\x05t\x00\x12
*/
template.setKeySerializer(new StringRedisSerializer());
return template;
}
}
3. spring에서session 사용방법 다음만 지키자
아래의 코드처럼 session에서 데이터를 가져와서 데이터 가공작업 후 -> 다른 페이지로 redirect하는 상황이 발생한다면
반드시 데이터 가공후 session.setAttribute 해줘야함
당연한거라 생각 할 수 있지만. 일반httpsession같은경우 setAttribute 하지 않더라도 데이터가 유지됩.
SinJepmSSVO ss_sinJepmSSVO = request.getSession().getAttribute("ss_sinJepmSSVO") != null ? (SinJepmSSVO) request.getSession().getAttribute("ss_sinJepmSSVO") : null;
List<CycleDataCompareVO> cycleDataCompareVOS = jmngService.compare_cycle(ss_sinJepmSSVO,sinJepmSSVO);
//session save
request.getSession().setAttribute("ss_cycleDataCompareVOS",cycleDataCompareVOS);
4. 반드시 vo , dto 등 session에 담을 데이터는 implements Serializable 해야함.
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Builder
public class TermVO implements Serializable {
//년도
private String year;
//텀
private String term;
//텀 - 시작일자
private String stdate;
//텀 - 종료일자
private String eddate;
//텀코드
private String termcode;
public String getTermcode() {
return year + "-" + (Integer.parseInt(term) < 10 ? "0"+term : term);
}
}
5. redist는 프로젝트 초기에 세팅해서 작업을 하는게 좋을듯 . 중간에 끼어넣으려니 그동안 작업했던 vo , session 처리하는 부분들 변경해줘야 되는 귀찮은 일들이 생김.