유사개발자의 생존기, 그래도 죽으란 법은 없구나

2021. 8. 8. 00:36Work Log/SK Energy⛽

반응형

어떤 이야기에서부터 시작을 해야될까.

지난 일지의 내용이 무색할정도로 7월 한달은 너무너무 바빴다.
지난 인턴일지에도 얘기를 했었지만, 나는 지금 비정형 데이터(이미지)에서 텍스트를 추출해 데이터프레임으로 정제 후 데이터 베이스에 저장하는 일련의 과정을 자동화하는 모듈을 구현하고 있다. 기존에는 매일 매일 발행되는 유가 정보들이 담긴 pdf를 사람이 일일이 엑셀 시트에 정리를 했다면, 이제는 이것들을 자동화 하겠다는 그런 취지가 담긴 업무였다.

비정형 데이터에서 텍스트를 추출하는 과정은 일반적으로 (1) 이미지를 인식하여 바운딩박스를 치고(opencv같은 라이브러리들의 역할), (2) 내가 필요한 바운딩박스만을 가져와 텍스트로 변환(tesseract같은 라이브러리들의 역할)으로 이루어지는데, Azure에서는 일일이 데이터 추출을 위해 코드를 구현할 필요없이 머신러닝 모델을 제공해준다.

그치만 이런 Azure도 무적이 아닌게, 이게 일괄적으로 배포해주는 모델이다보니 제약조건이 굉장히 많다.
(훈련 데이터 추가가 더이상 안된다거나, 학습 후 알려주는 정확도의 기준을 MS에서 제공하지 않아서 신뢰할 수 없다거나, 뽑은 텍스트의 데이터타입이 뒤죽박죽이라던가.. 기타등등)
그중에서도 Azure가 가장 치명적인건 이미지의 화질이나, pdf 이미지의 디자인이 조금만 달라지더라도 정확도가 바닥을 친다는 것이다.

좀전에 내가 7월 한달이 너무 바쁘고 힘들었다고 했는데, 그 이유인즉슨..기존에 나에게 주어졌던 과제는 '앞으로 들어올' 이미지에 대해 처리할 모듈을 구현하는 거 였는데,
갑자기 지난 3년간 있었던 모든 데이터를 텍스트화해서 데이터베이스화 하라는(일주일안에) 업무가 생기면서 나의 헬게이트가 시작되었다.

과거 데이터를 가지고 텍스트를 추출하려하니 기존에 학습시켰던 모델로는 도저히 제대로 나오질 않아서(심지어 년도 별로 자꾸 형식을 변경한다 ..죽이고싶어)형식이 변경되는 일자를 기준으로 개별로 머신러닝 모델을 학습시켜서 사용했다.

여기서부터 이제 지옥이 시작되는데.. 머신러닝 모델을 거의 4-5개를 만들고 내가 뽑아야 하는 데이터가 기간별로 뿔뿔이 흩어져있다보니 온갖 오류가 발생하기 시작했다.
어떤 테이블은 다른 회사에서 사온 DB 시트랑 병합하다보니 누락이 되는 문제도 있었다.(사온 것도 근데 멀쩡하게 생기진 않았다. 후처리해서 파이썬에 돌려야됨..)


안그래도 실수를 잘 하는 타입인데 이렇게 복잡하게 상황이 돌아가다보니 뇌절이 시작 되었다.
데이터가 잘못 뽑혔는데 대체 어디서부터 어떻게 잘못되었는지 파악하기가 너무 어려운 상황. 심지어 코드도 일회성이라 모듈화시켜놓지도 않아서(그냥 구데기 그자체) 뭐가 잘못된건지 찾는 것보다 그냥 싹 갈아엎고 처음부터 다시하는게 훨씬 나은.. 그런 상황이었다.
아무리 생각해도 일주일안에(거의 3일이었다) 해결 할 수 있을 것 같지 않았고, 어느 순간 실수했던 코드와 예상하지 못했던 오류들을 수정하는 코드가 덧대고 덧대면서(엉망으로) 문제가 눈덩이처럼 불어나서 갈아엎어야 되는걸 직감적으로 알아차렸지만..납기일을 꼭 맞춰야 한다는 압박감에 그냥 그렇게 얼레벌레 오류가 있을 수 있으니 추후에 수정하겠다는 말과 함께 제출하게 되었다. (일단 완성은 했으니까...일단 하긴 했잖아ㅜㅜ)
게다가 갑자기 오라클하고 연결해야하는 업무까지 겹치면서, 그냥 멘탈에 붕괴가 오고 말았따..

