들어가기에 앞서..
벨로그에서 자세한 기술 정리를 하다가 티스토리로 옮기게 되었습니다.
전에 썼던 글들은 차차 정리하여 이전할 생각이고 이번 주차 회고를 이곳의 첫 시작으로 글을 작성해 봅니다.
소개
로봇공학과 인공지능을 전공하면서 내외부 프로젝트를 7건 가량 완료했습니다. 이정도 실력이면 갈데 많겠지 라는 생각으로 여러 곳에 지원했지만 한국의 AI로봇분야는 현 시점에서 절멸 상태.. 였고 순수 소프트웨어 AI 개발자로 방향을 틀기에는 쟁쟁한 경쟁자들이 너무 많았습니다. 이렇게 될 줄 알았더라면 도메인 필드를 하나 딥하게 파던가, 순수 소프트웨어 개발을 전공할 걸 이라는 생각을 뒤늦게 했지만 새로운 것을 하기에는 재시작 찬스권이 없는 서민인지라 이전 경험을 바탕으로 조금씩 지식을 쌓으며 나아가 보기로 했습니다.
몇 달 전까지 자소설 닷컴에서 지원서 무한뺑뺑이를 반복하다 사이드 배너에 뜬 교육 공고를 보고 참여한 부트캠프인데 사실 전 채용 관련 인재추천 혜택만 보고 지원했고, 여기서 한다는 교육은 이미 알던거라 필요 없을거라 생각했습니다.
교육 초반부 까지는요.
내게 필요한건 실무 수행
업무를 바로 수행 할 정도의 교육은 충분히 들었다
라고 생각하고 있었습니다. 그런데
- IoC (Inversion of Control) 가 필요한 이유는?
- %%% 서비스 코드를 작성
- %%%% 아젠다를 Domain 개념으로 표현
- 확장성과 유지보수성을 모두 고려하기 위해 IoC 개념을 적용
- 또한 SRP 규칙을 준수하여 Clean Code를 작성할 수 있도록 구성
- TDD 적용을 고려하여 위의 내용들에 대한 테스트가 가능하도록 구성
책으로만 접해본 애자일 프로세스로 교육을 진행하면서 프로그램 유지보수와 확장성을 가지는 설계 방식으로 수업이 진행됐습니다. 지금까지 배운건 하드스킬, 그리고 지금 배우는 것은 소프트 스킬 이라고 부르며 이 부분에 대한 더 넓은 시야를 보게 됐습니다.
순수 AI 모델러가 줄어들고 있는 시기, 그리고 ML 자동화와 서빙에 일부 기업들의 관심이 증가했고 데이터 학습에 필요한 과정들을 실무 레벨에서 경험해 보는 기회가 되었습니다.
저는 KPT 회고를 좋아하지만 업무성과 공유에 잘 맞는 스타일이어서 그건 단위 프로젝트 기간에 써보도록 하겠습니다.
지금은 이번 주간 배운 것을 위주로 작성해 보겠습니다.
DDD vs DDD
Data Driven Development
Domain Driven Design
이 두 개념의 공통점은 중요하다는 소리는 들었어도 정작 배우거나 활용해 보지 못한 케이스가 있다.
이 포스팅에서는 Domain Driven Design 을 ML 서비스 배포에 적용해 볼 것이다.
Problem
고객의 이탈률을 예측해 보아라
이전 시간에는 웹+DB 구성으로 시각적인 서비스를 제공하는 과정을 진행했었다. 그리고 이번 과정에서는 머신러닝, 딥러닝 모델을 활용해 서비스 이용자들의 이탈률을 예측해 본다.
Try
뷰 컴포넌트로 구성한 웹사이트에 Fast API 로 머신러닝 추론 결과를 제공할 계획이다.
sklearn 의 기본적인 회귀 모델들을 학습시키고 D3 로 혼동행렬이나 회귀모형을 플로팅한다.
이 과정을 DDD 로 구현하면 아래와 같은 구조가 된다
- Controller
- APIRouter 를 활용하여 외부와의 통신을 담당한다
- Repositiry
- 데이터를 불러오고
- 학습하고(.fit)
- 예측하고(pred)
- 결과를 전달한다(return)
- Service
- 학습에 사용될 데이터를 제공한다 (여기서는 샘플 데이터를 생성하는 규칙을 다룬다)
이렇게 분류 모델 별로 즉 도메인 별로 Controller, Repositiry, Service 를 구성했다
머신러닝 파이프라인을 구성해 본 사람이라면 이 과정이 모두 main 하나에 들어가는걸 만들어 봤을 텐데 하나의 모델 밑에 여러 패키지들을 생성해 최소 기능 단위로 나눠놨다.
그리고 Vue 와 D3 로 대쉬보드를 작성한다
Lacked, Longed For
결과를 보면 데이터 학습이 이뤄지는 동안 빈 화면이 보여지고 학습이 완료 되면 그래프가 표시된다.
만약 사용자가 다른 활동을 하려고 이 페이지를 벗어나면 진행중이던 머신러닝 학습이 중단되고 다시 처음부터 시작하게 된다.
이 문제는 학습과 추론이 Repositiry 안에 모두 모여 있어서 결과 제공에 오랜 시간이 소요되는 것이며,
카프카를 사용하면 학습 결과를 기다리는 동안 페이지를 이탈하고 다른 활동을 하는 중에도 학습이 끊기지 않고 진행되고 결과가 나오면 알려주는 기능을 구현할 수 있다고 한다.
단위 프로젝트 결과물이 나오기 까지 몇 주의 시간 동안 배운 것도 많고 배울 것도 많고 시간이 더욱 없어질 것 같다.