상황
부트캠프에서 제공해주는 EC2의 기간이 끝났다. 이 서버를 aws 프리티어로 옮기는 과정에서 여러 이슈들이 발생했다. 서버에서 설치한 파일, 설정한 명령어 모두를 기록해놔서 어려움이 없을 줄 알았는데 굉장히 많은 시행착오가 발생했다.
기존과 달라진 것들
프리티어 무료 버전이라는 것과 기존에는 ec2에 mysql을 설치해서 workBench로 연결 후 사용했다면 이번에 옮길 때는 AWS RDS를 연결해서 사용했다.
이슈
1. 프리티어 램 용량 부족
- 자바파일을 빌드하기에 프리티어 램 용량이 부족했다. 램과 ec2저장공간의 메모리 스왑을 해서 이슈를 해결했다.(최대 2기가인데 1기가만 스왑 하니 메모리가 부족했다.)
2. 프론트 빌드 메모리 부족
- 기존에 빌드 방식은 sh파일을 사용해서 npm run build까지 한 번에 수행했다. 메모리 스왑을 해도 프론트가 잡아먹는 램 용량을 감당할 수 없었고 로컬에서 프론트를 빌드한 뒤 mobaXterm을 이용해서 서버에 옮겼다.
3. Nginx 권한문제
상황
가장 오랫동안 해결하지 못한 이슈다. 로컬에서 빌드를 수행한 후 넣은 빌드 파일을 Nginx경로상에 넣었고 빌드를 수행하면 500 에러가 발생했다.
시도한 방법
최우선으로 Nginx 설정을 확인했다. sites-available폴더의 default에서 설정을 했었고 기존 설정을 이것저것 만져보면서 다양한 방법으로 시도했다. 500에러가 발생한 게 느낌상 Nginx가 원인인 것 같아서 설정 파일만 주구장창 손봤지만 기존과 동일했던 설정 파일을 만진다고 해결되지 않았다.
해결
Nginx에 로그가 있다는 생각을 전혀 하지 못했다. 에러가 발생하면 Nginx로그를 확인할 수 있었고 이 사실을 매우 늦게 알았다. -> 단순히 내가 설정을 잘못 만진 줄 알았다.
원인은 mobaXterm에서 드래그 앤 드롭으로 옮긴 프론트 파일에 Nginx가 접근하지 못해서 발생한 에러였다.
permission denied로 로그가 찍혔고 build폴더에 대한 권한과 Nginx 권한 이름 설정을 user로 바꾸는 방법으로 해결했다.
4. RDS와 연동
-배포가 완료된 후 사이트가 정상적으로 뜨고 리뷰도 작성되는 것을 확인했다. 기존에 서비스를 운영하면서 삽입된 DB 데이터가 초기화돼서 배포가 됐으니 잘 돌아가겠지? 라며 리뷰, 좋아요, 커뮤니티 글 작성을 확인한 후 체크하지 않고 있었는데 댓글이 불러와지지 않았다.
다른 모든 부분은 이상 없이 잘 되는데(댓글 작성 포함) 커뮤니티에 댓글 조회만 작동하지 않는 문제가 발생했다. 이해할 수 없는 부분은 서버와 프론트 코드는 기존에 잘 작성하던 부분에서 1도 건드리지 않았는데 갑자기 이런 에러가 발생해서 당황했다.
댓글만 400 에러가 발생해서 서버 쪽 로그를 살펴봤고
SQLGrammarException: could not extract Result Set라는 에러가 발생했다.
원인은 Repository에서 nativeQuery를 사용할 때 Entity를 대문자로 사용해서 발생한 이슈였다. RDS로 만든 DB에서는 대소문자를 구분했고 기존에 만든 DB는 nativqQuery에서 대문자가 있어도 구분하지 않고 작동한 것 같다.
다사다난했던 서버 이전 작업이었다. 빌드 과정 설정 등 모든 부분을 기록해놔서 뚝딱 하면 옮겨질 줄 알았는데 내 착각이었다. 서버 용량 때문에 현실적으로 뚝딱이 불가능하기도 했고 새로운 기술을 추가해서 기존과 달라진 부분도 있어서 오래 걸린 작업이었다.
'IT > 프로젝트 개발 중 발생한 에러' 카테고리의 다른 글
DockerCompose + SpringBoot + Mysql Connection refuse에러 (0) | 2022.09.22 |
---|---|
스프링시큐리티 + JWT 로그인 시 토큰 유효성검사 에러 (0) | 2022.09.19 |
스프링시큐리티 401에러와 body가 빈 상태코드 200리턴 (0) | 2022.09.16 |
SQL 조인 개념 (0) | 2022.09.03 |
AWS EC2 ubuntu 배포 스프링부트 + React (0) | 2022.08.05 |