그리고 소중한 나의 주말을 헌납해서 어째저째 데이터 테이블을 다시 만들었는데..데이터 테이블이 잘못 된걸 아시고 전화가 오셨다.(진짜 죽고싶었다) 그래도 주말에 미리 만들어놔서 전화를 받고나서 1시간만에 데이터를 잘 복구해서 데이터 베이스에 저장을 해놨다.
사수님께도 너무 죄송하고, 실수가 있어서는 안되는데 생겼다는 거에 너무 내 자신이 한심하고 초라하게 느껴졌었다.
물론 직원분께서 미안할 필요도 없고, 자신도 검토를 안했으니 자기 잘못도 있다며 이때까지 충분히 잘해왔다고 상심하지 말라곤 하셨지만 또 그게 곧이곧대로 받아들이기가 쉽지가 않았다.



추가로 처음 입사할때 주어졌던 것보다 점점 내가 소화해야하는 업무의 범위가 점점 넓어지면서 압박감을 받았다.
분명 처음에는 자동화 코드까지는 할 필요가 없고, Azure 모델 학습이랑 간단한 파이썬 후처리 코드만 하면 됐었는데 어느 순간 정신을 차려보니 자동화 모듈 구현에 백엔드까지 일부분 다루고 있는 내자신을 발견 ..

물론 이렇게 나의 범위가 넓어지는게 싫은건 절대 아닌데, 내가 잘 모르는 부분을 다루고 마감일이 정해져 있다보니 압박감을 받는건 어쩔 수 없는 것 같다.
코드 리뷰를 해주는 사람도 없고(그러다 보니 오류가 생기면 한참 못찾고 뱅뱅 떠돌 때가 있다), 혼자 개발하고 혼자 구현하고 또 그렇게 구현한 결과물이 한치의 오류없이 바로 현업에 투입이 되어야 하다보니 압박감이 장난아니었다.

처음부터 컴퓨터 공학 전공이 아니다보니 그렇게 썩 자신이 있는 편이 아닌데, 이런 불완전한 내가 만든 불완전한 코드를 대기업에서 직접, 바로 사용한다?
그리고 그걸 현업에 계신 분이 가져다가 쓴다? 불안해서 죽을 것 같았다. try except로 잡아놨다지만 언제 어디서 오류가 터질지 모르기 때문에.. 모든 개발자들은 다 마음 속에 이렇게 불안을 품고 사는걸까? (현업 개발자분들 소중한 의견 받습니다..)

학교에서 코딩을 할때는 과제를 하다가 오류가 발생하면 해결해보고 마감일 다되가는데도 안되면 "아몰라 감점받지 뭐 일단 어느정도는 됐으니까 내자" 하면 됐었는데, 회사에서는 오류가 났는데 마감일 됐으니까 그냥 낼게요 뭐 이런게 안되니까 (일단 주어진 과제는 완벽히 수행해야 되니) 정해진 기간 안에는 반드시 오류를 해결해야하는데, 어디서부터 잘못된건지 알 수 없는 오류일 문제일경우에는 스트레스가 장난아니었다.

모든 개발자가 다 이렇게 사는거겠지?(유사개발자로 밥 먹고살기 너무 힘들다. 살려주세요)

정말 다행히 인턴 같이 했었던 개발에 빠삭한 오빠가 있어 얼레벌레 어째저째 해결을 하기는 했다. (세상에서 제일 작은 나만의 CS..킹갓이동찬..당신ㄴ은 천재야 ..)
그래도 죽으란 법은 없다고, 어떻게든 오류가 다 해결이 되긴하더라. (사람이 쫄리면 두뇌 풀가동을 하게 되어있다)

오빠랑 얘기하면서 아, 이렇게 코드 리뷰도 같이 해주고 오류 생기면 같이 얘기해볼 수 있는 환경이 된다면 얼마나 좋을까? 그리고 이런 개발자들이랑 일하면 얼마나 좋을까? 하는 생각이 들었다.

그래서 바로 LG CNS에서 it기획 직무 뽑는지 알아봄 ..(이런 개발자와 함께라면..야근도 좋아..)
근데 코딩테스트 보더라? 아 바로 포기했자너 ㅋㅋㅋ

인내심 만렙..

그리고 또 한가지 힘든 점은, 내가 오늘 하루 있었던 일이나 힘들었던 것들을 하소연하고싶어도 말할 사람이 없다는 거다.

예를 들면..

