달리는 자동차를 정비하는 방법
3분기 테마 회고들어가며
올해 초는 정말 어떻게 살았는지 아직도 모를 때가 많다. 바쁘기도 바쁘지만 앞이 안 보일 정도로 너무 어두웠다. 수년간 찾지 못했던 답을 찾아야 하는 과제라 굉장히 난이도도 높았다. 지금에서야 보면 별거 아니지만 모든 일이 그렇지 않을까 싶다. 방법을 찾고나면 허무하지만 인사이트를 얻게되는 것, 그게 이 길의 특징 아닐까 싶다. 생각해보면 대단한 기술을 만드는 게 아니라 우리가 가지고 있는 고정관념을 벗어나 놓치고 있는 방법을 발견하는 것이 아닐까 싶다. 이번 3분기 회고도 이와 마찬가지라고 생각한다.
어디든 가면 배우는 게 많은 요즘인데 지난 1년 이 직업을 가지면서 무턱대고 만드는 게 전부가 아니란 걸 많이 깨달았다. 여기 다른 동료분들은 프로젝트에 어느 틈도 놓치지 않으려고 secure 하게 코드를 작성하려고 한다. 어떤 작업을 시작할 때 architecture 를 크게 보고 작업에 필요한 재료를 몇가지 리스트를 뽑아 엄선해서 각각의 특성을 이용했을 때 후에 있을 damage 까지 고려하여 코드 작성이 시작된다.
단순하게 작동되어 상용화될 수 있는 무언가를 만드는 것에 멈추지 않고 그것이 오로지 우리가 의도한 방향으로, 목적으로 흘러갈 수 있게 오작동이나 보안에 대한 영역도 버리지 않는 셈이다.
달리는 자동차를 정비하기
자동차는 정비소에 정차해서 고장난 부분이나 새로 바꿀 부분을 확인할 수 있다.
1
만약 이를 주행중에 하려고 하면 어떻게 돨까?
목숨 걸고 주행하거나, 부품 하나 잃어버리면 도로 위에 언제 터질지 모르는 시한폭탄이 돌아다니는 셈이다. 우리는 앞으로 정비소에 자동차를 잠시 정차하지 않고도 주행중에 자동차를 정비하는 방법을 모색해야했다. 하지만 그간 진행해온 structure 로는 이를 실현할 수 없었다. 정비소에는 정차했을 때 정비할 수 있는 도구만 준비되어있지 이러한 도구를 가지고 주행중인 차를 제대로 정비하기란 쉽지 않을 것이다. 또 안전 보호대나 장치들이 없기 때문에 당장 주행중에 수리를 한다면 큰일이 벌어질 수 있는 것이다.
이를 위하여 우리는 기존과는 다른 architecture 와 기술들이 필요했고 주행중에 사고가 날 수 있는 모든 경우의 수를 미리 예측하거나 예방하기 위해 2차, 3차, 4차 안전 보호대를 준비하였다.
이러한 정비를 위해서는 기존에 가지고 있던 툴로는 어림도 없다. 기존의 방법으로는 달리는 차를 정비하기는 커녕 부품 찾기도 어렵기 때문이다. 기존의 틀을 다 걷어내고 처음부터 structure 를 다시 설계했다. 차량 바퀴는 주행중 정비하면 덜컹 거릴 수 있으니 최대한 부드럽게, 볼트나 너트는 잃어버릴 수 있으니 다른 걸로 대체하고, 주행중에 사고가 날 수 있으니 안전모나 안전장비 등도 갖춰야했다.
추가로 살펴봐야 하는 부분이 몇가지 더 있다. 부품도 주행중일때 교체를 한다면 안전성을 증빙을 해야한다. 그러기에 부품에 대한 신뢰도를 체크하기 위한 툴도 준비되어야 한다. 또한 정비소에선 부품이 여분으로 가져올 수 있지만 주행중엔 여분의 부품을 미리 준비하던가 어떤 부품이 얼마나 필요할지 사전 조사가 필요하다. 이러한 많은 것을 염두하면서 기존과 목적은 동일하게 자동차는 계속 달리는 퍼포먼스를 내야하기에 우리는 완전 다른 방향으로, 다른 structure 로, 다른 architecture 로 디자인했다.
어쨌든 돌아가기는 하니까
1
2
3
뭐 어떻게든 만들다보면 작동은 합니다.
작동은 언제나 하더라구요 .
생각한 모습대로 흘러가지 않는 이상한 모습이 펼쳐질 때가 종종 있어서 그렇지 ..
최적화와 함께 개발하면 좋다고 생각하지만 일단 작동되는게 먼저라고 생각하기에 목이 부러지더라도 일단 날아야지 그 이후에 목을 수술하던 목 근육을 강화하던 할 거 같다.
사실 작동은 되는데 생각대로 되지 않는다면 그 다음은 코드 한 줄 한 줄 디버깅의 시간이 기다리고 있다고 생각하면 된다.
버그 해결하는 방법: 자고 일어나거나 자려고 눕기
1
2
3
왜 그런거 있잖아요
잠잘때 폰 보면 안 보이는 벌레들이 휴대폰 조명에 모여들듯..
잠 잘려고 하면 보이지 않던 버그 해결 방법이 막 떠오른다고
책상에 6시간 동안 모니터와 씨름할 때는 도저히 알 수 없던 문제들에 대해 이상하게 내일하자 자려고 눕기만 하면 머릿속에 여러 테스트 도안들이 나와 다시 일어나서 모니터를 켜고 코드를 보게 한다. (물론 결과는 생각하는 것과 같다.)
이렇듯이 한번 생기면 잡기 어려운게 버그다. 정비소에서 정비하는 차량은 정비소 위치나 번호 그리고 정비했던 부품 등이 기록으로 남아 쉽게 확인이 가능하지만 주행중인 차를 정비한 기록은 추적하기가 어렵다. 혹시나 나중에 주행중 문제가 생긴다면 문제를 확인해야 하는데 정비소와 다르게 어떤 위치에서 어떤 부품을 왜 교체했는지 알 방법이 없다. 이러한 부분을 위해서 교채 히스토리 관리를 위한 툴도 만들었다.
정리하며
3분기는 연구도 개발도 적당히 반반 했던 시간이다.
시간이 날 때마다 기록하고 연구도 하고 개발도 하는데 다양한 코드도 많이 볼수록 배워가는 거 같고 신기한 패턴이나 유명한 회사에서 지향하는 기술이나 코드들은 조금씩 따라가보면서 학습해보려고 한다.
If you find any errors, please let me know by comment or email. Thank you.