2025-04-03

Flix 프로젝트: 개발 기록 - 7

FlixSpring BootRedisSessionAPI

1. 오늘의 진행 상황 & 구현 내용

Redis 기반 세션 관리 API 구현

Redis를 활용한 세션 관리 API를 구현했습니다. 주요 구현 영역은 다음과 같습니다:

  • 세션 생성, 조회, 갱신, 삭제 API 엔드포인트
  • 사용자별 세션 관리 기능
  • 세션 상태 관리 시스템

주요 API 엔드포인트:

@RestController
@RequestMapping("/api/v1/sessions")
public class SessionController {
 
    @PostMapping
    public ResponseEntity<Session> createSession(@RequestBody SessionRequest request) {
        // Session creation logic
    }
 
    @GetMapping("/{sessionId}")
    public ResponseEntity<Session> getSession(@PathVariable String sessionId) {
        // Session retrieval logic
    }
 
    @PutMapping("/{sessionId}/refresh")
    public ResponseEntity<Session> refreshSession(@PathVariable String sessionId) {
        // Session refresh logic
    }
 
    @DeleteMapping("/{sessionId}")
    public ResponseEntity<Void> deleteSession(@PathVariable String sessionId) {
        // Session deletion logic
    }
}

세션 조회 & 상태 관리 기능:

  • 사용자별 세션 조회 API
  • 활성 세션 목록 조회 기능
  • 세션 상태 업데이트 기능

2. 문제 있었던 점 & 해결 과정

Error: Redis 데이터 직렬화 이슈

Caused by: org.springframework.data.redis.serializer.SerializationException:
Cannot serialize object of type [com.zerry.session.model.Session]

해결 방법:

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(connectionFactory);
 
        // JSON serialization configuration
        Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
            ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);
 
        template.setValueSerializer(serializer);
        template.setHashValueSerializer(serializer);
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());
 
        return template;
    }
}

3. 앞으로의 계획

세션 관리 기능 확장

  • 동시 접근 제한 구현
  • 세션 이벤트 로깅 시스템 구축
  • 세션 통계 데이터 수집

성능 최적화

  • Redis 캐싱 전략 개선
  • 세션 데이터 압축 적용
  • 배치 처리 도입

오늘의 교훈

"분산 환경에서의 세션 관리는 데이터 일관성과 성능의 균형을 맞추는 것이 핵심이다."

배운 점:

  • Redis 직렬화 설정의 중요성
  • 세션 만료 처리의 정밀함
  • API 설계의 확장성 고려