소개

이제 API를 만들고, 스키마도 공유하며 서버리스 환경에서 모델을 제공해줄 수 있다.

바로 회사에서 백엔드 개발자가 이 json을 보고 개발에 착수할 수도 있겠지만

이렇게 되면 기획자나 다른 의사결정자들은 모델의 결과를 확인하지 못하고 바로 서비스 출시가 된다

물론 precision, recall 등에 대한 논의도 6.2장 처럼 해야하겠지만, 기획자는 눈앞의 결과가 보고싶다.

반대로, 나도 모델의 성능이 궁금할 때마다 주피터 노트북을 띄워서 api를 호출해야한다

모델이 url이나 이미지 주소를 반환하면 모델의 결과 확인이 모델을 만든 나에게도 어려워진다.

이 문제를 해결하기 위해, 모델 제작자는 모델의 성능을 간편하게 확인 가능한 간단한 웹사이트를 만들게 된다.

<aside> 💡 모델러의 소통 기술 개인적으로 서비스에 가까운 모델을 개발하는 머신러닝 엔지니어에게는 소통능력이 다른 개발자보다 중요하다고 생각한다 (직관적으로 모델 성능을 고도화하는 연구자에 가까운 개발자보다 서비스용 api를 만드는 경우에 해당된다) 한가지 예로, 100점짜리 모델이란게 없기 때문에 80점짜리 모델을 서비스에 넣기 위해 설득과 납득의 과정이 필요하다. 10번 중 9번 완벽하지만 한번 치명적인 오류를 내뱉는 모델보다 8번 완벽하고 두번 조금 아쉬운 성능의 모델이 더 유효하다고 설득이 필요할 수 있다. spotify에서 유저가 들을 다음 곡을 정확하게 맞추기 위한 대회가 있었는데, 너무 뻔하게 다음 곡을 맞추니 유저의 취향 확장을 시키지 못해서 오히려 서비스적으로는 부정적인 모델로 판단된 적도 있다. 즉, 예측률 (precision)이 낮아도 서비스 기여는 더 높을 수 있는데, 이를 기획자에게 모델 제작자가 잘 설명할 수 있어야한다.

</aside>

FLASK 시작하기

데이터 관련해서 가장 자주 사용하는 언어가 파이썬이기 때문에, 데모 제작도 파이썬을 사용한다.

다만 프론트 부분은 html로 어느정도 코딩을 해야한다

우선, 간단하게 flask 프로젝트를 만들어보자.

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000)

위와 같이 코드를 돌린 후, 커멘드라인에서 flask run —host 0.0.0.0 라고 입력하면, 아래와 같이 프로그램이 돌고있다고 뜰 것이다

Untitled

이러면 {서버 ip}:5000번으로 서비스 접근이 가능하다.

단, 늘 해왔듯 서버의 5000번 포트에 firewall 해제가 필요하다 (3.1장 참고)

서비스 접근 시 아래와 같은 결과를 확인할 수 있다