Context switching 비용을 줄이는 노하우

프로그래밍에 시분할이라는 개념이 있다. 이는 동시성을 지원하지 않는 단일 스레드 상태에서 여러가지의 일을 하기 위해서 시간을 촘촘히 나누어, 여러가지 일을 마치 동시에 하는 것 처럼 보이게 만드는 시스템 단위의 작업을 의미한다. 사람도 뇌는 하나고, 사람이 행하는 멀티태스킹이라고 하는 것도 결국 시간을 조금씩 나누어 여러 일을 하는 것에 불과하다.

코드스테이츠 교육 엔지니어는 코스 진행(coaching)과 엔지니어링을 동시에 진행하는 사람이기 때문에, 두 가지일을 수시로 왔다갔다 해야하는 하드코어(?) 직업군에 속한다. 시분할을 밀리초단위로 하는 컴퓨터조차도 두 가지 일을 전환하기 위한 비용, 즉 context switch라는 작업을 해야하는데, 하물며 사람을 어떤가, 일을 번갈아 하다보면, 진행중인 일의 변화를 추적하기 위해 많은 시간을 쏟아야 하는 경우가 종종 생긴다. 멀티태스킹은 생산성의 40% 정도를 감소시킨다는 연구 결과[1]도 있는데, 어떻게 우리는 생산성을 높이면서 멀티태스킹을 할 수 있을까?

하루에도 몇개씩 쌓이는 Pull Requests

프로그래밍에 한정지어 이야기해보면, 엊그제 내가 작업한 내용 이후에 수많은 Pull Requests들이 이틀 사이에 산적해 있고, 혹여나 그 사이에 엊그제 정상적으로 돌아갔던 프로그램이 오늘은 돌아가지 않는다면, 이를 해결하기 위해 생산과는 무관한 시간을 많이 쏟게 된다.

이러한 일을 해결하기 위해서 코드스테이츠는 Daily Standup Meeting(이하 미팅)을 도입해서 매일 작은 코드 변화에 대해 나누는 시간을 갖는다. 이 시간은 밥 먹기 전 (밥 먹기 전이라는 타이밍이 매우 중요하다!) 15분 정도의 짧은 시간으로, 때로는 급한 결정이 내려지기도 하고, PR에 따른 코드 리뷰와 Merge를 실행하기도 한다. 그러나 그보다는 이전에 진행했던 방향과, 앞으로 진행할 방향에 대한 가벼운 나눔이라고 볼 수 있다. 그 결과 서로의 진행 상황에 대해 빠른 피드백을 얻을 수가 있게 되었으며, 큰 방향성에서 벗어나는 작업에 집중하지 않게 된다. 무엇보다 이 미팅에서의 강조하고 싶은 장점은, 스탠드업 미팅 도입 이후에 모두가 각자의 코드를 최신 상태에서, 작동하는 형태로 유지하는데에 큰 시간을 쓰지 않는다는 데 있다.

Daily Standup Meeting의 장점은 각자의 코드를 최신 상태에서, 작동하는 형태로 유지하기 쉽게 만든다

현대의 복잡한 프로그램은 각각의 모듈 혹은, 프로그램간의 의존성 문제가 많이 발생하는데, 누군가 새롭게 추가한 의존성에 대해 문제를 해결하지 못해 프로그램을 실행조차 못하는 상황이라면 모두에게 큰 손해가 될 것이다. 스탠드업 미팅 이후로 우리 팀에서는 이 시간에 대한 비용을 확실히 줄였다고 말할 수가 있다.

덕분에 빠르게 다른 작업에서 엔지니어링 작업으로 옮길 때, 즉 context switching이 발생할 때, 빨리 코드 그 자체에 집중할 수 있다.

그러나 이 짧은 미팅도 사실 여러명이 동시에 진행하면 (15분 * n명)의 시간을 소모하는 것이기 때문에, 작업의 변화가 길지 않은 경우 생략하기도 하고, 팀원 전부가 참여하지 않기도 하는 등 다양한 실험을 해 보는 중이다.

개인적으로 회의라는 것을 그다지 좋아하지 않는 사람임에도, 이 시간만큼은 중요도를 높게 가져가고 있다. 다른 사람의 코드 혹은 방향성에 관한 이야기를 듣다 보면, 내 문제, 내 버그를 해결하는 데에 매몰되지 않고, 좀 더 객관적인 시각으로 작성중인 프로그램을 바라볼 수 있다. 여럿이 개발하는 프로그램은 ‘내 것’, ‘내 코드’라는 개념을 가지기보다는, 보다 객관적인 코드가 되어야 한다고 생각한다. 서로의 코드가 같은 방향성을 가지고, 서로의 생각을 자주 짧게 나눌 때에, 앞서 언급한 context switching 비용을 줄이는 것은 물론, 코드의 객관화와 팀웍에 있어서도 큰 도움이 될 것이다.

[1] American Psychological Association: http://www.apa.org/research/action/multitask.aspx Sanbonmatsu DM, Strayer DL, Medeiros-Ward N, Watson JM (2013) Who Multi-Tasks and Why? Multi-Tasking Ability, Perceived Multi-Tasking Ability, Impulsivity, and Sensation Seeking. PLoS ONE 8(1): e54402

--

--

Hoyong Lee
코드스테이츠 Code States — Unlock Human Potential

현재는 강의하는 일이 많지만, 개발자로 불리고 싶어함 / Front-End Developer / interest with: Data Visualization, Data Analysis, something new…