반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

Bean 객체 RedisConnectionFactory 의 NullPointerException 본문

JAVA/Troubleshooting

Bean 객체 RedisConnectionFactory 의 NullPointerException

닉의네임 2024. 6. 19. 08:06
반응형

RedisConnectionFactory 를 찾지 못해 에러가 발생했다면 아래와 같이 확인해보자 

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

Spring 애플리케이션에서 NullPointerException이 발생하는 이유는 RedisConnectionFactory를 생성하는 과정에서 필요한 컴포넌트나 빈이 올바르게 초기화되지 않았기 때문일 가능성이 큽니다. 문제를 진단하고 해결하기 위한 몇 가지 단계는 다음과 같습니다

 

 

1. 설정 확인

Redis 설정이 올바르게 정의되어 있는지 확인하세요. 일반적으로 Redis 연결 팩토리는 다음과 같이 보일 수 있습니다:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

    @Bean
    public RedisTemplate<?, ?> redisTemplate() {
        RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        return template;
    }
}

 

@Configuration 어노테이션이 제대로 되어 있는지, 그리고 redisConnectionFactory 메서드가 정확하게 정의되어 있는지 확인하세요.

2. 애플리케이션 프로퍼티 확인

application.properties 또는 application.yml 파일에 Redis 설정이 올바르게 되어 있는지 확인하세요. 예를 들어

spring.redis.host=localhost
spring.redis.port=6379

 

3. 의존성 주입 확인

RedisConnectionFactory 빈이 생성될 때 필요한 모든 의존성이 올바르게 주입되고 초기화되어 있는지 확인하세요. NullPointerException은 누락되었거나 잘못 구성된 의존성 때문에 발생할 수 있습니다.

4. 스택 트레이스 확인

예외의 전체 스택 트레이스를 확인하여 NullPointerException이 정확히 어디에서 발생하는지 파악하세요. 이는 문제를 일으키는 구성이나 코드 부분에 대한 힌트를 줄 수 있습니다.

5. Redis 실행 여부 확인

Redis 서버가 실행 중이고 애플리케이션에서 접근 가능한지 확인하세요. Redis 서버가 다운되었거나 접근할 수 없는 경우 연결 팩토리가 실패할 수 있습니다.

6. 디버그 로깅 활성화

Spring 및 Redis에 대한 디버그 로깅을 활성화하여 초기화 과정에서 어떤 일이 발생하는지 자세히 확인하세요. application.properties에 다음을 추가하세요

logging.level.org.springframework=DEBUG
logging.level.org.springframework.data.redis=DEBUG

 

예제 설정

좀 더 자세한 설정 예제는 다음과 같습니다

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        return template;
    }
}

 

반응형
Comments