들어가며
“최고에 도달하려면 최저에서 시작하라.”
- P. 시르스
작년 회고록을 읽어보면 유난히 많은 도전에 직면했다고 써 있었는데, 올해는 더하면 더했지 결코 덜하지 않았다. 캐나다 출장이라는 신선한 경험을 했고, 완전히 새로운 일도 맡았으며, AI라는 거대한 물결을 몸소 경험했다.
1. 당근에서의 1년
캐나다 출장과 북미 웹사이트
연초 Gary로부터 북미의 헤비 유저들을 위해서, 웹사이트에 중고거래 기능을 추가해 달라는 요청을 받았다. 부정확한 기억이지만 4월 중순 즈음 결정된 사안이었고, 한 달 반 동안 부랴부랴 준비를 했던 기억이 난다. 구현할 기능을 정리해 관련 부서들을 모두 만나고, 미리 PoC를 해보는 등 모든 파트원이 정신없이 준비했다. 결국 5월 24일부터 6월 7일까지 약 2주간 토론토에 있는 당근 오피스에서 기능을 개발하고 왔는데, 지금 생각해도 너무나 즐거운 기억이었다. 2주라는 짧다면 짧은 기간이었지만 정말 재미있는 에피소드가 많았다.
1. 웹사이트 기능 구현
우리가 2주간 완성해야 할 기능은 기본적인 중고거래 기능과 채팅 기능이었다. 나는 채팅 기능을 맡았고 나머지 두 분은 중고거래 기능을 맡았다. 당연히 쉽지는 않을 거라 생각했지만, 한국에서 많이 준비한 만큼 이렇게까지 어려울 거라는 생각을 하지 못했는데 예상대로 많은 난관에 부딪혔다.
커뮤니케이션 실수로 중고거래 API 연결을 늦게 시작했고, 생각보다 복잡한 중고거래 정책과 기존 웹사이트 동작 사이에 맞지 않는 부분이 중고거래 기능 구현을 어렵게 만들었다.
채팅의 경우 레퍼런스가 없기 때문에 맨땅에 구현을 해야 하는 상황이었는데, 참고할 만한 문서랄 게 많이 없어서 매번 채팅팀에 질문을 하며 구현을 해야 했다. 문제는 한국과의 시차였는데, 캐나다와 한국의 시차가 약 13시간이었기 때문에 출근과 퇴근이 정확히 반대였다. 그래서 출근해 구현하면서 궁금한 것들을 정리하고 퇴근한 다음 오후 11시~새벽 1시 정도까지 채팅팀과 이야기를 하는 상황이 많았다.
어찌됐든 마지막 날 새벽 3시까지 사무실에서 모든 파트원이 온 힘을 다했지만 결국 배포하지 못했고, 귀국해서 마무리할 수밖에 없었다.
2. 문화의 날 야구장 방문
캐나다 출장이 5월 마지막 주라서, 다 같이 저녁을 먹고 Rogers Centre에서 Blue Jays의 홈 경기를 보게 되었다. 상대는 Athletics였고 그때까지만 해도 두 팀 모두 시즌 성적이 좋지 않았다. 야구에 크게 흥미가 없기도 하고, 캐나다 팀원들도 크게 기대하지 말라고 해서 아무 생각 없이 보기 시작했는데, 초반에 Blue Jays가 홈런을 엄청 치는 바람에 경기장 분위기가 엄청 달아올랐고 우리 팀원들도 덩달아 응원도 따라 하면서 재미있게 봤다.
결국 Blue Jays가 12점이라는 큰 점수 차로 이기는 바람에 분위기에 취해 Blue Jays 모자를 사왔다. 이 모자는 한국에서도 종종 우울하거나 힘을 내고 싶을 때 가끔 써보는데, 생각보다 효과가 좋다당연히 효과는 과학적으로 증명되지 않았다.
3. 캐나다 여행
팀원들과 나이아가라를 다녀왔고, 나이아가라 근처의 와이너리 투어도 했다. 다운타운 이곳저곳을 걸으며 둘러봤다. 10년 전과 비교했을 때 생각보다 바뀐 게 없어서 놀라웠고 자세히 들여다보면 또 바뀐 것들이 많아 신기한 감정을 느꼈다. 그때 있었던 건물들이 여전히 그 자리를 지키고 있던 것도 신기했고, 토큰을 구매해야 했던 지하철이 신용카드로 탈 수 있게 바뀐 것도 신기했다. 한국에서는 젖는 것을 너무 싫어하는데, 토론토를 돌아다닐 때는 비가 와도 자연스럽게 맞고 다닌 것도 재미있었다. 하지만 역시 제일 마음에 들었던 것은 어딜 가도 차분한 토론토의 분위기 그 자체였다.
4. 가정 방문
바로 위의 사촌형이 30년 정도 토론토에 거주하고 있는데, 첫 주말에 사촌형의 집에 가서 사촌형의 가족들을 만났다. 첫째 조카는 3년 전에 봤을 때는 말도 안 걸더니 어느새 수다쟁이가 되어 있었고, 둘째 조카는 나만 보면 서럽게 울어서 곤란했던 기억이 난다. 조카들이 정말 예뻐서 이런 가정을 이룬 사촌형이 정말 부럽게 느껴졌다.
5. 그 밖에 기억에 남는 것
- 11시에 토론토에 도착했는데 체크인 시간이 오후 4시라 팀원들과 다운타운을 정처 없이 떠돌았다. 날씨도 추운데 다들 시차로 인해 피곤하고 배도 고파서 유령처럼 떠돌다가 숙소에서 기절했다.
- 어메니티로 받은 샴푸가 정말 거품이 안 나서 같은 방을 쓰는 팀원과 드러그 스토어에서 샴푸를 구매했다. 그리고 이 샴푸를 다른 방 팀원들과 나눴는데, 이유는 모르겠지만 다른 방 팀원이 신발을 가져왔던 비닐봉지에다가 이 샴푸를 받아갔다. 이유는 정말 모른다.
- Gary와 Rob 덕분에 다운타운 여기저기를 돌아다니며 온갖 맛있는 음식을 먹었다. 자메이카 저크 치킨과 옥스테일 스튜, 마르게리타와 버섯 파스타는 지금도 또 먹고 싶다. 주말 아침에 팀원과 먹었던 샐러드, 사촌형과 먹었던 돈코츠 라멘도 다시 먹어보고 싶다. 참고로, 다운타운의 음식값은 정말 살벌할 정도로 비쌌다.
- 외식 물가와는 반대로 채소나 육류 같은 원재료들은 저렴하다고 느꼈다. 취미가 요리인 나로서는 이런 식재료들로 요리를 못해 본 게 너무 아쉬웠다.
- 나는 해외에 가면 굳이 한국 음식을 찾지 않는 편이다. 출근한 다음 날부터 다른 팀원들이 한식과 불닭볶음면을 부르짖는 모습을 보면서 연민의 감정을 느꼈다.
사내 채팅 SDK 구현
연초에 우리 팀 리드가 지나가듯이 이야기한 것이 있었다. 채팅팀 리드와 레거시 채팅 사이트를 없애자는 구두 합의를 했다는 소식이었다. 누가 어떻게 할지는 정해지지 않았고 일단 없애자는 것에 공감했다고 해서 알아서 하시겠거니, 하고 대수롭지 않게 넘겼다. 그러다 “우연히” Gary가 북미 웹사이트에 중고거래 기능을 만들어달라 부탁했고, 그중 채팅 기능 구현을 “우연히” 내가 맡아서 진행했기 때문에, 귀국했을 때 이 일을 누가 해야 할지 자연스럽게 알게 되었다.
이런 사내용 채팅 SDK는 처음 만들어보는 거라 정말 막연했는데, 옆에서 일을 하는 플랫폼 파트 동료들의 도움과 AI의 도움을 받아 5개월 만에 카나리 버전을 배포할 수 있게 되었다. 이 SDK를 만들면서 배운 것들이 너무 많아 따로 글을 써보려고했지만 쓰지 않았지 한다.
1. 어떻게 혼자서 일했을까?
이 프로젝트는 처음부터 끝까지 SDK뿐만 아니라 플레이그라운드, 문서, 스토리북 등 모든 것을 혼자 결정하고 만들었다.
이제 와서 ‘어떻게 내가 혼자 했을까?‘를 생각해 보면, 인터페이스를 설계할 때는 플랫폼 파트 동료들의 도움을, 구현은 AI의 도움을 많이 받았다.
본격적으로 구현을 시작하기 전에 이 SDK를 다른 사람들이 어떻게 써야 할까?를 고민하면서 전체 인터페이스부터 고민하고 플랫폼 파트 동료들의 리뷰를 세 번 정도 받았다. 인터페이스를 결정하고 나서는 채팅팀과 인터페이스에 대한 논의를 하면서 다듬는 과정을 거쳤다. 이렇게 아무런 구현을 하지 않고 인터페이스를 설계하는 데 2주 정도의 시간을 사용했다. 이 과정은 내가 정말 잘한 결정 중 하나라고 생각하는데, 인터페이스를 설계하는 과정에서 SDK의 정체성이 명확해졌고 그에 따라 실제 구현을 어떻게 해야 할지 방향성을 잡을 수 있었기 때문이다.
실제 구현 단계에서는 AI의 도움을 많이 받았다. 혼자 진행했던 만큼 Coderabbit은 정말 가뭄에 단비 같은 존재였고 Claude와 Codex는 든든한 동료였다. 설계 논의, 최적화, 반복 작업 등 AI가 없었다면 아직 카나리 버전도 배포하지 못했을 거라 생각한다.
2. 무엇을 배웠을까?
- 인터페이스 설계.
- SDK 배포와 관련된 기본적인 사항들. 번들러 설정, 의존성 관리, 배포 프로세스 등.
- 리액트의 기본적인 최적화 방법 및 대충 알고 있던 개념들.
- AI를 사용하는 방법. 이건 아직 공부할 게 너무 많은 것 같다.
3. 더 해보고 싶은 것.
채팅팀의 채용이 시작되었지만 역시나 채용은 쉽지 않고, 따라서 내가 이 프로젝트를 1년 정도는 더 책임져야 한다는 생각을 갖고 있다. 이 과정에서 배포한 패키지를 운영한 경험을 얻고 싶다. 기술적인 부분도 도전적인 부분이 많겠지만, 다른 팀의 요구사항을 적절히 제어하는 법이나 에러를 처리하는 방법, SDK를 더 잘 쓰게 만드는 방법 등 패키지 공급자로서의 경험을 더 할 수 있기를 기대하고 있다.
AI
GPT-3을 처음 접했을 때는 신기한 장난감 정도로만 생각했는데 어느새 AI 없이 일하는 것을 상상하기 힘든 상황이 되었다. 처음 Claude를 써봤을 때는 내 직업을 잃을까 봐 걱정했다가, 조금 더 써보니 생각보다 똑똑하지는 않은 것 같아 사용을 망설이다가, 지금은 이걸 어떻게 더 잘 쓸 수 있을까를 고민하게 되었다. 11월쯤 아무런 계기도 없이 AI를 잘 써보자는 마음이 생겼고아마 지푸라기라도 잡아야 하는 상황이었나보다 연말에 1주일을 쉬면서 이것저것 시도해봤는데, 완전히 다른 세상에 온 것 같은 기분이다.
특히 채팅 SDK를 만들면서 AI의 힘을 체감했다. 내 워크플로우는 다음과 같았다.
- 설계와 리서치를 Claude, Codex와 함께해 최종 구현 방향을 결정
- 구현 방향이 결정되면 적당한 작업 단위로 나누기
- 작업 단위별로 구현 문서를 작성하고 Linear skill을 이용해 티켓으로 만들기
- Linear skill로 티켓을 하나씩 읽어와서 구현을 시켰고, 도중에 변경되는 구현 결정은 문서를 업데이트
- 모든 작업이 끝나면 sdk-docs skill을 이용해 문서 수정 및 추가
이렇게 일하면서, 세부 구현도 중요하지만 전체적인 설계와 그림을 그리는 것과 AI의 환각을 구분하는 것, 적절한 컨텍스트를 효율적으로 주입하는 것 등 나의 새로운 역할에 대해서 알게 되었다. 새로운 역할은 내가 그동안 알아왔던 전통적인 개발자의 미덕과 역할이 상당 부분 흔들리는 느낌마저 들었다. 아마 내년에는 구현에 대한 공부보다는 설계와 AI에 대한 공부를 집중적으로 하게 될 것 같다. 솔직히, AI 앞에서만큼은 나는 지금 내가 다시 주니어 개발자가 되었다고 생각하고 있다.
후회되는 것
- 출장을 다녀오고 나서 번아웃이 왔고, 팀원들에게 어른스럽지 못하게 대했다.
- 파트에서 가장 경력이 많은 엔지니어인데, 그 역할을 제대로 하지 못했다. 설계에 대한 큰 결정 같은 기술적인 부분부터, 파트의 방향성 설정, 제품의 의미를 찾고 지표를 관리하는 일 등 많은 일을 제대로 하지 못했다.
- 채팅 SDK 프로젝트가 약속한 일정보다 늦게 진행되었고 채팅 어드민도 도와드린다고 해 놓고 제대로 도와드리지 못했다.
- 분명히 기회가 있었을 텐데 제품에 대해 중요한 결정을 내리지 못했다.
2. 개인적인 일
루이의 슬개골 수술
올해 3월에 루이가 슬개골 수술을 했다. 내 생각보다 빠르기도 했고, 수술을 받은 루이가 너무 힘들어해서 나도 마음이 좋지 않았다. 다행히 지금은 수술이 너무나 잘 되어서 이전처럼 무릎이 아프지 않고 잘 뛰어다니게 되었다.
3. 그 밖의 일들
올 한 해는 너무 바빴다. 주말이나 휴가 중에도 계속 일했던 기억만 있어서, 특별한 일이 기억나지는 않는다.
4. Conclusion
올해에도 작년과 마찬가지로 동료들로부터 많은 인사이트를 얻고 많은 것을 배웠다. 채팅 SDK를 만들면서 그동안 했던 웹과는 다른 많은 부분을 새로 알았고, 이벤트 택소노미를 설계하면서 지표를 보는 습관을 들이려 노력했다.
내년에는 패키지 공급자로서의 의미 있는 운영 경험을 쌓고 싶다. 웹 프로덕트 파트의 리드처럼 행동하면서 팀과 제품을 성장시켜 나가고 싶다. AI와 설계 방법론 등 기술적으로 더 나아간 성취를 얻고 싶다.
솔직히 내년이 오는 게 기대되기도 하고, 두렵기도 하다. 높아지는 연차와 그에 따른 기대, AI 등 많은 요소들에 대한 불확실성 때문이다. 하지만 아직 일어나지 않은 미래와 불확실성을 걱정하기보다는, 올해처럼 주어진 일에 최선을 다하고 늘 도전하는 태도로 2026년을 보낼 생각이다.
