강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

KMC님의 프로필 이미지
KMC

작성한 질문수

비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편)

Elastic Cache 에러

작성

·

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 에러 (백엔드 에러는 이렇게 뜨고)

 

{B7AFDBA1-76BA-4E7B-9724-12FFB7F08B34}.png

 

프론트 엔드 (로그인 하고 들어가는 거 잘됩니다. 채팅만 치면 저렇게 뜹니다.)

{9D9E60C5-C11A-4840-86B4-F630120E682E}.png

EC2에서 redis 접속은 잘 됩니다.

프론트는 S3+cloudfront (도메인 적용 안함)

백엔드는 Redis(Elastic) + EC2+RDS +nginx 로 배포했고 몇시간 쨰 하는데 저 에러가 뜹니다.

혹시 프론트 배포가 잘 못 된건가요?

 

강사님 도와주세여ㅠㅠㅠ

답변 2

0

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 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를 제대로 허용했는지 확인해보시는걸 추천드려요 !!

혹시라도 추가로 궁금한 점이 있으시면 언제든 편하게 질문 주세요 ~~😄

KMC님의 프로필 이미지
KMC
질문자

감사합니다 . 강사님 그럼 CloudFront + S3 에 배포하면 아예 F12 로 화면을 열었을때 SEND로 통신이 가도 아예 연결이 안 된다는 뜻인가요? 백엔드는 https 로 도메인으로 배포를 했고 프론트는 강의에 나온 CloudFront 로 배포는 했습니다.

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

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 서버와의 연결에 실패하는 것으로 보입니다. 이 문제는 다수의 원인에서 발생할 수 있으며, 아래의 몇 가지 점을 검토해 보시기 바랍니다:

  1. Redis 서버 접근 가능성 확인:

    • EC2 인스턴스에서 Redis 클라이언트를 사용하여 redis-cli -h <Redis 서버 호스트명> -p 6379 명령어를 실행해 직접 접속 시도가 가능한지 확인해 보세요. 접속이 가능하다면 네트워크 설정에는 큰 문제가 없을 것입니다.
  2. 보안 그룹 설정:

    • Redis가 실행 중인 EC2와 애플리케이션 간의 네트워크 설정이 올바른지 확인합니다. 특히 Redis 포트(기본 6379)가 열려 있는지 확인하고, EC2와의 통신이 허용되어 있는지 보안 그룹 설정을 검토하세요.
  3. Redis 설정 확인:

    • application.properties 또는 application.yml 파일에서 Redis 호스트와 포트가 올바르게 설정되어 있는지 확인하세요.

예를 들어:

   spring:
     redis:
       host: <Redis 호스트명>
       port: 6379
  1. 프론트엔드와 백엔드의 CORS 설정:

    • 프론트엔드(S3, CloudFront)와 백엔드(Nginx, EC2) 간의 CORS 설정을 확인해 보세요. 특정 Origin에서의 요청이 차단될 수도 있기 때문입니다.
  2. VPC 및 네트워크 구성:

    • EC2 인스턴스와 Redis가 동일 VPC 내에 있는지, 네트워크 접근이 허용되어 있는지 검토하십시오.

관련해서 도움이 될 만한 기존 질문답변들을 찾아 소개드립니다. 이는 유사한 문제를 해결한 경우입니다:
- Redis Connection Issues and Resolution: Redis 연결 문제와 해결방안에 대한 논의.
- AWS and Redis Networking Settings: AWS에서의 Redis 네트워크 설정 관련 궁금증 해소.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

KMC님의 프로필 이미지
KMC
질문자

ㄷ ㅏ해봤습니다.

KMC님의 프로필 이미지
KMC

작성한 질문수

질문하기