작성
·
49
0
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.5.3.jar:3.5.3]
Caused by: org.springframework.data.redis.listener.adapter.RedisListenerExecutionFailedException: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis
at org.springframework.data.redis.listener.RedisMessageListenerContainer.lazyListen(RedisMessageListenerContainer.java:383) ~[spring-data-redis-3.5.1.jar:3.5.1]
at org.springframework.data.redis.listener.RedisMessageListenerContainer.start(RedisMessageListenerContainer.java:361) ~[spring-data-redis-3.5.1.jar:3.5.1]
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:405) ~[spring-context-6.2.8.jar:6.2.8]
... 19 common frames omitted
Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1858) ~[spring-data-redis-3.5.1.jar:3.5.1]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1789) ~[spring-data-redis-3.5.1.jar:3.5.1]
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceC
Redis 에러 (백엔드 에러는 이렇게 뜨고)
프론트 엔드 (로그인 하고 들어가는 거 잘됩니다. 채팅만 치면 저렇게 뜹니다.)
EC2에서 redis 접속은 잘 됩니다.
프론트는 S3+cloudfront (도메인 적용 안함)
백엔드는 Redis(Elastic) + EC2+RDS +nginx 로 배포했고 몇시간 쨰 하는데 저 에러가 뜹니다.
혹시 프론트 배포가 잘 못 된건가요?
강사님 도와주세여ㅠㅠㅠ
답변 2
0
안녕하세요 KMC님! 강의 열심히 따라와 주셔서 감사합니다ㅎㅎ
이미지들과 에러 로그를 보니 몇 가지 문제가 복합적으로 발생하고 있는 것 같네요!
차근차근 디버깅 하시는 것 도와드려 볼게요 ~
첨부해주신 로그들을 보니 3가지 주요 문제가 있어요 !
[1] 백엔드 Redis 연결 문제
[2]프론트엔트 WebSocket 연결 실패 및 STOMP 연결 문제
[3] CORS 관련 403 문제
확인해 봐야 하는 포인트 집어드려볼게요 !
[1] 백엔드 Redis 연결 문제
-> EC2에서 Redis 접속이 잘 된다고 하셨는데,
Spring Boot 애플리케이션에서는 연결이 안 되고 있어요 !
application.yml에서 Redis 설정을 다시 확인해보시는걸 추천드려요 !
또한 ElastiCache의 보안 그룹에서 인바운드 규칙에 6379 포트가 추가되어 있는지
즉, EC2 인스턴스의 보안 그룹을 허용했는지 확인해보세요 !!
[2] 프론트엔트 WebSocket 연결 실패 및 STOMP 연결 문제
-> 우선 CloudFront는 기본적으로 정적 파일 배포(HTML, CSS, JS, 이미지 등)를 위한 CDN 서비스라서 WebSocket과 같은 실시간 양방향 통신은 지원하지 않아요 ! 특히 CloudFront에서 API Gateway나 WebSocket 서버로 프록시 설정이 안 되어 있거나, 오리진 설정이 HTTP만 허용되어 있으면 403이 발생해요 !!
그래서 프론트에서 WebSocket 연결을 CloudFront가 아닌 백엔드 주소로 직접 연결해야해요 !
그리고 도메인이 EC2에 HTTPS로 연결되고 있는지 (SSL 적용 여부 포함) 확인해보시길 추천드려요 :)
[3] CORS 관련 403 문제
-> WebSocket 설정에서 CORS를 제대로 허용했는지 확인해보시는걸 추천드려요 !!
혹시라도 추가로 궁금한 점이 있으시면 언제든 편하게 질문 주세요 ~~😄
CloudFront + S3 배포 자체는 문제없어보여요 ~
CloudFront 자체는 정적 파일(CSS, JS, HTML 등)을 제공하는 CDN 역할이기 때문에 WebSocket이나 API 요청 자체를 막지는 않아요 ! 하지만 WebSocket 연결 부분에서 설정이 잘못되었을 가능성이 높아 보아보이네요 !
Network 탭에서 WebSocket 연결 URL이 어떻게 되어있는지 확인해보시는걸 추천드려요 !
프론트엔드에서 WebSocket 연결 URL이 상대경로나 CloudFront 도메인으로 잘못 설정되었을 가능성이 높아보이네요 ~
프론트에서 백엔드 주소를 "상대 경로로 설정한 경우" CloudFront에 배포된 프론트에서는 백엔드가 동일 도메인으로 있는 줄 알고 상대경로(/api/xxx 등)로 API 요청을 보내요. 그런데 백엔드는 완전 다른 도메인 (예: api.myserver.com) 에 있으니까 → 요청이 CloudFront → S3 로 잘못 가게 되는 거죠 !
즉, 소켓 요청이 백엔드 도메인으로 요청을 잘 보내고 있는지 확인 해보시는걸 추천드려요 ~
또 질문 있으시면 얼마든지 남겨주세요~~ 😊
0
안녕하세요, 인프런 AI 인턴입니다. KMC님, 질문을 주셔서 감사합니다.
현재 상황을 살펴보니, Spring Boot 애플리케이션이 Redis 서버와의 연결에 실패하는 것으로 보입니다. 이 문제는 다수의 원인에서 발생할 수 있으며, 아래의 몇 가지 점을 검토해 보시기 바랍니다:
Redis 서버 접근 가능성 확인:
redis-cli -h <Redis 서버 호스트명> -p 6379
명령어를 실행해 직접 접속 시도가 가능한지 확인해 보세요. 접속이 가능하다면 네트워크 설정에는 큰 문제가 없을 것입니다.보안 그룹 설정:
Redis 설정 확인:
application.properties
또는 application.yml
파일에서 Redis 호스트와 포트가 올바르게 설정되어 있는지 확인하세요.예를 들어:
spring:
redis:
host: <Redis 호스트명>
port: 6379
프론트엔드와 백엔드의 CORS 설정:
VPC 및 네트워크 구성:
관련해서 도움이 될 만한 기존 질문답변들을 찾아 소개드립니다. 이는 유사한 문제를 해결한 경우입니다:
- Redis Connection Issues and Resolution: Redis 연결 문제와 해결방안에 대한 논의.
- AWS and Redis Networking Settings: AWS에서의 Redis 네트워크 설정 관련 궁금증 해소.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다 . 강사님 그럼 CloudFront + S3 에 배포하면 아예 F12 로 화면을 열었을때 SEND로 통신이 가도 아예 연결이 안 된다는 뜻인가요? 백엔드는 https 로 도메인으로 배포를 했고 프론트는 강의에 나온 CloudFront 로 배포는 했습니다.