32살의 늦깎이 개발자가 여차저차 취업이 됐다.
시뮬레이션 개발 직군에 관심을 가지고, 자사 프레임워크를 호라용하여 스마트팩토리 관련 디지털트윈/3D시뮬레이션 개발하는 회사에 취업한 지 1년이 되었다.
진로를 영상 제작자에서 개발자로 바꾼 늦깎이 개발자였지만, 용케 시뮬레이션 개발이라는 직군에 들어갈 수 있었다.
1년 짧다면 짧지만, 대기업 과제 2개를 진행하며 부트캠프 밖의 개발을 경험해봤다.
과제를 진행하며 GPT 결제가 아까울 정도로 GPT를 못썼다. 인터넷이 안 됐기 때문
입사 첫 달은 처음 써보는 C#이라는 언어와 DEVS 시뮬레이션(이산사건시스템 기반 시뮬레이션)이라는 도메인 지식을 습득하려고 노력했다. C#의 언어는 자바와 닮아있어 익히는 데 오래걸리지 않았고, DEVS 시뮬레이션은 논문을 읽고, 대학교 무료 인강들을 찾아들으며 이해하려고 했다. DEVS 시뮬레이션은 모델들이 상호작용하며 시뮬레이션을 이끌어가는데 객체지향과 유사한 점이 있다고 생각해서 연관해서 이해하려고 노력했었다.
이후 DEVS 시뮬레이션 기반한 간단한 어플리케이션을 하나 만들어보고, 다음 과제에 사용할 데이터 기반 예측 방법을 공부했다. AI를 사용하지 않고, ML.NET을 활용해서 간단한 예측 모델을 만드는 요구사항이었다. 회귀분석에 대해서 공부했고, 이걸 다른 직원들에게 발표까지 했다.
분명 회귀분석 심도있게 공부한 거 같은데 6개월 안 썼다고 다 까먹음 ㅎ
그리고 인턴 마지막 달 프로젝트에 투입되었다.
두 개의 프로젝트를 했고, 둘 다 물류 시뮬레이션이었다.
첫 프로젝트에서 내가 맡은 큰 기능 두 개는 리플레이와 예측 모델이었다. 그 후에는 시뮬레이션 보고서 / 물류 Move 개선을 진행했다.
투입되고 제일 먼저, 예측 모델을 위해서 운영 DB를 열어봤더니 150칼럼짜리 테이블 3개를 보고 놀랐었다. (당연하게도 150칼럼 중 필요한 칼럼은 몇 없었다.) 사실 칼럼 15개 이상이면 많은거다 등의 이야기를 듣고 있었기 때문에 150개짜리 칼럼을 보고는 이런게 있을 수 있는게 현업이구나 싶었다.
그래서 필요한 데이터만 취합한 다음, 간단하게 사용할 데이터만 DB설계하고 자사 운영 DB를 따로 뒀다.
사실 예측 모델도 예측 모델인데, 리플레이가 버겁게 다가왔다. 그래서 리플레이를 어떻게 구현해야 하는지 열심히 고민하던 중 DEVS 시뮬레이션 특성상 동일한 Output을 보장할 수 있는 Input값만 있으면 되지 않을까? 라는 생각을 했다. 그리고 적용시켜 리플레이를 개발했다.
예측 모델의 경우 일단 데이터 다듬기가 어려웠다. 컬럼은 많지만, 하나의 테이블로는 정보를 모두 확인할 수 없는 구조였다. 추가 데이터를 추출해보고자 원본 데이터를 가공하기도 했다. 예측하고자 하는 데이터와 다른 데이터들이 연관이 없더라... 라는 문제가 있었다. 시계열도 되지 않았고. 그래서 시간이 많이 끌리긴 했다. 결국 데이터의 분포를 5% 단위로 끊고 빈도수 %를 재서 랜덤값을 추출하는 형식을 취했다.
예측 모델은 끝나고 나서도 문제였는데, IPC를 해야했다. 예측 모델을 별도의 프로세스로 띄우길 원했다. 소켓, 공유 메모리 등을 공부했고, 그 중 제일 러닝 커브가 낮으면서 성능도 준수한 Named Pipeline을 구현했다. 이 당시 너무 바빠서... 제대로 공부하기보단 구현이 우선이어서 휘리릭 넘어갔는데 생각보단 빠르고 오류없이 구현됐다.
시뮬레이션 보고서의 경우 데이터 핸들링이 중요했다. 현재 이력 데이터와 시뮬레이션 내 데이터를 비교해야 했다. 시뮬레이션 데이터를 어딘가에서 저장했어야 했는데, 왠걸 필요한 데이터들이 리플레이 데이터에 존재했다. 그래서 리플레이 데이터를 재활용해 사용했던 기억이 있다.
이 때, 마무리 기간이라 엄청 바쁘고 정신없고 늦게까지 야근하던 시절이었다. 그래서 처음 만드는 거지만, 빨리빨리 만들었어야 했다. 사실 구현 자체는 어렵지 않았는데 성능 이슈가 있었다. 시뮬레이션 끝나고 보고서 뜨는데까지 4분....
일단 구현부터 한 후, 성능을 손봤는데, 데이터 핸들링하는 클래스를 싱글턴으로 만들어서 새 인스턴스가 만들어지지 않도록, 여러 보고서에서 하나의 객체에 있는 정보만 볼 수 있도록 했다.
그리고 DB I/O를 최소화했다. 처음에는 For문을 돌면서 조건에 맞는 데이터를 계속 가져왔는데 그냥 한 번에 몽땅 가져와서 어플리케이션 단에서 핸들링하도록 했다. -> DB I/O자체가 성능에 큰 이슈였다.
애니메이션 만이 아니라 로직 자체를 개선해야 됐다.
자사 솔루션에 어긋나는 움직임이 존재했기 때문에 문제가 생겼다. DEVS 모델의 특징을 최대한 살려서 자사 솔루션에 맞추려고 노력했고, 불필요한 if문은 삭제했다.
솔루션에 어긋나는 움직임은 if문 덕지덕지 붙이긴 했지만.... 여튼 로직적으로 애니메이션적으로 부드럽게 넘어갔다.
사실 이 부분을 하다가 완료하기 전에 다음 프로젝트로 넘어갔다. 다른 팀원들에게 맡겨둔 채로
여전히 물류 개발이다.
저번 프로젝트에서는 막내였지만, 두번째 프로젝트는 규모도 커졌고 막내도 탈출했다.
현재는 Python으로된 물류 로직과 시뮬레이션 간 통신 개발을 하고 있다. Python으로 개발한 물류 로직을 시뮬레이션에 적용하기 위해 Socket으로 통신하며 추가 기능과 Parameter들을 제공하고 있다.
후임들이 생겼다는 것이 큰데, 전 프로젝트에서는 질문만 했지만, 지금은 질문을 받기도 한다. 질문을 받을 때, 그들의 고민을 해결하거나 같이 고민하며 전 프로젝트에서 했던 방법이나 틀린 부분을 같이 찾으며 프로젝트를 진행하고 있다.
DEVS 시뮬레이션이라는 도메인 공부를 깊이 했던게 주효했다.
도메인 지식이 중요하다. <- 컨퍼런스 등에 가면 많이 듣는 말이다. 이 말을 체감했달까
도메인에 따라서 클라이언트의 경험과 요구사항이 달라진다.
고객사를 만족시켜줘야하는 이상 그것들을 공부하고 더 나은 어플리케이션을 만들어 나갈 때 도메인 지식은 필수불가결한 거 같다.
부트캠프 2개를 수료하면서 공부했던 것이 주효했다. 부트캠프에서 배운 것을 잘 녹여냈던 것 같다.
코테를 어디쓰냐! 라고 흔히들 말하지만 물류 시뮬레이션을 하면서 그래프 알고리즘을 많이 사용하고 있다. 나... 한 때 백준 플레티넘. BFS/DFS 다익스트라는 빠삭하지. 누군가에게 우스울 정도일지 몰라도 현업에 들어가서는 크게 도움이 됐다.
그리고 부트캠프에서 프로젝트를 하며 모르는 기술스택을 빠르게 습득하고 적용해야할 때가 있는데 그게 효과를 받던 기억이 있다. Named Pipeline이라던지...
심지어 다양한 언어를 사용해봤던 것도 도움이 됐는데 현재는 Python 개발도 함께하고 있으며, java 파일을 읽어서 로직을 이해해야 했던 적도 있었다.
소프트 스킬이 아쉽지 않았나 싶다.
문서화 시스템이 잘 되어있진 않아도 적어도 내 파트는 문서화할 수 있지 않았나 싶다. 회의 자료에 들어갈 서류들을 만들긴 했지만, 내가 무엇을 했고, 어떻게 했는지 남기는 게 중요해보인다. 팀이 많아질수록. 최근에 필요하다고 느낀다.
클라이언트사랑 회의에서도 예상치 못한 질문이 나오면 크게 당황할 때가 있는데 그 부분도 줄여야할 거 같다.
성능을 고려하지 않은 구현도 못했던 점이다.
일단 구현이 먼저긴 한데, 그래도 조금만 성능에 대해서 고민했으면 시간이 많이 걸리지 않았을 거 같다는 후회가 있다.
바쁘다는 핑게로 성능 문제가 있을 걸 예상하면서도 일단 구현부터 손이 나갔으니 바람직하지 않았던 거 같다.
Paper Work를 위한 스킬이 부족하지 않나 싶다. Excel을 공부해야 할 필요를 느꼈다.
실제로 엑셀이나 그와 유사한 앱을 많이 사용하기에 Excel과 친해질 필요가 있다.
바쁘다는 핑계로 개발 공부를 손에서 놨던 거 같다. 다시 공부를 시작해야 하지 않을까.
그래프 이론도 공부해야 하고, OS도 공부해야할 필요가 있다. 웹이 아닌 윈도우 / 리눅스 앱이기 때문에 그 아래에 있는 OS를 공부할 필요를 느꼈다.
자격증.... 자격증도 따야지. 정처기와 Sqld를 목표로 하고 있고, 빅분기도 따두면 도움이 될 거 같다는 생각이 든다. (정처기가 필요없다는 이야기를 많이 듣지만, 나처럼 문과에 학점도 낮으면 일단 따고 봐야한다는 생각이 들었다.)
사실 DB와 데이터를 더 공부해야 한다는 걸 느꼈다. 시뮬레이션 개발 분야의 커리어를 쌓고 싶지만, 사실 내 커리어가 어떻게 될 지 모르겠다. 그러나 어떤 분야의 개발을 하던, DB와 데이터가 중요하다는 건 변하지 않을 것이다. 그래서 그렇다.
그리고 틈틈히 영어.... 운동도....
다 하진 못하겠지만 몇 가지라도 올해 - 내년엔 해봐야지
부트캠프 수료 후 막막했다. 무엇을 더 공부해야 할 지 몰라서 스프링 인강만 사서 주구장창 듣고 알고리즘 문제사이트에서 문제풀면서 1인 1솔만 열심히 했던 것 같다.
그러나 현업, 긴 호흡의 프로젝트를 진행해보며 내가 무엇이 부족한지를 알게 됐다. 방향이 잡혔달까.
그래도 첫 일년은 부족한 점이 많았지만 그렇게 못하진 않았다고 생각한다! 내년엔 더 잘해야지