트러블슈팅💥

donchanee·2021년 4월 1일
0

딥러닝 프로젝트

목록 보기
2/3

멀쩡히 배포되던 프로젝트

POST로 Django에 이미지 base64 인코딩을 보낸 뒤,

Django에서 이미지를 저장하고 다시 저장한 이미지를 바탕으로

Torchserve 추측 api로 통신을 보내 딥러닝 추측에 대한 콜백을 받고,

결과값을 처리해주는 과정이 AWS 위에서 아무 이상없이 작동했었다.

뭔가 문제가 생김

첫번째 프로젝트를 마무리하고 두번째 프로젝트를 시작하고 있는 찰나에

예측된 결과값을 처리하는 과정이 딱 한번씩 밀려서 나오는 오류가 생겼다.

[Errno 10053] 현재 연결은 사용자의 호스트 시스템의 소프트웨어의 의해 중단되었습니다

구글링 결과

  1. 공공기관의 인터넷이나 공용인터넷을 사용하는 경우 임의 포트를 사용할 경우 포트의 사용을 막아버리기 때문에 소켓에러가 발생하는 것이다.

  2. 에러는 내부망에서 외부망으로 Request 요청이 지연되었을 때 가장 발생할 가능성이 많은 오류다.

이러한 오류들로 인해서 발생한다고 한다.

그치만 우리는 AWS 상에서 진행했고 소켓 에러라고 하면, OSI 모델의 전송 계층에서의 문제가 있었을 것이라고 생각이 되는데, 정확한 이유를 알지는 못했다. 아무래도 2번의 문제같은데..

마치 큐에 결과값이 저장되어있고, 한 차례씩 밀려나온다는 느낌이었다.

찾아보니 유닉스(우분투) 소켓과 포트에 대해 공부하게 되었는데 더 공부해야겠다. 당시 이게 안되어서 이 문제만 가지고 하루를 꼬박 머리를 싸매고 고민을 했다.

하지만 이상한 점은 그 다음에는 아무이상없이 잘 작동을 했는데, 만약 추후에 다시 발생하는 일을 방지하기 위하여 데이터를 전송하는 로직을 바꾸게 되었다.

이미지를 저장하는 부분에서 서로 동시에 요청이 왔을 경우를 상정하고, 그때의 오류가 아니었겠는가에 대해 고민하였다. 또는 너무 많은 요청이 한꺼번에 들어왔던지 이런 류의 오류일 것이라고 추측했다.

그래서 ajax를 활용해서 따로 이미지를 저장하지 않고, 이미지를 인코딩해서 전송을 한 뒤, 서버단에서 디코딩을 해서 저장을 하지 않고 즉시 추측하는 방법으로 바꾸고 난 뒤 정상적으로 동작하게 되었다. 그 뒤로는 아무 문제가 없었다.

또 다른 문제

이건 좀 간단하고 처음에 생각을 못했던 부끄러운 류의 오류인데

처음에 로컬에서 개발을 하고 있다가 openCV의 로컬 웹캠을 사용해서 서버단에서 처리를 하려고 했다.

이 생각이 굉장히 바보같았던 생각인게 AWS 위에 배포를 하면 로컬 웹캠이 없는데...

그래서 Javascript에서 getUserMedia()를 사용해서 해결하게 되었다. 이렇게 하니까 브라우저가 접근해서 웹캠을 사용하려 하면 HTTPS 통신이 필요하다는 것을 알게되었고, HTTPS를 AWS의 우리 도메인 상에 적용하려는 필요가 생겼다.

0개의 댓글