10년차 프로그래머의 기술 회고
프로그래머
프로그래머라는 직업은 뭘까?
- 구분하기 좋아하는 사람들은 코더, 디벨로퍼, 엔지니어로 부를 것이고
- 모르는 사람에겐 돈을 많이 벌게 보이거나, 달라는대로 돈을 줘야하는 직업일 것이고,
- 고용주에겐 mechanic 으로 보일 것이다.
나에게 이 직업은 뭘까?
- 단기기억이 장기기억으로 전환되는 시점에 불현듯 모든 걸 해결할 아이디어가 생각나 키보드를 잡거나
- 경사하강법에 스스로를 던져 아침 새소리가 들릴 때까지 의자에서 일어나지 못하거나
- 코딩이 너무 하고 싶은데 교양과목만 수강해야해서 가질 않았던 전공일 것이다.
요즘 나는 이렇게 이야기를 하고 다닌다.
전 인터넷에 집 짓는 사람이에요.
- 프론트엔드요? 그거 인터리어하는 거에요.
- 백엔드요? 그거 공구리 치고 내장공사 하는 거에요.
- 데브옵스요? 그거 땅파고 철근 박는 거에요.
- 보안이요? 그거 단지 내에 못 들어오게 하는거에요. 복도식 요즘 싫어하잖아요.
프로그래밍은 현실세계의 개념들을 차용해 사람이 하던 걸 자동화하기 위함인데, 이걸 깨닫는데까지 너무 오래 걸린 것 같다.
이제야 왜 많은 교수님들이 현업에서는 짬이 찰수록 기본기가 중요하다. 라고 침이 마르게 이야기를 했는지 알 것 같다.
프로그래밍
GPT로 모든 게 다 될 것 같은 시대에 프로그래밍 스킬이 중요할까?
내 대답은 아니오였다. 서비스의 아이디어가 기술 스택보다 중요한 시점이 왔다. 클로드 섀넌을 처음 듣는 사람들도 서비스를 만들 수 있게 되었고, 그 코드를 배포할 수 있는 엣지 컴퓨팅이 성행한다.
이렇게 가면 언젠가 무너질거에요 라고 설득할 수 없다. 무너지고 나서 이렇게 될 거라고 했잖아요 라고 불난 집에 기름을 부울 수도 없다.
사회 분위기가 더 그렇게 만들고 있다.
기술 스택
모든 기술은 트레이드오프이다.
새로운 것은 항상 큰 비용이 발생한다. 구성원의 숙련도와 유지보수의 관점에서 바라봐야한다.
난 여긴 학원이 아니야, 새로운 걸 쓰고 싶다면 개인 시간을 써서 일주일 안에 프로토타입을 보여줘. 라고 말하지만, 지금 누굴 위해 공부하고 있는데 라고 생각하는 사람도 태반이다.
소프트웨어 공학이 중요한 이유이다.
이상향
그렇다면 내가 싫어했던 건 뭘까, 부실공사인지도 모르는 건 괜찮다. 모를 수도 있지.. 하지만 부실공사라 말하지 못 하게 하는 건 내 몸에 과부하를 준다.
스트레스를 받지 않기 위해서 이상향 체크리스트를 관리하려고 한다.
- 코드 오너 기능이 있는가? 특정 코드를 수정하면 파일별 오너에게 코드리뷰를 받을 수 있는 문화 조성이 되었는가?
- 코드 리뷰의 평균 코멘트 수는 어느정도 되는가?
- 브랜치 전략은 어떻게 되는가?
- 유닛테스트가 파이프라인에서 실행되는가? 그렇다면 커버리지는 몇 퍼센트인가?
- 실제 데이터 기반으로한 통합 테스트가 파이프라인에서 실행되는가? 그렇다면 통합 테스트에 포함하는 기준은 무엇인가?
- E2E 테스트가 주기적으로 실행되는가? 그렇다면 관리 주체는 누구인가?
- 테스트 드리븐으로 가기위해 케이스를 구현할 수 있는 시간을 충분히 주는가?
- 외부 요인에 대한 카오스 테스트를 진행하는가? 재해복구에 대한 필요성을 알고 있는가?
- 오픈소스의 관리는 어떻게 하는가? 소프트웨어의 버전 관리는 특정 사이클로 돌아가고 있는가?
- 도커 파일과 디플로이먼트를 개발자가 직접 관리하는가? 그렇지 않다면 관리 주체는 누구인가?
- Private network 구성을 위한 지원을 시스템팀으로부터 받을 수 있는가? 그렇지 않다면 VPC를 구성가능할 수 있는 환경이 제공되는가?
- 코드의 퀄리티 유지를 위해 기계적으로 어떤 것을 돌리고 있는가? 린트와 정적분석 등을 진행하는가?
- 장애 발생시 해당 장애를 모두에게 공개하고 장애보고서를 작성하는가?
- 구성원 모두가 서비스에 대해 오너쉽을 가지고 있는가?
- 대표하는 서비스의 SLA가 어느정도 되는가? OOM 장애 빈도 또는 500번대 장애 빈도가 어느정도 되는가?
- SLA가 인사고과의 표준이 되는가?
- 오너의 방향성이 모든 구성원에게 공개되는가?
- 데이터 기반의 의사결정이 진행되는가? 로그 수집을 위한 툴은 어느 것을 사용하고 있는가?
- 로깅 포맷은 Open Telemetry로 표준화 되어있는가? 그렇지 않다면 어떤 포맷으로 관리하고 있는가?
- 웹 메트릭을 수집하고 있는가?
- A/B 테스트로 기능 도입이 가능한 기반이 있는가? 그렇지 않다면 기획의 인사고과는 어떻게 하고 있는가?
- 디자인시스템을 사용하고 있는가?
- 스토리북을 같은 레파지토리 내에 관리하고 있는가?