내가 오늘 있었던 일 : "오늘 azure에 데이터프레임을 업로드 하려고하는데 그 과정에 필요한 특정 메소드가 import가 안되는거야..알고보니까 그 메소드가 있는 패키지가 18년 이후로 사라졌더라고. 깃헙이랑 스텍오버플로 찾아보니 아예 다른 방식으로 업로드를 하든가 구버전으로 다른 패키지들을 통일시켜줘야되는데, 구버전으로 다운그레이드해도 안되고 다운그레이드하면서 결국 버전이 꼬이는 바람에 그냥 가상환경 날리고 새로 설치했어 ㅠ 어떻게 고쳐야할지 모르겠어...당장 내일까지인데,내일은 잘 할 수 있겠지..?"

남들에게 설명할 때 : "오늘 코드가 안돼서 버렸어..(침묵)"

로밖에 설명을 못한다. 솔직히 이 분야를 잘 모르는 사람에게 TMI 뿌려가며 얘기하기도 미안하고, 뭐 하여튼간에 안됐다는 말이 핵심인거니까 그렇게 간략하게 얘기는 하지만 뭔가 영..시원섭섭한 느낌이랄까. 설명을 다 못하는 내 입장도 답답, 그 설명을 못알아듣는 상대방도 답답. ..

그래서 최근에 정슨찬(이 오빠는 넥슨에서 카트만들고 있다. 이번에 런칭 늦어지면 다 이 오빠탓 ㅋㄷ) 이랑 강남에서 저녁을 먹으면서 이런 얘기가 나왔는데, 개발자가 친구 없는 이유가 있댔다.
이렇게 모두가 갈라파고스가 되는거야 ..?
개발자가 개발자 만나는 이유가 역시 있는걸까..?


그래도 회사 일이 마냥 싫거나 무섭다거나 한건 아니다.

사실 이런 기회를 주어준 회사에게도, 또 같은 부서 내 직원분들과 과장님에게도 너무너무 감사하다.(어차피 이 일이 아니었다면 배나 긁으면서 유튜브 보고 있었겠지. 그거보단 스트레스받는게 그래도 백배 천배 낫다)

그 전에는 가상환경이라던가, 파이썬에서 커널을 사용해야되는 이유, 개발 환경 간에 연결 같은게 굉장히 모호한 개념이었는데 이 곳에서 하나씩 건드려보고, 직접 구현도 하면서 "아~이게 그래서 그런거구나" 하는 것들이 굉장히 많다.

물론 가상환경 다루는건 운영체제나 오픈소스 수업때 배웠지만 그때는 약간 왜 이런걸 배우는지에 대한 이유가 선행되지않고 "일단 해 !!!" 인 느낌이어서 그냥 하라는대로 했었는데, 직접 실무에 쓰이는 코드가 구현되고, 또 작동하는걸 보면서 많은걸 배운다. (동시에 작년에 좀더 열심히 공부할걸, 하는 후회가...)

제발 들으라고!!!벼락치기하지말라고!!!


ETL작업을, 그것도 정직원도 아닌 일개 인턴이 실무에 쓰이는 코드를 대기업에서 구현하는 일은 아마 거의 없을 것이다. 하는 일은 진짜 어렵고, 매순간 타임어택으로 업무가 떨어져서 심장이 하루에도 몇번씩 바닥에 떨어지지만 배우는건 정말 많다.

사람은 완벽할 수 없고, 부족한 점은 개선해나가되 자신에게 너무 큰 기대를 하지 말고 하루에 하나씩 달성해나간다면 좀 더 건강한 마음으로 업무를 할 수 있을 것 같다.

전에는 완벽한게 좋고, 목표를 크게 세우고 완벽하게 성공하지 못하면 내 자신을 몰아세우고 채찍질을 했는데(그리고 이게 어느정도 성공을 끌어주긴했었음) 장기전으로 무언가를 끌어갈 때에는 그렇게 좋은 마인드는 아니라는걸 깨달았다. 기대를 내려두고, 한발짝 뒤에서 천천히 가야하는 것 같다.



우리가 갖는 모든 불안과 두려움의 핵심은 사건에 대한 통제가능성이 우리에게 있느냐, 없느냐에 달려있다고 했다.
내가 하는 모든 업무들의 상황과 오류들을 통제할 수는 없겠지만, 그날 하루의 시간을 어떻게 활용하고 사용할 것인지에 대해서는 통제 가능하니 아주 큰 문제를 아주 작게 쪼개어 하나씩 부셔보자.

이런 식으로 또 하나를 배워가는 것 같다!

마무리는 금요일 저녁 야경❤️


반응형