항해99 3기

[TIL] 2021.11.26 최종 프로젝트 진행중 - CORS 관련 자료 / Nginx 사진 업로드 제한 / 정식 오픈 후 첫 이슈

na_o 2021. 11. 26. 18:27
728x90

https://www.youtube.com/watch?v=-2TgkKYmJt4&t=8s 

 

 

 

CORS 정보 : CORS가 생긴 이유

https://juneyr.dev/2018-12-23/cors

 

CORS 맨날 봐도 모르겠어

맨날맨날 봐도 맨날 맨날 헷갈리니까 정리. 왜 웹에서 API 서버에 요청 안가는 거에요? 😭 웹 개발 시에 자바스크립트로 야심차게 외부 서버 경로로 ajax 요청을 날리면 요청이 실패한다. 요청한

juneyr.dev

 

 


게시물/카페후기 작성 API에서 일부 사진을 첨부하고 작성완료를 눌렀을 때 아무런 반응이 없는(게시물 작성이 안됨) 상황이 일어났다

개발자도구를 켜보니 또 CORS 에러가 났다!!!!!!!!!!

참 알 수가 없다

분명히 CORS 문제는 해결 했는데..

게다가 어떤 사진은 올라가고 어떤 사진은 안 올라가고...왜 사진을 가려서 API를 실행하는 건지...

그래서 'nginx 사진 cors' 라고 치니까 나와 같은 상황이 있었다

https://powellstreet.tistory.com/87

 

고용량 이미지 업로드 오류 해결 (Nginx 파일 업로드 용량 제한 설정)

* 문제 발견 이미지 파일 업로드 기능을 구현하다가 문제를 발견했다. 특정 용량 이상의 이미지들이 업로드가 되지 않는 것이었다. 로컬에서 테스트할 때는 분명히 용량 문제같은건 없었는데,

powellstreet.tistory.com

와 새로운 사실이다

nginx의 문제가 진짜였다니...설마했는데...

 

 

 

어렵지 않게 해결했다

https://www.runit.cloud/2020/05/nginx-upload-file-size.html

 

NGINX에서 파일 업로드 용량 제한 설정하기

NGINX 웹 서버에서 파일 업로드 용량을 제한하는 설정 방법을 알아보고, 실습을 통해 쉽게 설정하고 사용할 수 있습니다.

www.runit.cloud

빨간 글씨를 추가하니까 해결되었다

가장 바깥쪽에 있는 server에 적어줘야 한다

server {
    client_max_body_size 10M;
    ...
    server {
       ...
    }
    ...
}

 

 

 


충격이다..!!!!!!!!!!!

오늘 밤에 정식 오픈했다(홍보는 안 해서 우리만 썼지만)

게시물을 올려보면서 여러가지 테스트를 해 봤다

데이터가 잘 보여지는지, 그 데이터는 정확한건지, 기능은 제대로 작동하는지, CSS는 제대로 적용되었는지 등

다양하게 확인해봤다

그런데, 메인 페이지에서 실시간 랭킹을 보여주는 데에서 문제가 생겼다

실시간으로 업데이트가 되어야하는데 업데이트가 되지 않는다

이 데이터는 게시물왕이 아니라 좋아요왕이다. 프론트에서 표현을 잘못 했다. 수정 예정이다. CSS는 신경 쓰지 말아주세요..ㅎㅎ

좋아요왕을 실시간으로 조회하는데 1등이 '사람'이다(3개)

하지만 현재 '사람'의 좋아요 개수는 5개이다

좋아요왕을 판단하는 기준은 이 사람이 쓴 카페 후기 게시물 중에서 각 게시물의 좋아요를 모두 합친 개수이다

1 + 1 + 3 = 5 (3이 아닌 5!!!)

이거 봐라!!!! 총 5개다!!! 3개가 아니다 정말!!!

 

 

 

와 이게 무슨일이지 하면서 뇌정지가 왔다가

정신차려보고 로그를 하나하나 꼼꼼히 봤다

여기서 내 머리 위에 물음표 10개가 달렸다

설명을 하자면 사진에 있는 쿼리를 실행을 한건데

쿼리 안에 '?'가 2개 있다

'?' 안에 데이터가 들어가는데 그 데이터는 쿼리 바로 아래에 찍혀있는 두 줄,

'2021011022T00:00'과 '2021-11-27T02:41:17.243845'가 순서대로 들어간다

이 범위 안에 있는 데이터들을 조회한다는 뜻인데, 

'2021-11-27T02:41:17.243845' 이것이 잘못 되었다

'2021-11-27T02:41:17.243845' 이것은 쿼리를 실행한 시각이 들어가야 정상인데

난 오전 2시 41분에 실행하지 않았다.

오전 4시 40분쯤 실행했다

이렇기 때문에 뇌정지가 왔었다

'2021011022T00:00'과 '2021-11-27T02:41:17.243845' 이것이 아닌

'2021011022T00:00'과 '2021-11-27T04:40:00' 이것이 들어가야 정상인 것이다


로컬에서 테스트해봤다

API를 실행한 시각과 함수의 매개변수에 들어가는 시간을 비교해야 한다

time 변수는 LocalDateTime의 now() 를 사용해서 API를 실행한 시각이 들어가야 한다

즉 5시 22분이 아닌 5시 23분이 들어가야 정상이다

하지만 왜 time 변수엔 5시 22분이 들어가있는거지?!?!?!?!?!?

 

 

 

29줄도 디버그 찍어보고

혹시나 시간대 설정을 잘못 해서 그런가 싶어서 현재시각도 sout 해봤다

 

 

 

디버그를 다시 실행했다

현재 시각도 잘 찍혔다

그런데

서버가 실행되자마자 바로 이 부분으로 디버그가 찍힌다!!!!!!!!!!!

왜!!@!?!?!?

잘 생각해보니까 time변수는 RankingService의 전역변수이다

그래서 그런지 서버를 실행한 시각이 time변수에 들어가는 것 같다

빨간 선으로 표시한 부분을 주의깊게 봐야 한다

오전 5시 35분에 서버를 실행했고, 그래서 전역변수 time에는 서버를 실행한 시각 오전 5시 35분이 들어갔다

나는 5시 36분에 이 API를 호출했다

이 API는 "실시간" 랭킹이기 때문에 사람 머리로 예상해봤을 땐 time변수에 5시 36분이 들어가야 한다

하지만 5시 36분이 아닌 5시 35분이 들어가있다

 

결론은 저 time변수는 서버 실행 시각이 들어간다는 말이다.

그리고 저 위쪽에 EC2에서 실시간 랭킹 API를 호출했을 때 찍힌 시간이 오전 2시 41분인데

이것은 서버를 재기동한 시각인 것이다

 

증거 제출합니다

오전 2시에 재기동을 했고 실시간 랭킹 기능 때문에 2시 이후에 또 재기동을 했었다

그 시간이 오전 2시 41분인 것이다

 

 

 

후..............원인을 찾아냈다

좀 일찍좀 찾아내지 자려고 했는데 이 새벽에 이 사실을 알아챈거냐....