기간 | 2020.07.01-2021.02.28 |
직무 | DevOps 엔지니어 |
1. 계기
4학년 1학기, 졸업 프로젝트를 마치고 앞으로 뭘 해야 할지 고민할 때 즈음 친구가 현장실습을 지원한다는 말을 듣고 나도 직무 경험을 더 해봐야겠다는 생각에 현장실습을 지원하게 됐다. 졸업학점도 다 채우고, 더 이상 들어야 하는 강의도 없었기에 학기 대체를 해서 돈도 벌면서 취업 준비도 해보겠다는 그런 생각으로 현장실습에 지원하게 됐다.
하지만 그런 생각은.. 정말 내가 나를 모르고 지원했던 거였다.
나는 118%로 초과해서 들은 전공 수업에서도 시험을 보지 않고 팀 프로젝트로만 평가하거나 시험 비중이 낮은 PBL(Problem Based Learning) A0, A+만 받았던 사람이다...
나는.. 개인과제를 하지못하는 한이 있어도 조별과제만큼은 성공적으로 이끌어나가기 위해 4년 내내 노력했다. 즉, 무언가 문제를 책임져야 하는 상황에서는 쉽게 그만두지 못한다.
그래서 결국 이번 현장 실습 내내 취업 준비를 하지 못하고, 현장 실습을 마치고 졸업 유예를 하고 지금 취업 준비를 하고 있다😣. 변명이라면 변명이라고 할 수도 있지만, 일을 할 때는 취업 준비를 위해 코딩 테스트 공부를 한다던가, 자기소개서를 쓰고 첨삭을 받는다던가 할 시간이 없었다. 그 시간에 담당하고 있는 프로젝트를 어떻게 개선하면 좋을지, 필요한 지식을 공부하는데 바빴다.
아무튼 서류를 합격하고 면접을 본 뒤 2020년 7월부터 현장실습생으로 입사를 했다.
2. 프로젝트 & 배운 점
(1) 수집 자동화
크롤러의 유지보수를 했다.
크롤러를 관리하면서 '크롤링 핵심 가이드'와 '파이썬을 이용한 웹 크롤링과 스크레이핑' 책을 읽으면서, 데이터 수집과 처리에 대해 조금 더 심도 있는 공부를 하게 됐다.
크롤러에 대한 권한은 온전히 현장실습생에게 있었으므로 여러모로 코드를 많이 수정했다.
A 크롤러
- 처음 크롤러를 받았을 때 정보를 수집하는 사이트 중에 절반이 수집이 안되거나 전처리가 안되고 있어서(유지보수가 잘 안되고 있었다), 정보를 수집하는 사이트의 구조와 수집하고자 하는 콘텐츠가 업데이트가 되는 기간, 시간 등을 체크해서 그에 맞게 수집 정보를 수정했다.
- 정보가 제대로 업데이트 안 되는 사이트에서 정보를 수집하고 있기도 해서(대부분의 글로벌 웹 사이트가 한국어 버전 웹 사이트는 영어 버전 웹 사이트에 비해 업데이트가 느렸다), 관련 내용을 공유하고 수집 대상을 변경하기도 했다.
- Javascript 등 반응형 웹 사이트가 많아지면서 크롤러가 원하는 정보를 다 수집하지 못하고 있어서, 코드를 조금 수정해서 반응형 웹에 맞게 동작하는 기능을 추가했다.
- 크롤링에 실패한 것이 아니라 웹 사이트에 관련 정보가 업데이트가 안된 건데 실패했다고 매일 보고서가 왔기 때문에, 예외 처리 기능을 추가했다.
이 외에도 데이터 저장 방식을 개선하고, 크롤링 대상 웹 페이지에 주는 부하를 줄이기 위한 개선을 했다.
B 크롤러
- 매일 50개~100개 이상의 ㅇㅇ가 수집되는데 일일이 읽고 분류하기가 힘들었기 때문에, 이제껏 쌓인 데이터를 바탕으로 중요도를 분류하는 기능을 추가했다.
- PEP 8 스타일로 코드 리팩토링을 했다.
- 보고서 구조를 변경했다.
- 중복된 ㅇㅇ 분류 기능을 개선했다.
그 결과 처음 크롤러를 관리할 때는 업무를 하는데 3시간가량이 걸렸지만(소프트웨어 크롤러가 수집에 실패했을 경우 하나하나 원인 파악하고, 어떤 정보 수집해야 하는지 찾고, 전 처리하고, B 크롤러는 모든 ㅇㅇ를 하나하나 읽으면서 중요도 높은 ㅇㅇ 분류하고, 중복된 ㅇㅇ 제거하고...) 개선을 마친 후에는 20분에서 30분이면 관련 업무를 마칠 수 있었다.
(2) 검증 자동화
내가 새롭게 진행한 프로젝트다. 크롤러를 개선하고 나니 업무가 너무 줄어들어서 한가해진 티가 났는지 팀장님이 제안해주셨다. 아예 백지상태에서 시작한 프로젝트기에 시행착오가 많았다.
- Environment: Windows 10 64bit, Windows 10 32bit, Server 2012, Server 2012 R2, Server 2016, Server 2019
정말 많은 종류의 Windows 운영체제를 경험해봤다.
- Tool: Oracle VirtualBox, SQLite, Pycharm
클라우드 환경에서 진행을 하려 했는데, 우선 대략적으로는 버추얼 머신에서 진행해보고 설계를 마치고 나면 클라우드 환경으로 옮겨가서 그에 맞게 프로그램을 수정할 부분이 있으면 하기로 했었다. 하지만 나는 버추얼 머신까지만 개발을 하고 퇴사를 하게 돼서 클라우드 환경에서는 개발을 못해봤다. 아쉽다.
버추얼박스를 사용하면서 데브옵스 2.0 툴킷의 내용이 생각났다.
이러한 방식으로 테스트된 것이 실무 환경으로 갈 수 있다는 사실을 알게 되었다. 배포된 소프트웨어로 새로운 VM을 생성하고, 테스트한 다음에 이전 것에서 새로운 것으로 실무 환경의 라우터를 전환했다. 굉장한 일이었다. 느리고 리소스가 요구된다는 점을 제외한다면 말이다.
각 서비스에 대해 별도의 VM을 갖는다는 건 지나치다. 그럼에도 불구하고 끈기만 있다면 불변적인 서버는 좋은 아이디어였지만, 우리가 사용하는 그런 접근 방식과 그것을 지원하는 데 필요한 도구는 충분하지 않았다.
- 데브옵스 2.0 툴킷
정말 이 책은 내가 겪은 일들을 세상의 많은 사람들이 겪었다는 것을 알게 해 줬다. 저자는 이 책을 읽음으로써 같은 실수를 하지 않길 바라며 책을 썼다고 했지만, 나는 실수를 하고 나서 이 책을 읽었다! 하지만 다행히도 나는 그 실수의 매우 초기 단계를 진행하고 있었고, 그 후의 실수는 하지 않기 위해 열심히 책을 읽고 공부를 하고 있다.
공부를 하는 것은 세상의 많은 똑똑한 사람들이 많은 시행착오를 통해 배운 사실을 같은 실수를 하지 않고 배울 수 있도록 해주는 것 같다.
아래에서도 언급을 하지만 나는 이상적인 결과물을 만들어내지 못했다😣. 하지만 주어진 리소스 내에서 나름 노력을 했다. CLI로 하는 게 최선이지만 그러지 못하는 상황이었기에 GUI를 사용해서 동작하는 프로그램을 만들었다.
처음에는 프로그램을 실행하고 어떻게 반응하는지에 따라 프로그램의 상태를 추측하는 방식을 사용했는데, 프로그램의 데이터베이스를 사용해서 여차여차 분석을 하면 바로 상태를 알 수 있다는 것을 알게 되었고,
GUI에 의존하는 상황을 최소화했다.
로그를 통해 이상 탐지를 자동화하는 게 목표였는데 역시 GUI만 아니었어도 조금 더 좋은 결과물이 나왔을 거란 아쉬움이 가득이다.
(3) 파일 업데이터
관련 정보만 정리해서 주라고 한 것을 잘못 이해해서 프로그램을 아예 완성해서 보고했다. 운영을 위해서 필요한 프로그램이었고 어차피 내가 사용할 프로그램이었기에, 프로그램을 완성하고도 계속해서 개선을 했다.
업무를 하다가 불편했던 부분을 자동화할 수 있었고, 내가 가장 헷갈렸던 업무였기에 자동화를 하고 나서부터 정말 행복했다...
파이썬과 웹 크롤링은 정말 업무 자동화에 최적화되어 있는 것 같다.
(4) 운영
다양한 자료를 통한 국내 소프트웨어 동향 파악 및 공유를 했고 그 결과 제품의 지원 범위가 기존 대비 10% 증가했다.
(5) 협업(Git)
깃을 통한 협업은 학교에서도 해본 적이 있지만 이렇게 본격적으로 해본 것은 처음이었다. 브랜치를 관리하고, Merge request를 보내고, commit message의 작성에 규칙이 있고, 형상관리를 어떻게 하는지 짧게나마 경험할 수 있었다.
처음에는 feature 브랜치를 만들라고 해서 정말 브랜치 이름을 feature로 만들었는데 알고보니 'feature/코드-업데이트의-핵심적인-내용' 으로 해야 했던거나, 커밋 메시지 규칙을 모르고 처음에 커밋 메세지를 날렸다가 리베이스하고 다시 커밋메세지를 작성하면서 깃의 다양한 기능을 공부했던거나... 깃과 관련해서도 추억이 많다.
게다가 기록으로 모든게 남는다는 생각을 하니 내 코드와 커밋 메세지에 대한 책임감이 더 무겁게 느껴졌고, 새삼스럽지만 읽기 좋은 코드와 문서의 중요성이 체감 됐다.
깃 외에도 주 5일 5회 회의를 하면서(업무 시간의 1/3은 회의를 한것같다) 업무 보고를 할 때 어떤 말을 해야하고, 질문을 할 때 어떻게 해야하는지, 개발 회의가 어떻게 진행되는지 배울 수 있었다.
(6) 인수인계
퇴사 한달 전부터 인수인계를 준비했는데, 나는 정말 인수인계 자료를 잘 만들었다! 원래 현장실습생을 교육하던 문서가 있었는데, 내가 작성한 문서로 앞으로 교육을 진행하고 싶다고 위키에 업데이트 해달라고 하시기도 했다 ㅎㅎ.
예전에 인턴을 할 때 인수인계를 제대로 하지 못했던 것 같아서 아쉬움이 많이 남았는데, 이번에는 제대로 한 것 같아서 뿌듯했다.
내가 진행했던 프로젝트, 업무와 관련된 모든 문서를 종류별로 분류해서 참고 문서로 정리해두고, 달마다 어떤 업무가 반복되는지 특정 기간마다 해야 하는 업무를 정리해두었다. 물론 프로젝트에 대한 내용도 세세하게 남겨두었다.
3. 평가
현장실습 또한(인턴) 학교를 통해 진행했기에 총 3번의 기업 평가를 받을 수 받았다. 긍정적인 평가는 둘째치고 부정적인(?) 평가는 내가 나에게 내렸던 평가와 어느 정도 유사하다😅.
과거 웹 크롤러를 만드는 인턴을 해본 적이 있어서 쉽게 일에 적응할 수 있었다. 다만 데이터베이스를 사용해서 시스템 운영을 하는 것은 조금 어려웠다. 이때 데이터베이스가 날아가고, 늦은 밤에 복구하고.. 데이터베이스를 마이그레이션 하는 것을 보면서 정말 많은 것을 배웠다.
데이터베이스에 대량의 데이터를 업로드할 일이 있었는데, 원래 3시간이면 업로드가 완료되는데 8시간이 지나도록 업로드가 안되고 로그를 확인해보니 어딘가가 꼬여있는 것 같아서 팀원 분들께 공유드렸었다. 그런데 팀장님이 확인해보시더니 아예 인덱스가 다 꼬여버렸다고 하셨고... 여차여차하다 보니 데이터베이스를 한번 날리고.. 백업이 있는지 확인해봤는데 최근에 백업을 한 적이 없어서 빠른 복구를 하지 못했고.. 나는 이 날 처음으로 비자발적인 야근을 했었다. 뭐, 그래도 밤 중에 여차여차하고 나니 복구도 되고 데이터도 잘 업로드돼서 해피엔딩이었지만, 나는 이때 데이터베이스의 중요성을 뼈저리게 느꼈다.
'더 이상적인 결과물을 얻거나 더 빠르게 결과물을 얻어내기 위해 적절히 협조, 도움을 요청하는 것이 필요하기도 합니다.' ← 이 부분은 나도 발표를 진행하면서 뼈저리게 느낀 부분이다😥. 당시 나는 11월부터 온전히 새로운 프로젝트를 시작했었다. 내가 기획도, 설계도 하고 개발도 하고.. 일종의 파일럿 프로젝트와 비슷했는데, 설계까지는 잘했었다.
친하게 지내는 QA분께 커피를 사드리며 프로젝트에 대한 정보를 물어보고(몇 년 전에 엎어졌던 프로젝트를 내가 새롭게 시작하게 된 거고, 마침 QA분이 과거 담당자 셨기에 많은 부분을 알고 계셨다) 함께 기초 설계를 하고,
친하게 지내는 신입 개발자 분이 진행하셨던 파일럿 프로젝트의 결과물과 설계 발표물을 보여주셔서 함께 발표자료도 만들고 피드백도 받고...
여차여차해서 설계를 해서 1차 공유 회의를 했을 때까지는 좋았다..!
하지만 그다음에 프로토타입을 개발할 때가 아쉬웠다. 나는 내가 사용할 수 있는 리소스 내에서만 최선을 다했다. 그래서 이상적인 결과물을 얻어내진 못했다. 여기서 이상적인 결과물을 위한 협조, 도움 요청은 이번에 퇴사하면서 인수인계 문서로 [이상적인 결과물을 위해 필요한 것]이라는 제목으로 어떤 API가 필요한지 하나하나 적어놓고 나왔는데🙄, 나는 당시 핫픽스를 위해 바빠 야근도 하고 계신 분들께 '내가 이런 프로젝트를 해서 이런 기능이 필요하니까 개발해주세요!'라고 차마 말도 꺼낼 엄두도 내지 못했다.
그런데 지금 생각해보니 애초에 내가 업무의 우선순위를 마음대로 판단할게 아니었고, 최소한 미리 공유는 드렸어야 하는 게 맞다.
잘한 날도 못한 날도 모두 매일매일 업무 일지를 쓰고 있기에 이런 식으로 피드백을 받았던 기록이 남아있다. 위의 사진은 그 일부다.
지금 보니 살짝 부끄러운 내용이지만.. 이 날의 피드백은 정말 나에게 의미가 컸다. '내가 이거 하느라 힘들었다'같은 말은 (대놓고) 하지도 않았는데, 어떻게 아셨는지 내가 어떤 말이 듣고 싶었는지 알아주신 것 같았고 해낸 것보다 더 많은 칭찬을 해주신 것 같아서 정말 감사했다.
참고로 12월 말에 중간발표를 하고, 1월 중순에 데모를 했다. 1월 중순에 데모를 하고 나서 팀장님께서 해준 말씀이 있는데, 팀장님은 내가 퇴사를 할 때까지 설계 까지만 하고 갈 줄 알았다고 하셨다. 나는 그 말을 듣고 생각했다. 다른 분들께 도움을 청하지 않았다면 분명 설계만 하고 갔을 거라고, 그것도 프로젝트의 목적도 제대로 파악하지 못한 채로 엉망진창으로...
하지만 많은 분들의 도움을 받아서 설계를 마치고 여러모로 개발을 진행을 할 수 있었다. 2월부터 퇴사 준비를 하느라(업무 인수인계 자료 정리, 유지 보수 등) 새로운 프로젝트는 더 진행하지 못했지만.. 나보다 더 실력 좋은 개발자 분이 좋은 결과물을 만들어내서 회사에서 실제로 사용하게 된다면 정말 기쁠 것 같다.
(사실 'API만 정말 어떻게 만들어졌다면 GUI로 끼워 맞출 필요 없이 훨씬 안정적으로 CLI에서 프로그램을 실행할 수 있었을 텐데...'라는 아쉬움이 아직도 남아있다.)
이번에 퇴사를 하면서 받은 마지막 평가 의견이다😂. 요구한 수준 이상의 속도와 결과는 마지막으로 진행했던 프로젝트를 말씀하신 것 같다. 퇴사를 하고 나서 기업 평가 의견을 보면서 생각했다.
'마지막 퇴사를 할 때 나름 마무리를 잘했다는 걸까?'
'조금 더 열심히 개발했다면 더 좋았을 텐데'
그래도 기획운영팀으로 입사해 운영과 기획 업무를 하다가, 개발팀으로 이동해 개발 위주의 업무를 하고 단독 프로젝트도 진행해본 건 정말 좋은 경험이었던 것 같다. 지난 하반기에 취업 준비를 못해 이번 상반기에 취업 준비를 하게 됐지만.. 후회는 없는 걸로!
'회고 > 회사' 카테고리의 다른 글
이직 6개월차 느낀점(부제: 달라진 업무제도 적응기) (0) | 2023.06.18 |
---|---|
스타트업 인턴 회고 (0) | 2020.07.01 |