[Error/Redis] RedisCommandExecutionException : NOAUTH Authentication required

2025. 12. 16. 22:35DB/NoSQL


📝 Redis를 다루며 만났던 에러들이 있었기에, 대응 방법을 까먹지 않기 위해 글을 작성하고자 합니다.


😭Error  : RedisCommandExecutionException : NOAUTH Authentication required

Redis에 비밀번호(requirepass)를 설정한 다음 스프링 애플리케이션과 연동하려고 할 때 발생하였습니다. 

 

😂원인

사실 Spring Cloud Data Flow를 이용하여 외부에서 --spring.(data).redis.password=(비밀번호) 의 값을 주입해줬는데, 이 지점에서 문제가 있을 거라 생각했었습니다.

 

1) Spring Cloud Data Flow에서 값을 넘겨주지 못한다?

--spring.(data).redis.password= 의 값이 전달되지 못한다면, --spring.datasource.password 등 다른 값도 전달되지 못해야 합니다. "", '' 등의 문제였다면, 동일하게 DB 연결 비밀번호도 전달되지 못해야 했을 거라 생각했습니다. 그래서 설정값을 수정하다, 여기서는 해결점이 있지 않다고 생각했습니다.

 

2) NOAUTH Authentication required

Redis에 비밀번호를 설정하게 되었을 때, 외부에서 Redis에 접속하려면 비밀번호가 필요합니다. redis-cli에서 AUTH (Password)로 접속할 수 있는 것처럼, Redis 설정에 password가 주입되어야 했었습니다.

 

그러다 알게된 사실은, 예를 들어 Redis 설정 클래스를 만들면서 RedisTemplate의 인자로 RedisConnectionFactory를 그대로 넘겨주면 --spring.(data).redis.password가 그대로 주입될 수 있었습니다.

 

그런데 저는 디테일한 timeout을 설정하고자 코드를 수정했었는데, 그러다 보니 redis를 호출할 때마다 password가 코드에 참여하지 못하게 되었습니다.

 

[Error/Redis] RedisCommandTimeoutException

📝 Redis를 다루며 만났던 에러들이 있었기에, 대응 방법을 까먹지 않기 위해 글을 작성하고자 합니다. 😭Error : RedisCommandTimeoutExceptionSpringBoot 프로젝트에서 대량으로 저장된 데이터를 Lua script를

gw-sheep.tistory.com

 

📝해결

 

1. application.properties(or yml) 수정

spring.redis.password=${spring.redis.password}

 

2. RedisConfig (Redis 설정 클래스) 수정

@Configuration
public class RedisConfig {

    @Value("${spring.redis.password}")
    private String password;

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {

        RedisStandaloneConfiguration serverConfig = new RedisStandaloneConfiguration("localhost", 6379);
		serverConfig.setPassword(password);		// 비밀번호 추가

        SocketOptions socketOptions = SocketOptions.builder()
            .connectTimeout(Duration.ofSeconds(10))
            .build();

        ClientOptions clientOptions = ClientOptions.builder()
            .socketOptions(socketOptions)
            .build();

        LettucePoolingClientConfiguration clientConfig = LettucePoolingClientConfiguration.builder()
            .commandTimeout(Duration.ofSeconds(300))
            .clientOptions(clientOptions)
            .build();

        return new LettuceConnectionFactory(serverConfig, clientConfig);
    }
}

 

spring cloud data flow -> application.properties -> @Value 이용해서 설정 클래스에서 값을 전달 받음 -> 설정값에 password 설정

 

 

이렇게 해서 문제를 해결할 수 있었습니다!!!