EBS 다큐 프라임 자본주의가 아무래도 방송했던 내용을 정리해둔 것이라 그런지 술술 읽히고 내용도 괜찮았던 거 같다. 부를 재편하는 금융 대혁명 같은 경우에는 내 수준에는 내용도 어려웠고, 출퇴근하면서 하도 졸면서 봐서 완독 예상 시간 158분인데 4시간 50분(291분) 봄.
커밋메시지 제목의 시작부분이 [이슈번호] 인지 체크하고, 아닐 경우 이슈번호인지 체크하고 [이슈번호]로 포멧팅 해주도록 작성했다. 사실 이슈번호 자체가 오타일 경우를 대비해서 정규표현식으로 체크해주면 어느정도 오타도 체크할 수 있을 것 같은데 오타라는게 어떻게 나올지도 모르고, 경우의 수를 모두 체크하기 복잡할 것같아서 커밋할 때 그냥 이슈번호를 아예 작성안하기로 스스로 결심했다. 그래서 사실 이슈번호로 시작하는 지 체크하는 것도 필요없을 것 같긴하다.
# Subject line should be contain Issue Number.
if ! [[ "$(head -n 1 $COMMIT_EDITMSG)" =~ ^"[$BRANCH_NAME]" ]]
then
if [[ "$(head -n 1 $COMMIT_EDITMSG)" =~ ^"$BRANCH_NAME" ]]
then
echo -e "\033[40;33mCommit warning:\033[0m The Issue Number should be expressed in the form of [Jira Issue Number]."
echo -e "\033[40;33mCommit warning:\033[0m Converted to the form of [Issue Number]."
echo "$(sed -i -e "1s|$BRANCH_NAME|[$BRANCH_NAME]|g" $COMMIT_EDITMSG)"
else
echo -e "\033[40;33mCommit warning:\033[0m Subject line should be contain Issue Number."
echo -e "\033[40;33mCommit warning:\033[0m Added [Issue Number].."
echo "$(sed -i -e "1s/^/[$BRANCH_NAME] /" $COMMIT_EDITMSG)"
fi
fi
2) 제목에 Type이 명시되어야함
간단하다. 커밋메시지 파일의 첫번째 줄에 type에 해당하는 것이 몇 개(?) 들어있는지 체크하여 0 이면 에러 발생시켰다.
# Subject line should be contain what Type it is.
if [ "$(head -n 1 $COMMIT_EDITMSG | egrep -c '(\[+[feat|fix|docs|style|refactor|test|chore|etc]+\])' )" -eq 0 ]
then
echo -e "\033[40;31mCommit failed:\033[0m Subject line should be contain what Type it is."
exit 1
fi
3) 제목의 길이는 50자를 초과하면 안됨
간단히 wc를 통해 character 숫자를 체크했다.
# Subject line should be less than 50 characters.
if [ "$(head -n 1 $COMMIT_EDITMSG | wc -L)" -gt 50 ]
then
echo -e "\033[40;31mCommit failed:\033[0m Subject line should be less than 50 characters."
exit 1
fi
4) 제목 다음엔 공백이 필수적으로 와야함 요게 좀 문제라면 문제인데, 커멧 메시지 파일의 2번째 줄이 공백이 아니면, 두번째 줄에 공백 삽입으로 하고 싶었는데 왜인지모르게 sed로 공백을 넣으면 아예 안들어가거나 두 줄씩 들어가길래, 아예 두 줄이 들어가게 두고 세번째 줄을 삭제하였다.
# After subject line, line space is required.
if [ -n "$(sed -n '2p' $COMMIT_EDITMSG)" ]
then
echo -e "\033[40;33mCommit warning:\033[0m After subject line, line space is required."
echo -e "\033[40;33mCommit warning:\033[0m A line space is inserted after the subject line."
echo "$(cat $COMMIT_EDITMSG | sed '1 a\\n')" > $COMMIT_EDITMSG
echo "$(cat $COMMIT_EDITMSG | sed '2d')" > $COMMIT_EDITMSG
fi
5) 본문의 길이는 72자를 초과하면 안됨
마찬가지로 wc 통해서 character 숫자 체크했다. 어쩌피 제목 50자는 위에서 체크했으니 그냥 커밋메시지 모든 라인에 대해서 수행했다.
# Every single description should be less than 72 characters.
if [ "$(wc -L < $COMMIT_EDITMSG)" -gt 72 ]
then
echo -e "\033[40;31mCommit failed:\033[0m Every single description should be less than 72 characters."
exit 1
취업하고 여차저차 정신차려 보니 남이 개발한 AI 모델을 운영/배포 할 수 있는 플랫폼 개발을 해야하게되었다.
장기적으로 소프트웨어 엔지니어로의 변환을 위해 선택한 직장이긴했지만 생각보다 너무 빨리 포지션 변경이 이뤄졌다.
이래저래 찾아보니 MLOps의 개념이 내게 필요하다고 생각하여 관련 내용들을 지속적으로 조금씩 정리하고자 한다.
MLOps의 개념 자체가 아직 대두된지 오래되지않은 개념이라 그런지 구체적인 방법이나 형태가 완벽하게 정리된 것은 아닌 것 같다.
하지만, 일반적으로 아래와 같은 세가지 개념은 포함하고 있는 것으로 볼 수 있는 것 같다.
MLOps = (Model / Data / Dev) Ops
Model Ops = 머신러닝 모델 개발
Data Ops = 데이터 처리 및 관리
Dev Ops = 모델 운영/배포
MLOps(Machine Learning + Operation)의 궁극적인 목적은 말그대로 머신러닝 모델을 실제 서비스에 적용되기 시작하면서 생기는 다양한 이슈들
예를 들면, 머신러닝 모델이 언제 업데이트 되어야하는 지? 서비스 운영하면서 생기는 데이터들은 어떻게 관리해야하는지(데이터의 버전 및 학습용 데이터와의 차이 등)? 모델의 배포 관리는 어떻게 해야하는지? 머신러닝 모델의 운영은 어떤식으로 할 것인지? 을 해결?하기 위한 것이기 때문에 너무나 많은 부분을 포함하고 있고, 향후 계속해서 정립되고 다져져야하는 분야인 것같다. (API/모델/데이터/ML 인프라 이를 모두 포괄하는 큰 개념)
MLOps 관련 해서 접근하기 전에 가장 먼저 MLOps를 통해 하고자하는 것이 무엇인지 정의하는 게 필요한데, 크게 두 가지로 나눠 볼 수 있다.
1) 내가 직접 많은 모델들을 개발하여야 하는지
2) 다른 사람들이 모델을 개발할 수 있도록 하는 것인지(플랫폼)
당연하게도 이것을 바탕으로 고객을 설정하여 고객의 요구 스펙/사용성을 바탕으로 개발하는 것이 필요함.
나의 목적은 두 번째 항목인 플랫폼 제공에 가까워 해당 사항 관련해서 지속적으로 찾아 공부하여 포스팅해야겠다.