๐[DB] ์บ์(Cache)์ SpringBoot & Redis
์บ์(Cache)๋?
์บ์(Cache)๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด๊ดํด๋ ์์ ์ฅ์๋ฅผ ์๋ฏธํ๋ค.
์บ์๋ ๋น๊ต์ ์ ์ฅ ๊ณต๊ฐ์ด ์ ๊ณ , ์ ์ฒด์ ์ธ ๋น์ฉ์ด ๋น์ธ๋ค.
์ฌ๊ธฐ์ ๋น์ฉ์ ๋น๊ตํ๋ ๋์์ ์ผ๋ฐ์ ์ผ๋ก ํ๋๋์คํฌ์ ๊ฐ์ ์ ์ฅ์๊ฐ ๋๊ฒ ๋ค.
๋์ ๋น ๋ฅธ IO๋ฅผ ํตํด ์ฑ๋ฅ์ ์ด์ ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ๋ ๋ฐ์ดํฐ์ ๋ํด ์บ์๋ฅผ ์ ์ฉํ๋ฉด ์ข๋ค.
- ๋์ค์ ๋ณ๊ฒฝ๋ ์ผ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐํ ๊ฐ
- ์์ฃผ ํธ์ถ๋๋ ๋ฐ์ดํฐ
์คํ๋ง๋ถํธ์์์ ์บ์
์คํ๋ง๋ถํธ์์ ์ฌ์ฉํ ์ ์๋ ์บ์๋ ๋๋ถ๋ถ JSR-107
์ ๋ฐ๋ฅธ๋ค.
์ด๋ฅผ ๋ฐ๋ฅด๋ ์บ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ๊ตฌํ์ฒด ์บ์๋ฅผ ์ฌ์ฉํ๋์ง์ ๊ด๊ณ์์ด ์ถ์ํ๋ฅผ ์ง์ํ๋ค.
JSR
- Java Specification Requests์ ์ค์๋ง, ์๋ฐ ํ๋ซํผ์ ๋ํ ๊ท๊ฒฉ์ ์ ์ํ๊ฑฐ๋ ๊ธฐ์ ํ ๊ฒ์ ์๋ฏธ
- ๊ทธ ์ค JSR-107์ JCACHE(Java Temporary Caching API)์ ๊ดํ ๋ด์ฉ
๋ก์ปฌ ์บ์
๋ก์ปฌ ์บ์๋ ๋ก์ปฌ์์๋ง ์ฌ์ฉํ๋ ์บ์๋ฅผ ์๋ฏธํ๋ค.
์ธ๋ถ ์๋ฒ์ ํธ๋์ญ์
๋น์ฉ์ด ๋ค์ง ์๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
ํ์ง๋ง ๋ก์ปฌ์์๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ถ์ฐ ์๋ฒ์ ๊ตฌ์กฐ์์ ์บ์๋ฅผ ๊ณต์ ํ๊ธฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
๊ธ๋ก๋ฒ ์บ์
๊ธ๋ก๋ฒ ์บ์๋, ์ฌ๋ฌ ์๋ฒ์์ ์ ๊ทผํ ์ ์๋ ์บ์ ์๋ฒ
๋ฅผ ๊ตฌ์ถํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ปํ๋ค.
๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํธ๋์ญ์
๋น์ฉ์ด ์๊ธฐ ๋๋ฌธ์ ๋ก์ปฌ ์บ์์ ๋นํด ์๋์ ์ผ๋ก ๋๋ฆฐ ํธ์ด๋ค.
ํ์ง๋ง ๋ณ๋์ ์๋ฒ๋ก ์ด์๋๊ธฐ ๋๋ฌธ์ ์๋ฒ ๊ฐ ๋ฐ์ดํฐ ๊ณต์ ์ ์ฉ์ดํ๋ค.
Redis
Redis(Remote Dictionary Server)์ ์ฝ์๋ก ํค-๊ฐ
๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์คํ์์ค ๊ธฐ๋ฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์์คํ
์ด๋ค.
๊ณต์ ์ฌ์ดํธ: https://redis.io/
Redis์ ํน์ง 1: In-memory data structures
Redis์ ํน์ง 2: Persistence
Redis์ ํน์ง 3: Extensibility(ํ์ฅ์ฑ)
Redis์ ํน์ง 4: Clustering(๋๊ธฐํ ์ฒ๋ฆฌ)
Redis์ ํน์ง 5: High availability
SpringBoot & Redis
์์กด์ฑ ์ถ๊ฐ
pom.xml
ํน์ build.gradle
์ redis์ ์์กด์ฑ์ ์ถ๊ฐํด์ฃผ์.
์ฌ๊ธฐ์ ์ฐพ์๋ณด์ > https://mvnrepository.com/
Java์์ ์ฌ์ฉํ๋ Redis Client๋ ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์๋ค.
- Jedis
- Lettuce
์คํ๋ง๋ถํธ 2.0 ์ดํ๋ก๋ ๊ธฐ๋ณธ ํด๋ผ์ด์ธํธ๋ก Lettuce๊ฐ ์ฌ์ฉ๋๋ค๊ณ ํ๋ค. (Jedis๋ ๋ช๊ฐ์ง ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํจ)
application.properties
application.properties
ํ์ผ์ ์๋์ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํด์ฃผ์.
## redis ์ค์
spring.redis.host=localhost
spring.redis.port=6379
Ehcache ์ค์
RedisConfig ํด๋์ค๋ฅผ ์ถ๊ฐํด์ฃผ์
@Configuration
public class RedisCacheConfig implements CacheConfig {
@Value("localhost")
private String host;
@Value("6379")
private int port;
@Bean
public RedisConnectionFactory redisConnectFactory() {
return new LettuceConnectionFactory(host, port);
}
}
redis์์ ์ฌ์ฉํ ๊ฐ์ฒด ์ค์ (Optional)
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Builder
@RedisHash(value = "shortUrl", timeToLive = 60)
public class ShortUrlResopnseDto implements Serializable {
private static final long serialVersionUID = -214490344996507077L;
@Id
private String orgUrl;
private String shortUrl;
}
RedisRepository ์ค์
public interface ShortUrlRedisRepository extends CrudRepository<ShortUrlResponseDto, String> {
}
๋๊ธ๋จ๊ธฐ๊ธฐ