본문 바로가기

부트캠프 일지

부트캠프 55일차 후기

오늘부터 팀 프로젝트에 돌입했다. 아침부터 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