오늘부터 팀 프로젝트에 돌입했다. 아침부터 CodeKata는 건너뛰고, 팀 프로젝트의 예외 처리나 명명을 어떻게 할 것인지를 팀원분들과 대화를 나눴고, 각자 맡은 Domain 개발에 집중하였다.
나는 Redis를 다루지만, 한 번도 Redis를 다룬 적이 없어서 부트캠프 측에서 준비한 Redis 특강을 들었다. 다만, Redis를 다루는 방법보단 Redis의 목적과 특징을 다루는 강의였기에, Redis를 다루는 법은 구글링을 할 수 밖에 없었다 그럼에도, 기억해 둘만한 것들을 이곳에 적어보기로 한다.
Redis는 몇 가지의 자료구조를 지원하는데, 연결 리스트인 List, 집합인 Set, 순서를 보장하는 집합인 SortedSet, Key:Value 방식 내에서도 다시 Key:Value 방식을 지원하는 Hash, 문자열 String 등등이 존재한다.
Redis를 활용하는 이유는 몇가지가 있다 첫 째, Cache 저장소로써 활용할 수 있다. Redis는 In-memory 방식이기에, 빠르게 작동하고, List, Set, HashMap 등의 다양한 다료구조를 지원해서 Cache로 사용하기에 매력적인 옵션이다.
둘 째, Instance를 늘리는 Scale-out 상황에서 중앙 저장소로 사용할 수 있다. 셋 째, 여러 대의 서버 사이에 주고받는 데이터를 저장하는 목적으로 사용할 수 있다. 넷 째, 데이터를 전송하기 위한 목적으로 사용한다. 마지막으로 Redis는 Sing Thread 기반으로 작동하기 때문에 동시성 문제 해결을 위해 사용한다.
이 다섯 번째의 목적을 위해서 이 프로젝트에서 Redis를 활용하게 되었다. 내가 맡은 것은 선착순 이벤트이기 때문에 동시성 문제가 발생 할 수 밖에 없다. 그래서 일단 나는 Redis를 사용하기 위한 Config 파일을 만들었다. 대부분 Java 기반이라서 이것을 Kotlin으로 옮기는 데 시간이 좀 소모된 것이 흠이다.
class RedisConfig {
@Value("\${spring.redis.host}")
lateinit var host: String
@Value("\${spring.redis.port}")
var port: Int = 0
@Bean
fun redisConnectionFactory(): RedisConnectionFactory = LettuceConnectionFactory(
RedisStandaloneConfiguration(host, port)
)
@Bean
fun redisTemplate(): RedisTemplate<*, *> =
RedisTemplate<Any, Any>().apply{
this.connectionFactory = redisConnectionFactory()
this.keySerializer = StringRedisSerializer()
this.valueSerializer = StringRedisSerializer()
}
}
이후로 Entity의 Repository를 만들려 하는데, 오류가 발생하였다. BeanDefinitionOverride 문제가 발생했는데, 이 문제는 더 살펴 봐야할 것 같다. 일단 일반적인 Redis는 정상적으로 Test하였기에 Redis 설정 문제는 아닌 것 같다, Entity의 Repository를 평소 같이 사용하려다 문제가 발생해서 Redis에서 Repository를 어떻게 사용 되는 지를 더 지켜봐야 할 것 같다.
내일은 수술이 있어서 부트캠프를 빠지게 된다. 그럼에도 아프더라도, 프로젝트를 좀 해놔야겠다.
'부트캠프 일지' 카테고리의 다른 글
부트캠프 58일차 후기 (0) | 2024.02.20 |
---|---|
부트캠프 57일차 후기 (0) | 2024.02.19 |
부트캠프 54일차 후기 (0) | 2024.02.14 |
부트캠프 53일차 후기 (0) | 2024.02.13 |
부트캠프 52일차 후기 (0) | 2024.02.08 |