티스토리 뷰
지난 시간에는 간단히 Window 환경에 Redis를 설치해 보았다.
이번에는 이것을 기반으로 간단한 샘플 프로젝트를 만들어 보자. 기본적인 Springboot 기반의 application만 있으면 된다.
프로젝트 환경
필자는 springboot 2.3.4.RELEASE, JDK 1.8을 사용하여 샘플 프로젝트를 구성하였다.
프로젝트 설정
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
springboot 수행을 위해 필요한 spring-boot-starter-web과 springboot와 redis와 연동을 위해 필요한 spring-boot-starter-data-redis dependency를 추가한다.
application.yml (or application.properties)
spring:
redis:
lettuce:
pool:
max-active: 10
max-idle: 10
min-idle: 2
port: 6379
host: 127.0.0.1
password: 'abcde'
application.yml 파일에는 위와 같은 내용을 추가해준다. 각 들어갈 항목에 대한 설명은 다음 표를 참조하자.
변수 | 기본값 | 설명 |
spring.redis.database | 0 | 커넥션 팩토리에 사용되는 데이터베이스 인덱스 |
spring.redis.host | localhost | 레디스 서버 호스트 |
spring.redis.password | 레디스 서버 로그인 패스워드 | |
spring.redis.pool.max-active | 8 | pool에 할당될 수 있는 커넥션 최대수 (음수로 하면 무제한) |
spring.redis.pool.max-idle | 8 | pool의 "idle" 커넥션 최대수 (음수로 하면 무제한) |
spring.redis.pool.max-wait | -1 | pool이 바닥났을 때 예외발생 전에 커넥션 할당 차단의 최대 시간 (단위: 밀리세컨드, 음수는 무제한 차단) |
spring.redis.pool.min-idle | 0 | 풀에서 관리하는 idle 커넥션의 최소 수 대상 (양수일 때만 유효) |
spring.redis.port | 6379 | 레디스 서버 포트 |
spring.redis.sentinel.master | 레디스 서버 이름 | |
spring.redis.sentinel.nodes | 호스트:포트 쌍 목록 (콤마로 구분) | |
spring.redis.timeout | 0 | 커넥션 타임아웃 (단위: 밀리세컨드) |
참조 : zetawiki.com/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_REDIS_%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0
RedisConfig.java
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String redisHost;
@Value("${spring.redis.port}")
private String redisPort;
@Value("${spring.redis.password}")
private String redisPassword;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisHost);
redisStandaloneConfiguration.setPort(Integer.parseInt(redisPort));
redisStandaloneConfiguration.setPassword(redisPassword);
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
return lettuceConnectionFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
다음은 Redis에 Connection을 하기 위한 RedisConnectionFactory와 RedisTemplate을 생성해준다. RestTemplate과 비슷한 개념이라고 생각하면 이해가 쉽다. 앞으로 Redis를 사용할 일이 있으면 이 RedisTemplate을 사용할것이다.
여기까지 만들었으면 연결을 하기 위한 준비는 끝이 난다.
연동 테스트
연동 테스트를 하기 위해 RedisController 라는것을 하나 만든다.
RedisController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisController {
@Autowired
private RedisTemplate<String, String> redisTemplate;
@PostMapping("/redisTest")
public ResponseEntity<?> addRedisKey() {
ValueOperations<String, String> vop = redisTemplate.opsForValue();
vop.set("yellow", "banana");
vop.set("red", "apple");
vop.set("green", "watermelon");
return new ResponseEntity<>(HttpStatus.CREATED);
}
@GetMapping("/redisTest/{key}")
public ResponseEntity<?> getRedisKey(@PathVariable String key) {
ValueOperations<String, String> vop = redisTemplate.opsForValue();
String value = vop.get(key);
return new ResponseEntity<>(value, HttpStatus.OK);
}
}
가장 일반적인 REST Controller의 모습이다. 아까 만들어 놓은 RedisTemplate을 주입받고 opsForValue() 라는 메서드를 통해 Redis에 값을 넣을수도 꺼낼수도 있다.
필자는 포스트맨보다는 부메랑(Boomerang) 이라는 크롬 플러그인을 애용하는데 이를 통해 제대로 연동이 되는지 테스트를 해보겠다.
일단은 값을 넣어주는 역할을 하는 /redisTest 만 POST method로 호출을 해본다. CREATE 응답 코드인 201 SUCCESS가 나오며 Redis로 값이 들어간것 같다. 확인을 해보자.
확인을 할때는 Controller에 만들어 놓은대로 PathVariable에 key를 넣어준다. /redisTest/yellow 라고 요청을 날려본다. 조회이므로 GET method를 사용해서 요청을 날리면 앞서 넣었던 yellow의 value에 해당하는 banana가 나오는것을 확인할 수 있다. 잘 되는것 같다.
혹시 모르니 CLI에서 값이 잘 들어가 있는지 확인을 한번 더 해보자. Redis에서 모든 key를 조회하는 keys * 를 날려보면
이전에 넣었던 oing이라는 값에 추가한 yellow, green, red가 잘 들어가 있는것을 확인할 수 있다.
끝!
'Framework > Spring' 카테고리의 다른 글
Spring에서 h2 database 간단 사용법 (1) | 2021.02.03 |
---|---|
Springboot 에서 @ComponentScan 설정 및 사용법 (2) | 2021.01.14 |
Spring properties 사용시 UnsatisfiedDependencyException: Could not resolve placeholder 오류 조치 (0) | 2020.12.29 |
Spring 설정 Xml Config에서 Java Config로 바꾸는 방법 (요령) (1) | 2020.12.21 |
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (6) - XML config to JAVA config (0) | 2020.12.16 |