on
스마트에디터3 오픈에 즈음하여
2015년 11월 13일 금요일. 드디어 오늘, 블로그 버전의 스마트에디터3가 세상에 나왔다. 지난 3주를 어떻게 보냈는지 기억이 없다. 출시 이틀 전까지는 모든 게 순조로웠다. 그래, 그렇게 쉽게 끝날리가 없지. 리얼 서버에 배포하고 테스트 하던 도중 치명적인 문제를 발견했다. 어쩔 수 없이 릴리즈 일정을 이틀 연기하고 내부 테스트를 계속 진행하며 버그를 찾아 수정하고 테스트를 보완했다. 어렵게 어렵게 오픈은 했지만 행여나 버그가 있지는 않을까 초조한 마음에 다리를 떨며 부은 눈으로 서비스를 모니터링하고 있는 중이다.
포스트 버전을 공개한 이후로 내가 만든 에디터로 멋드러진 글 하나는 써야한다는 심적 압박을 강하게 받았지만, 본 게임은 블로그라는 핑계를 대며 저항했다. 이제 더이상은 그럴 수 없다. 그날이 와버렸으니까.
글을 쓰긴 해야하는데 무슨 이야기를 해야할지 잘 모르겠다. 배운 게 도둑질이라고 에디터를 만들면서 사용한 기술 스택을 가지고 썰을 푸는 게 제일 만만한데, 아쉽게도 스마트에디터3는 아직 코드 컴포넌트를 제공하지 않는다. 정확히는 못하고 있다. 외부에서 우릴 보는 사람들은 그 많은 개발자 데리고 뭐하냐고 묻겠지만, 우리는 만성 개발자 결핍증에 시달리고 있다.
고민 끝에 프로젝트를 진행하는 동안에 머리 속에서 맴돌았던 생각들을 정리하는 글을 쓰기로 했다.
코딩만 하던 날들이여, 안녕.
이 프로젝트에 참여하기 이전까지 내가 회사에서 하는 일의 90%는 코딩이었다. 문제와 해법이 위에서 정해져 내려오면 그저 코드로 옮기는 게 일이다.
이제는 상황이 달라졌다. '린'할 것을 강요(?)받는 시대를 사는 개발자는 넓은 활동반경을 가져야 한다. 모바일 시대가 열리면서 변화의 속도는 전에 비해 훨씬 빨라졌다. 유행은 빠르게 왔다 쉽게 사라진다. 무언가를 예측한다는 것이 무의미해졌다.
잘 만들어진 스토리 보드는 꿈 속에 사는 드래곤 같다. 그런게 있기는 한 걸까? 그것이 있든지 없든지, 얌전히 앉아서 드래곤을 기다릴 시간이 없다는 사실은 분명하다. 가벼운 제품을 빠르게 만들어서 시장에 내놓고 사용자의 반응을 보면서 점진적으로 개선하는 방식의 비지니스 운영이 대세다.
빠르게 대응하려면 불필요한 커뮤니케이션 비용을 최대한 줄여야한다. 이제는 개발자도 문제를 함께 찾는다. 문제가 무엇인지, 어떻게 해결할 것인지 프로젝트에 참여하는 모든 구성원이 마주보고 앉아 치열하게 고민한다. 그리고 뭔가를 해보기로 결정했다면 프로토타입을 만들어서 빠르게 검증한다. 괜찮다면 그 기능은 바로 그 자리에서 스펙이 된다.
여러 일을 동시에 해야하는 상황은 이제 흔하다. 하나의 기능을 만들면서 다음에 만들 기능을 논의한다. 익숙한 관성을 버리고 이런 프로세스에 적응하는 일은 꽤나 어렵다. 한 번에 두 가지를 잘 못하다보니 이런 상황에 적응하는 데 애를 많이 먹었다. 기억력도 좋지 않다. 방금 이야기 한 내용을 돌아서면 까먹는다. 그래서 모든 내용을 위키, BTS, 커밋 로그에 상세하게 기록하기 시작했다. 인간은 적응의 동물이 아닌가. 열심히 몸부림을 치다보니 이제는 조금 적응을 했는지 전보다 살만하다.
테스트, 테스트, 테스트
오늘 우리가 한 의사결정은 언제든 뒤집힐 수 있다. 그것이 사용자에게 더 나은 선택이라면, 기꺼이 그 결정을 받아들여야 한다. 잦은 변경은 개발자에게 기술적 탁월함을 요구한다. 코드 품질이 나쁘다면 변경에 빠르게 대응할 수 없다.
안타깝게도 어떤 변경이 일어날지는 미리 알 수는 없다. 그저 할 수 있는 일이라곤 변경에 대응하기 유리한 구조를 만드는 일이다. 그런 구조를 만들려면 끊임없이 리팩터링을 해야하고, 리팩터링을 하려면 자동화된 테스트가 있어야 한다. 리팩터링을 한 후에도 제품이 정상적으로 동작하고 있다는 사실을 확인해야 할테니까. 모든 기능을 수동으로 테스트를 하기에는 우리에게 주어진 시간이 너무 부족하다.
스마트에디터3는 상당히 큰 규모의 프로젝트다. UI가 단순해서 느끼기 어려웠겠지만, 이 제품을 만들기 위해 많은 부서가 협업했다. 전체 코드량도 상당하다. 코드 베이스가 커지면 코드 복잡도가 증가하고, 코드 복잡도가 증가하면 사이드 이펙트가 자주 발생한다. 제품 출시 전날 버그를 잡으려고 추가한 코드가 두세 개의 버그를 만드는 기적(?)을 개발자라면 모두 해봤을 것이다. 우리 모두는 사이드 이펙트를 만드는 데 능숙하고, 그렇게 무에서 유를 창조한다. 개발자라는 직업을 택한 이상 평생 안고 가야 할 숙명이다.
사이드 이펙트는 나의 시간 뿐만이 아니라 동료의 시간까지 뺏는다는 점이 더 무섭다. 내가 수정한 부분이 동료의 코드를 망가뜨리고, 이 때문에 동료가 집에 못 가고 있는 모습을 볼 때면 쥐구멍에라도 숨고 싶다. 이럴 때는 초등학생으로 빙의하여 '너도 나한테 그랬잖아!'라며 마음 속의 불편함을 애써 모른 체한다. 잦은 버그를 만들다 보니 자연스레 방어기제가 몸에 배었나?
사이드 이펙트는 순식간에 내가 미쳐 예상치 못한 곳까지 도달한다. 홍길동처럼 어디에서 나타날지 알 수 없다. 그래서 샅샅이 뒤져서 찾아야하지만 인간은 게으르고, 나는 조금 더 게으르다. 원래 좀 귀찮니즘을 잘 느끼는 데다가, 개발경력도 쪼렙이다보니 시야가 좁다. 게다가 콘텍스트 스위칭(Context Switching)을 잘 못한다. 그냥 그렇게 태어났다. 고쳐보려했지만 인간은 쉽게 안 바뀐다. 이런 상황에서 내가 할 수 있는 선택은 내 단점을 보완해줄 수 있는 무언가를 찾는 일이었다. 그렇게 찾은 수단이 바로 테스트 자동화다.
언젠가 한 번은 하루 종일 내가 하는 일 중 가장 빈도수가 많고, 가장 많은 시간을 차지하는 게 뭘까 생각해봤다. 브라우저를 열어 F5를 누르는 횟수가 가장 많았고, 코드를 수정한 후에 에디터의 버튼을 하나 하나 눌러보며 이상이 없는지 확인하는 데 시간을 가장 많이 소모하는 것 같았다. 어디까지나 느낌적 느낌이지만 어마어마하게 높은 확률로 사실이라는 데에 내가 아끼는 카카오 프렌즈 피규어를 건다.
테스트에 대한 고민을 시작한 것은 3년 전이지만, 적극적이 된 건 작년 NHN NEXT에서 했던 프로젝트에 참여하면서부터다. 이 프로젝트는 개발자 교체가 잦았고, 요구사항 변경이 잦았으며, 디자인 교체가 잦았다. 소용돌이치는 환경 속에서 살기 위해 몸부림쳐야 했다. 단위 테스트 자동화를 도입하려했지만 뭔가를 해보려던 때에 아쉽게도 팀 사정상 전배를 가야했다. 그렇게 아무 것도 하지 못하고 네이버로 자리를 옮겼다.
네이버로 이직한 후 스마트에디터3 프로젝트를 시작하면서 의욕 충만하게 테스트를 작성하려했다. 생각처럼 잘 되지 않았다. 이번에는 고민의 축을 "테스트를 작성해야한다"에서 "왜 테스트를 작성하지 않을까?"로 옮겼다.
테스트 작성에 대한 팀 공통 기준이 없었고, 테스트가 개발 프로세스에 자연스레 녹아있지 않았다. 테스트 작성이 코딩과 하나로 묶인 작업이 아닌, 추가로 해야하는 귀찮은 노동 취급을 받고 있었다. 이 문제를 해결하려면 프로세스 개선이 필요하다고 생각했고 사용자 스토리 작성부터 시작해서 기능 테스트 작성까지 이어지는 프로세스를 나름 팀에 적응할 수 있겠다 싶은 수준으로 추렸다.
TF의 리더인 상훈 님이 내가 그동안 생각해온 것들을 하나씩 꺼내서 풀어놓을 시간을 주었다. 흔치 않은 기회를 얻었다. 팀 동료 한 명이랑 둘이서 한 달정도 실무에 적용해봤고 괜찮겠다 싶어 팀에 전면 도입을 요청했지만 아직 어떻게 할지 결론이 나지 않았다. 적응하려면 상당한 연습과 시간이 필요한데 우리는 아직 너무 바쁘다. 결정적으로 "좋다"고 "강요"하기에는 내 경험이 너무 미천하다.
내가 느끼는 그대로를 상대에게 전달하여 설득하는 일은 언제나 힘들다. 팟캐스트에서 이재명 시장이 한 이야기가 가슴을 후벼팠다.
사람들은 설득 잘 안 당합니다.
보여주고 행동하면 따라옵니다.
내 자신을 많이 반성했다. 그래서 우선은 나부터 잘하는 데 힘쓰기로 했다. 설득은 그 다음의 일이다.
테스트와 관련해서는 하고 싶은 이야기가 정말 많은데, 글의 주제를 벗어나니 따로 포스팅을 해야겠다. 지금은 그저 "테스트는 정말 중요하다"는 걸 전하는 정도로 만족해야지.
선택은 어렵다
삶은 매순간이 선택의 연속이다. 짬뽕인지 짜장인지, 물냉인지 비냉인지, 부먹인지 찍먹인지. 하루에도 여러 번 갈림길에 서고 방황한다. 고심 끝에 선택하지만 뒤돌아서면 방금 전에 한 선택을 뒤집고 싶다. 그만큼 선택은 어렵고, 어렵게 한 선택을 끝까지 고수하기는 더 어렵다.
이 프로젝트를 진행하면서 "무엇이 더 좋은 선택"인지를 판단해야하는 순간을 자주 만났다. 사람들이 원하는 게 무엇인지, 어떻게 하면 사용자가 편하게 글을 쓸 수 있을지. 그때마다 고민하고, 논의하고, 선택한다. 이런 과정은 언제나 새롭고 어렵다.
문제를 해결해야하는데 그 문제를 해결하면, 또 다른 문제가 튀어나온다.
기존 서비스가 안고 있는 문제를, 기존 사용자의 편의를 모두 고려하면서 해결하기는 쉽지 않다. 에디터는 본질적으로 '도구'고, 도구란 원래 그런 존재다. 만능 열쇠가 아니기에 모든 문제를 해결할 수 없다. 남길 것과 버릴 것을 구분하고 무엇을 새로 넣을지 결정해야 한다. 프로젝트내내 무겁게 고민하고 선택을 했다. 물론 나는 쪼렙인지라 주로 결정을 따라가는 쪽에 더 가까웠지만, 아무 생각없이 따라갔던 적은 한 번도 없다.
좀 더 나은 사용자 경험을 만들기 위해 우리가 한 선택이 반대편에 있는 누군가를 불편하게 만들 수 있다는 사실을 잘 알고 있다. 네이버 블로그처럼 레거시가 많은 서비스는 더욱 그렇다. 변화를 만들어야하지만, 기존 관성을 인정해야 한다. 사용자에게 무조건 변화를 강요할 수는 없는 노릇이다. 변화와 안정, 둘 다 잡을 수 있는 최선의 선택은 도대체 어디에 있는지 보이지를 않는다. 어렵다.
출처는 기억이 안 나지만 인간이 가장 스트레스를 받는 순간이 선택을 하기 힘든 상황에 놓였을 때라고 어디에서 주워들었다. 아무튼 그렇다더라. 어려웠고, 지금도 어렵고, 앞으로도 어려울 것이다.
네이버 블로그는 사용자가 많은 서비스라 오픈하자마자 반응이 무섭게 들어왔다. 그동안 개발자로 일하면서 여러 서비스를 런칭했지만 제대로 서비스도 못하고 접은 게 대부분이었기에 이런 반응이 신기하고 재밌다.
좋은 반응도 있고 좋지 않은 반응도 있다. 만들어줘서 고맙다는 평부터, 대체 이게 뭐냐는 평까지. 그 중에 어떤 댓글은 읽다가 마음이 아팠다. 어렵게 한 선택이 누군가를 불편하게 만들거라는 점을 몰랐던 게 아니었음에도 사용자의 분노에 찬 불평을 아무렇지 않게 직면하기에는 아직 나의 내공이 부족하다.
어느 하나 소중하지 않은 의견이 없기에 머리가 복잡하다. 진정성을 제대로 전달하지 못했나? 기능이 너무 눈에 안 띄는 건 아닐까? 둘 다 만족시킬 수 있는 대안은 없을까? 계획하고 있는 기능인데 좀 더 앞당겨야 할까? 등등. 내가 만든 제품이 누군가에게 쓰인다는 게 이런 느낌이구나 싶다.
숙제를 한아름 떠 안았지만 싫지는 않다. 무관심보다는 낫지 않은가. 이런 경험을 할 수 있는 기회를 가졌음에 감사하다. 개선할 여지가 있다는 것은 발전할 가능성이 있다는 의미다. 또 치열하게 고민하고 뛰어야 하겠지. 더 나은 스마트에디터3를 위해서.
불철주야 고생하는 동료들에게 항상 감사하다는 이야기를 전하며 두서없는 글을 마친다.
* 워드프레스 에디터와 스마트에디터3의 사용성을 비교하기 위해서, 제가 네이버 블로그에 스마트에디터3로 작성한 글을 옮겨왔습니다. 원글은 아래 링크에서 보실 수 있습니다.