트러블슈팅

[AWS ELB 배포 문제]

이영재의오른발 2023. 9. 10. 00:54
반응형

이틀동안 머리아프게했던 배포 문제.. 

 

삽질의 삽질의 삽질의 삽질을 거듭한 뒤 해결했다

 

어떤 삽질을 했는지 순서대로 기록해보자


 

첫번째 에러

 

 

사건의 발단은 북마크 엔티티 CRD 구현 및 Jwt 코드 리팩토링을 마치고 로컬에서 테스트를 마친 후 dev에 있는 커밋들을 main에 머지하는 과정에서 일어났다.

 

 

로컬에서 잘 돌아가는 코드가 health Red 라는 상태가 나와 AWS의 ELB 페이지로 들어가 이벤트를 확인했다. 

 

5xx 에러가 나오는걸 보아 서버 실행중 에러가 생긴것이다.

 

 

현재 StudyHub 에서는 블루/그린 배포 방식을 사용한다. 아래 그림처럼 health 상태가 Red가 되면 해당 인스턴스는 지워지고 원래 실행중인 인스턴스만 남게되기 때문에 어떤 에러로 인해 서버가 실행이 안되는지 알 수 없다.

 

 

 

대체 어디서 에러가 나는지 알아보기 위해 ELB를 한개 더 생성해 직접 배포한 뒤 로그를 확인해보았다.

 

RedisConfig 클래스에서 yml에 정의한 spring.redis.host 정보를 읽어오지 못한다는 에러였다.

 

 

Study Hub 에서 redis 서버를 Elasticache로 사용하고있기 때문에 같은 보안그룹을 가지는 인스턴스가 아니면 접근이 불가능하다. 그래서 로컬에서 테스트 할 경우 redis를 로컬에 직접 받아서 사용하므로 로컬의 yml 파일과 인스턴스의 yml 파일이 달라야한다.

 

로컬에서는 application.yml, application-dev.yml, application-prod.yml 세개의 yml 파일이 있고 application.yml 이 application-dev.yml 을 active 하게 작성되었다.

 

ELB에서 로컬에 사용하는 yml 파일을 사용하면 안되기때문에 git ignore 파일에 application.yml 과 application-dev.yml 을 ignore 하여 application-prod.yml 파일만 올라가게 했던것이 문제였다.

 

 

ELB 에서 서버를 실행할 때 자동으로 한 개만 존재하는 application-prod.yml 파일을 실행할 줄 알았는데 로그를 확인하니 default 라고 나와있던 것이다.

 

 

application.yml 이그노어를 풀어준 뒤 다음과 prod 로 실행시키니 해결됐다.

 

 


두번째 에러

첫번째 에러를 해결하고 재배포를 했는데 ehcache.xml 파일을 찾을 수 없다는 에러가 발생했다.

 

이메일 인증번호를 로컬 캐시가 아닌 레디스 캐시 서버에 따로 저장하게 되어 로컬캐시 관련 클래스들을 삭제할 때  yml 에서도 아래 cahce 관련 코드를 삭제해줬어야 했는데 안해줘서 생긴 에러였다

 

 

 

사실 ehcache.xml 파일을 찾을 수 없다는 에러위에 JwtAuthenticationFilter 가 빈으로 등록이 안된다는 에러가 발생했다.

 

추측하건대 순차적으로 yml 파일을 읽어올 때 cache에서 막혀 jwt.secret 값을 읽어오지 못하고 아래 JwtAuthenticationFIiter 클래스에서 @Value("${jwt.secret}") 값을 yml 에서 가져오지 못해 빈으로 등록이 안된것이 아닐까.. 생각한다.

 

 

 

찾아봐도 정보가 없어서 일단은 에러 해결했다는것에 만족해야겠다.

 

 

https://github.com/study-hub-inu/study-hub-server

 

GitHub - study-hub-inu/study-hub-server

Contribute to study-hub-inu/study-hub-server development by creating an account on GitHub.

github.com

 

728x90
반응형