웹 프로그래밍

간단한 API 서버 후기

깜태 2021. 5. 17. 14:44
728x90

안녕하세요 오늘은 백엔드 초보자가 느낀 서버 개발 후기를 남겨보려고 합니다.

 

제가 작업한 일은 다음과 같습니다.

 

백엔드 API 개발

내용은 간단했습니다.

작성된 머신러닝 코드를 API화 작업해 사용자가 이미지와 URI 쿼리를 보냈을 경우, 이를 파싱해서 머신러닝에 이미지를 처리하고, 결과를 리턴하는 작업이였습니다.

 

개발은 Flask로 진행했는데, 처음이라 그런지 많이 서툴렀고, 간단한 작업도 삽질을 많이 했습니다.

이미지를 보내는 작업인데도 HTTP 방식을 깊게 이해하지 못해 content-type을 잘못 적는 것으로 시작해 일을 복잡하게 처리하는 경험을 해봤습니다. (글로 적으니 더 바보같다)

 

Flask 안에서도 restplus 라이브러리를 이용했고, REST라는 구조를 경험해보며 왜 필요한지 생각해봤고,

검색해보며 유튜브도 많이 봤습니다.

API가 왜 필요한지를 생각해보는 데에는 퉁퉁코딩님의 유튜브 채널이 많이 도움이 됐습니다.

https://youtu.be/irPmSB-AB-Q

 

새롭게 겪었던 점은 딥러닝 작업을 주로 하면서 raise, if-else와 같은 프로그램을 실행시켰을 때

단순한 에러를 잡아내는 게 전부였었는데 서버가 죽지 않게 하려니 try/except 구문으로 에러가

생길만한 부분을 예외처리를 꼭 해야된다는 점이였습니다.

간단한 작업일지라도 체크를 꼭 짚어야 한다는 점에서 꼼꼼하게 진행해야겠다고 느꼈습니다. 

 

로깅 작업

API 테스트를 진행해보니 try/except 구문을 이용해 어디서 문제가 생긴 곳을 문제없이 돌리게 만들 수 있지만,
일일이 어느 부분인지 확인하기 위해서는 로깅 작업이 필요했습니다.

단순하게 print를 찍어서 확인하는 것도 방법이겠지만,

에러의 단계를 나눌 수도 있고, 파일로 출력도 가능하며,

실행시점을 체계적으로 기록할 수 있다는 점에서 로깅의 필요성을 느꼈습니다.

 

EC2 to S3 업로드

업로드된 이미지를 DB로 모으기 위해서 AWS S3 인스턴스를 이용했습니다. 

S3은 AWS에서 제공하는 클라우드 서비스고, 

EC2는 AWS에서 클라우드 PC를 제공하는 서비스입니다.

어려운 작업은 아니였지만, AWS 생태계에 생소했기 때문에 많이 배워야겠다고 생각했습니다.

 

 

https://lovit.github.io/aws/2019/01/30/aws_s3_iam_awscli/

 

AWS CLI (Command Line Interface) 를 이용하여 S3 버킷 다루기 (파일 업로드, 폴더 동기화) 및 AWS IAM 등록

이전 포스트에서 AWS S3 에 버킷을 만들고 Web UI 를 이용하여 파일을 업로드, 공유하였습니다. 이번에는 AWS CLI 를 이용하여 로컬과 S3 bucket 을 동기화 시킵니다. CLI 는 terminal 환경에서 AWS 를 이용할

lovit.github.io

https://twofootdog.tistory.com/36

 

AWS S3 버킷 생성 후 파일 업로드/다운로드

이번 글에서는 AWS S3를 만들어보고 파일 업로드/다운로드 테스트를 진행할 것이다. 글의 순서는 다음과 같다. AWS S3란 무엇인가? AWS S3 버킷 만들기 AWS S3 버킷에 파일 업로드/다운로드 1. AWS S3란 무

twofootdog.tistory.com

 

 

개발서버 죽는지 체크

'서버'를 만들고 나면 제일 중요한 게, 죽지 않아야 합니다.

제가 작성한 코드가 예상치 못한 상황으로 종료될 수도 있었습니다. 

검색해본 결과 백엔드 서버가 죽지 않았는지 확인하는 작업을 헬스체크, 하트비트 체크 라고 합니다.

방법들에 대해서도 다양하게 알아보았는데요.

AWS lambda 를 이용한다던지, 도커 기반으로 구축했다면 쿠버네티스를 이용해 컨테이너를 체크하는 방법, nginx를 이용한 방법, 기본적인 설정으로 구축했을 때 등 다양한 방법이 있었습니다.

저는 도커를 사용하지도 않았고, Ubuntu18.04 에다가 설정해 그대로 올렸고, AWS같은 경우엔 비용 부담이 있는 걸로 알고 있기 때문에 제일 마지막 방법을 선택했습니다.

검색해본 결과 supervisord라는 리눅스 툴이 있어서 사용했습니다.

사용법에 대해선 하단의 링크를 참조해 만들어서 사용했고,

실제로 kill 명령어와 ps -ef 명령어로 확인해봤을 때, 정상적으로 돌아가는 걸 확인했습니다

 

http://www.kwangsiklee.com/2018/12/supervisord-%EC%82%AC%EC%9A%A9%EB%B2%95%EC%9D%84-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90/

 

후기

남들이 보았을 땐, 간단한 작업이였겠으나 저에게는 어렵고 흥미로운 도전이였습니다.

이번 계기로 백엔드란 작업이 어떻게 이루어지는 지 배울 수 있었고, 다음엔 더 빠르게 잘할 수 있을 것 같습니다.

검색해본 결과 플라스크보다 FastAPI가 새롭게 부상하고 있다고 하여

다음 API작업은 FastAPI를 이용해서 해보려고 합니다.

백엔드를 개발하는 입장에서 더 필요한 작업이나 도움이 될만한 정보가 있으시다면 댓글 달아주시면 공부해보겠습니다.

감사합니다.  

728x90