회사에서 외부  고객 관계서비스를 사용하고 있다. 이 서비스의 API 를 이용해서 회사 시스템과 연동하고 있는데, 이 API에서 잘못된 값을 response 하고 있었다.  Response 된 항목중에 첨부파일 개수를 알려주는 값이 있는데, 이 값을 잘못 보내주고 있었다.
 이 업체가 외국 업체인데 뭔가 일 처리가 답답했다. 우선 버그를 수집하는 사람이 개발자가 아니라보니 한 단계 거쳐서 이슈가 전달되었다. 그리고 버그 사항과 무관한 조언을 듣게되었다.(API 버그라고 했는데, 브라우저 cache 와 쿠기를 지워서 테스트 해보라는 말을 듣었다. 아무래도 그냥 매뉴얼 같다. ). 그리고 불필요한 스크린샷을 요구했는데, Postman(https://www.postman.com/) 으로 API 를 테스트해본 스크린샷을 달라고 했다. 그리고 전달하니까 API KEY 가 노출되어 있다고 가려서 스크린샷을 달라고 했다.(이건 버그수집하는 사람이 직접해서 개발자에게 넘길 수도 있지 않은가.)
그리고 이거 해봐라, 저거 해봐라 하면서 우리를 테스터로 부려 먹었다. 오늘 처리가 되었다는 연락을 받았는데, 우리가 전달한 case 에 대해서만 처리해 두었다.  다른  Item에 대해서도 첨부파일 개수가 잘못된 경우가 있었는데 처리해 주지 않았다.  
  내 추정으로는 이 버그는 파일을 첨부할 때나 삭제할 때,  해당 DB 의 row 에서 첨부파일개수가 증가하거나 감소하는 형태로 되어 있었을 것이다. 그런데 어떤 case 에 해당 첨부파일개수 증감이 이루어지지 않는 case 가 있었던 것 같다. 
그래서 이미 잘못된 data에 대해서는 어쩔 도리가 없었던 것 같기는 하다. 그런데, 첨부파일이 확실히 존재는 하고 있고, 해당 서비스에서 정상적으로 보여주고 있기 때문에 다른 table 데이터를 이용해서 다시 재 계산할 수 있을것 같다. 그 정도는 확인 해 주었어야 하는데, 이 것을 안해주었다. 

 왠지 모르겠지만 외국업체에 이런 것을 요청하면 일 처리가 뭔가 깔끔하지 않는 것 같다. 

 원래 서비스 서버에 배포되면 안되는 코드인데, git를 다루다가 실 서비스 서버에 배포되어 버렸다. 이것을 한동안 모르고 있다고 퇴근하는 길에 알게 되었다. 어쩐지 git 명령어 에러가 발생하더라. 이 에러를 해결하는 과정에서 인터넷에서 못도 모르고 그냥 명령어를 사용하다가 문제를 일으킨 것 같다. (사실 왜 이렇게 되었는지 모르겠다.)

 그래서 급하게 집에서 작업해서 수정했다. 왜 이리 급하게 작업해야 하는게 많은지 모르겠다. 급하게 작업하다보니 실수도 많아지고, 기술부채가 많이 쌓이는 것 같다. 

파일시스템 계층구조 표준(https://yiunsr.tistory.com/756) 에 따라 실행중인 파일의 .sock파일(port 가 아닌 파일로 stream 을 주고 받을 때 생성되는 파일) 이나 .pid파일(Process identifier 로 프로세스가 실행중일 때 중복실행을 방지하고 위해 생성하는 파일, 계속 상주하는 프로그램의 경우 특정 경로에 자신의 pid 파일이 존재하고 있으면 이미 실행중임을 인식해서 자동으로 종료되는 방식으로 구현되오 있다.)의 경우 보통 /var/run 내 디렉토리를 만들어 파일을 생성한다. 
 전에 gunicorn 으로 flask 배포(https://yiunsr.tistory.com/888) 에서 /var/run/ 으로 sock 파일이나 pid 를 파일을 설정했던 것도 이런 이유이다. 그런데 이 경로 /var/run 안에 디렉토리를 만들면 재부팅시 이 파일 뿐만 아니라 디렉토리도 삭제된다. 이것은 아마 종료시 run 중이 아니기 때문에 시스템에서 알아서 해당 파일 전부를 삭제하는 것으로 추정된다.

 오늘 이 때문에 디렉토리가 없어 systemd 가 동작하지 않는 현상을 경험했다. 내가 다른 /var/run 과 섞이지 않게 하기 위해 따로 디렉토리를 만들었는데, 재부팅 해니 이 디렉토리까지 사라져서 systemd 로 동작하는 스크립트가 pid, sock 파일을 만들지 못해서 동작하지 않는 문제가 있었다. 

 찾아보니 systemd 설정시

[Service]
User=www-data
Group=www-data
RuntimeDirectory=uwsgi
RuntimeDirectoryMode=0777

같은 식으로 하면  /run/var/uwsgi 디렉토리가 생성되고 설정한 대로 group 과 user 가 생성되고 RuntimeDirectoryMode 대로 퍼미션도 설정되는 것을 확인 했다.

systemd 는 뭔가 공부할 것이 너무 많은 것 같다. 언젠가 정리가 필요할 것 같다.