spring boot와 react 연동 중 오류 회고
spring boot와 react 연동을 위해 서버를 aws에 올려 프런트엔드에서 사용할 수 있도록 배포 작업을 진행했다.
첫 시작은 CORS에러가 나왔다.
CORS에러는 요청자의 origin과 서버에서 넘겨주는 origin이 달라서 발생하는 오류인데 기존 local환경에서만 작업을 하다가 react를 사용하면 포트가 3000이 기본이지만 spring에서는 port가 8080이 기본인데 이런 부분 처리를 해주지 않아 오류가 발생한 거였다. 해결 방법은 request부분에서 들어오는 origin을 찾아 response값을 http://localhost/8080 -> http://localhost/3000으로 변경하는 로직을 추가하여 백이나 프런트에서 사용하더라도 알맞은 Access-Control-Allow-Origin 값을 반환하도록 하여 문제를 해결했다.
두 번째 redis 문제
기존 redis를 통해 로그인 후 토큰 값을 확인하여 해당 유저를 확인하는 부분에서 기존 local redis는 잘 작동이 되어 문제가 없다는 생각으로 ElastiCache를 통해 받으면 된다는 생각 했다. 하지만 ec2랑 연동시켰는데 문제가 생겼다. ec2환경에서 로그인 시 redis에 값이 들어가지 않아 로그인을 할 순 있지만 유저 정보가 redis에 남지 않아 다음 작업을 진행할 수 없었다. 그래서 구글을 열심히 찾아보고 elastic cache의 엔드 포인트를 yml파일에 넣고 build를 진행해 보았는데 ElastiCache의 redis는 외부 접속이 안되기 때문에 당연히 build 과정에서 RedisListenerExecutionFailedException오류가 발생했다.. 이 부분을 수정하는 방법을 생각해 보았는데 local환경에서는 내 컴퓨터의 redis가 연결되어 있기 때문에 기본 설정 값으로 redis를 불러오지만 ec2에서는 직접 엔드포인트를 host로 입력해 줘야 해서 문제가 발생한 것이었다.
org.springframework.context.ApplicationContextException: Failed to start bean 'springSessionRedisMessageListenerContainer'; nested exception is org.springframework.data.redis.listener.adapter.RedisListenerExecutionFailedException: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to numble.ize6fq.ng.0001.apn2.cache.amazonaws.com:6379; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to numble.ize6fq.ng.0001.apn2.cache.amazonaws.com:6379
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.23.jar:5.3.23]
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.23.jar:5.3.23]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.23.jar:5.3.23]
at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na]
당연한 문제지만 ElastiCache의 redis가 외부에서 접속이 안 되는 부분을 build시 test 하기 때문에 문제가 발생하여 임시방편으로 test를 하지 않고 build를 하는 방식으로 jar파일을 만들어 배포했다. (문제없이 작동) 이 부분은 build 시에는 redis 비활성화하는 방법, 테스트 시 embedded redis를 사용하는 방법, testcontainers 사용하는 방법 3가지 종도가 있다. 이 3가지 방법을 비교하여 적용하면 된다. 아마도 testcontainers를 사용할 거 같지만 아직 진행하지 않아 이번 회고 글은 임시방편으로 오류를 해결한 부분까지 이고 향 후 수정된 내용을 업로드할 예정이다.
'개발 회고록' 카테고리의 다른 글
항해 플러스 백엔드 회고 (1) | 2025.01.16 |
---|---|
InteliJ Gradle 버전 오류 회고록 (3) | 2024.12.06 |
Spring JPA 개발 회고록 (0) | 2022.11.30 |
react google로그인 auth/invalid-api-key 오류 해결 (1) | 2022.07.07 |