데이터 엔지니어링 파트의 전반적인 느낌은 생소-> 좀 재미있다 -> 어? 너무 어려워! -> 으악! -> 어..어떻게든 된다...
였던 것 같다.
공식문서를 잘 읽고 예제를 이해하는 능력을 더 키워야한다.
생소한 부분들을 많이 배웠고 한 달 동안 하기 버거운 양을 억지로라도 소화시키기 위해 노력했던 것 같다. 그동안 머신러닝 모델을 배우거나 수학적 혹은 통계적인 이론을 배울 때에는 내용은 어려워도 노력하면 이해가 된 것에 비해 실습을 하면서 다른 기술들을 적용해야했기 때문이다. 컴퓨터 환경과 백엔드의 내용들은 이론으로 접근하면 지나치게 추상적이고 실습으로 들어가면 가이드라인이 부실한 느낌이었다. 각자 쓰는 어휘나 어조가 다르기 때문에 문맥을 파악하지 않으면 엉뚱한 부분에서 해메고 있거나 적절하게 이해하기 어렵다 생각했다. 공식문서를 더 자주, 교과서이고 가이드라인이다 생각하며 읽기 싫게 생겼지만 읽어내야한다. 판다스 공식문서, 사이킷런 공식문서, 도커 공식문서 등등은 구조는 비슷한데 표현방식이 약간씩 달랐지만 기본적으로 기능과 예제를 통해 설명하기 때문에 낯선 것에 겁을 먹는 나쁜 습관을 더 개선해야겠다 생각했다. 또 가끔 나와 비슷한 고민을 하고 해결한 사람들이 올린 코드나 지문들을 이해할 수 있도록 문서들을 자주 읽고 나 또한 내 블로그의 글들이 누군가에게 도움이 될 수 있도록 정리하고 전달력을 높힐 수 있게 하면 좋을 것 같다.
주도적인 학습, 전략적인 학습이 필요해
최근 2년간 논문과 페이퍼들을 많이 쓰다보니 생긴 버릇 중 하나가 이해될 때까지 그 주제를 파거나 정리병이 생긴다는 것이다. 온전히 정리하기 어려운 내용도 내 방식대로 문서화하려고하다보면 당연히 주어진 시간 내에 해야할 일을 하지 못하고 그 뒤의 일도 미뤄지게 된다. 수능 시험처럼 적당히 넘어가고 나중에 돌아와서 해결하는 것처럼 일종의 전략이 필요한 것 같았다. 배우는 단계에서 모든 것을 마스터할 수 없지만 최소한 전 이걸 이렇게 해서 배웠어요!라고 할 수 있을만큼 스스로의 공부 방법이나 루틴을 좀 더 잘 봐야한다는 생각이 들었다.
이번 프로젝트를 하면서 가장 난감했던 부분은 배웠던 내용들을 하나로 엮는 것이었다.
flask, html/css/javascript,heroku,docker,git, API 등등 정말 다양한 것들을 배웠는데도 이것들을 하나로 엮어 데이터 파이프를 만들어야한다는데 이걸 어떻게 하라는 건지 이해가 되지 않았다. 머신러닝모델 자체는 만들어보았지만 머신러닝모델을 API로 구현하는 건 어떻게 하지?를 고민하는 데 꽤 많은 시간이 걸렸다.
flask는 파이썬 웹어플리케이션으로써 머신러닝과 관계없고,장고나 스프링과 같은 종류의 서비스라고 할 수 있다. 머신러닝은 파이썬 라이브러리 등을 사용하여 만들고 학습된 결과인 머신러닝모델은 피클이라는 파이썬 라이브러리나 joblib 라이브러리 등으로 객체 파일로 저장한다. 예측을 수행할 때에는 저장된 객체를 다시 불러와 함수를 적용하는 것처럼 작업한 뒤 그 결과를 웹으로 보여주는 데에 flask 등을 쓴다. 보통 주기적으로 학습시키고 학습한 결과는 위의 피클 등을 사용하여 객체 파일로 만들어 둔다. 위 과정이 머신러닝모델의 웹 배포과정을 대략적으로 나타낸 것이다.
요약하면 머신러닝 모델을 웹으로 배포하는 과정은
문제정의 - 데이터 수집 - DB저장 - 모델링 - 서비스 - 배포
의 순서로 진행이 될 것이다.
이 때 내가 배운 것보다 훨씬 다양한 도구와 모델들이 사용될 수 있으며 데이터를 수집하는 것도 스크랩핑을 하거나 csv나 Json 파일 등을 사용할 수도 있다. 무수히 많은 방법론들을 적절하게 취사선택해서 사용해야했다. 아쉽게도 내 학습 방법이 이 파트와는 맞지 않아서 많이 해매었지만 실제로 동작하는 서비스를 기획과 디자인, 그리고 개발까지 해보니 뿌듯했다.
학부 때 기획, 디자인, 경영과 관심있는 것들 이것저것을 다 배우면서 개발에 대한 아주 대략적인 이해와 미약한 경험은 했지만 그 모든 것을 통틀어서 어떤 결과물을 만들어내본 적은 드물었기에 이러한 경험들을 통해 더 성장하고 있다는 것을 느끼고 있어 뿌듯했다. 당장 3개월 전에 비해서 지금의 나는 더 많은 것을 배우고 이루어내었으니 조금은 칭찬해주고 싶다. 물론 많이 부족하다. 헤로쿠 등을 사용해서 웹 배포를 하거나 css와 java로 나름의 UI/UX를 구현하면 좀 더 나만의 포트폴리오가 되었을 것 같다. 하지만 시간을 전략적으로 사용하기 위해 이번 주 남은 시간은 데이터 엔지니어링 부분에서 부족했던 부분, 특히 배포와 관련된 부분과 API, 무엇보다 SQL에 대해 복습을 더 철저하게 하고 딥러닝을 공부할 것이다.
그래도 처음으로 만든 머신러닝을 웹 어플리케이션으로 만들어보는 데까지 아등바등거리면서 구현해본 경험을 토대로 앞으로 더 많은 포트폴리오와 과제, 업무들을 수행할 수 있게 되길 기대해본다.