오늘 EC2, S3 배포 도중 문제가 너무 많았다. 로컬에서 작업하는 환경이랑 배포 환경이랑 당연히 다르기 때문에 문제가 많은건 당연한데, 이상하게 원인불명 오류가 많아서 포스팅으로 정리하려고 한다.
1) EC2에서 서버 실행
2) 클라이언트 요청 엔드포인트 코드를 EC2 URL로 수정
3) build 후 버킷에 담아서 S3 실행
4) 요청 및 응답 결과 확인
현재 팀 프로젝트의 주요 기능은 users
의 기능과 posts
의 기능이 있다.
users
의 기능은 로그인, 회원가입 등 사용자에 관한 것이고 posts
의 기능은 게시물, 게시물 검색, 해시태그 등 말 그대로 게시물에 관한 기능인데 users
의 엔드포인트는 잘 작동을 한다. 근데 문제는 posts
의 요청과 응답에서는 404오류
가 난다. 그 악명 높은 404오류이다.
여기서 문제는,
users
의 기능은 모두 동작이 잘 된다.posts
의 몇몇 기능은 동작이 되지 않는다.요청도 잘 갔고, 응답도 잘 되는데 왜 몇몇 기능은 되지 않을까? 심지어 그 전에는 같이 백엔드 작업을 한 팀 원과 데모를 돌렸을 때 잘 되었다. 근데 갑자기 되지 않아서 내가 코드를 잘 못 건드렸나..... 했다.
나의 해결 방법: 결론부터 말하면, 깔끔하게 해결은 했다. 일단 EC2 내의 MySQL을 초기화 시키고, 서버 실행 코드(index.js)의 코드를 점검했다. 그리고
404오류
라서 엔드포인트를 유심히 관찰하고 postman으로 다시 점검 했다. postman으로 점검하니 서버가 다운되는 현상을 보고 엔드포인트 문제라고 생각했다. 그리고 점심시간에 밥을 먹으면서 생각이 들었는데 그전에는 작동이 잘 되었다. 그럼 엔드포인트에는 문제가 없는 건데 도대체 무슨 문제인가 싶어서 서버 실행코드에서 DB를 다시 비우고 다시 데이터를 받아서 넣은 다음 실행 시켰다. 이제서야 해결이 된 것을 확인했다. 기억을 복기 시켜서 생각해보았으나 원인을 모르겠다.
일단 405오류는 처음 들어봤다.
정확히는 405 (Method Not Allowed) 이다. 이 오류는 배포를 처음 했을때, POST 메소드를 요청했을 때 나타난 오류이다. 그래서 에러코드도 간단하고 명료하니 구글링을 했다. 구글링을 한 결과 이 에러코드가 나타나는 이유가 굉장히 많아서 오히려 오류를 알기 더 어려웠다.
405에러코드가 나타나는 이유
1) 클라이언트 요청 메소드와 서버 응답 메소드가 일치하지 않을 경우
2) 요청 메소드가 유효하지 않을 경우
3) 지원하지 않는 메소드를 사용하였을 경우
4) cors 옵션 설정에 따라 다름
5) 위 이유 말고도 다른 이유가 많았다.
나의 해결 방법: 일단 위 이유 중 1, 2, 3은 절대 아니다. 그러면 4번 이다. 그래서 CORS 정책 및 옵션을 살펴본 결과
origin
옵션을true
로 해야 한다고 한다. 그래서 코드를 살펴보니 localhost:8080으로 되어 있길래 수정하고 다시 실행하니 문제가 없었다. 큰 문제가 아니고 빠르게 해결 되어서 다행이라고 생각한다.
위 2가지 에러로그와는 다르게 조금 가벼운 이슈이며, 내가 기억하고 까먹었을 때 마다 참고해서 원활하게 진행하려고 작성하는 것이다.
VSCode 터미널(로컬)에서 서버를 실행시키고 원래는 종료를 하고 VSCode를 종료해야 하는데 서버를 종료시키지 않고 VSCode를 종료시킬 때 자주 발생하는 오류이다. 또한 다른 상황에서도 나타나는데 정확한 상황을 잘 기억이 나지 않고, 이 오류가 발생했을 때 마다 그냥 사용만 하면 된다.
바로 로컬서버포트를 8080
으로 실행시키고, 잠시 잊어버리거나 다른 작업을 하다가 또 VSCode를 켜야할 때, 포트가 이미 실행 중이라고 하는 경우가 많다. 이때 포트번호 8080
을 강제종료 시켜야 한다. 이 때 그러면 '포트번호를 다른 번호(8081)로 하면 되지 않냐?' 라는 의문이 들 수가 있는데 그러면 클라이언트의 요청 엔드포인트를 모두 바꿔주어야 하는 번거로움이 생긴다. 그래서 이러한 상황이 발생하면 8080
포트를 강제종료 시킨다.
강제종료 하는 Linux CLI (터미널 실행 코드)
sudo kill -9 $(sudo lsof -t -i:8080)