안녕하시렵니까? 🙇🏻♀️ 저는 현재 래블업에서 웹 프론트엔드를 주력으로 개발하고 있는 강지현입니다.
“누구나 언제, 어디에서나 AI를 개발하고 사용할 수 있는 세상을 만들자!“ 라는 모토로 설립 8년 차에 접어든 래블업에서 지낸 지는 햇수로 약 3년 정도가 되었는데요. 3개월의 인턴 생활 → 잡오퍼(Job offering)를 받고 풀타임으로 근무한 지 만 2년이 조금 넘은 지금, 그동안 성장한 것과 느낀 점 등을 허심탄회하게 털어놓으려 합니다.
TOC
- 래블업의 첫인상
- 내가 배운 기술 스택과 소프트 스킬
- 그 외 또 이룬 것
- 앞으로 성취하고 싶은 것
- 줄임말
- 번외: 래블업은 일만 하는 스타트업이 아닙니다.
래블업의 첫인상과 적응기
조소과🗿⛏ → 컴퓨터공학 💻으로 전공을 바꾸고 방황과 무한 삽질의 터널을 지난 뒤, 래블업 사무실의 첫 문을 들어서자, 그곳은 신세계 그 자체였다.
첫 날 오리엔테이션에서 아직도 기억나는 세 가지 안내사항이 있습니다.
- 직급을 막론하고 존대는 필수이며, “(성함)님” 으로만 부르고 직급을 붙이지 않는다 (외부인에게 소개할 때는 다름)
- 휴가는 물어보는 것이 아니라 선언하는 것이다
- 근무시간은 오전 10시~오후 7시이지만 재택도 가능하며, 유연 근무제이다.
그리고 무엇보다 보통의 회사에서 으레 궁금해하는 학점, (전공)성적표, 나이, 출신 학교 등과 같이 항상 저를 따라다니는 꼬리표는 전혀 궁금해하지 않는다는 점이었습니다. 공공기관에서 잠깐 계약직으로 일했던 경험이 있던 제게는 자유롭고, 어떻게 보면 일 자체에만 집중하는 래블업의 문화가 신기했습니다. 한편으로는 과연 어떻게 업무가 분배되고 진행이 되는지 궁금했습니다. 그 궁금증은 한 달여간 근무를 하면서 해소되었습니다.
한동안 인터넷에서 회자하던 직장생활 밸런스게임 문항이 있습니다.
제게 래블업은 완벽한 전자였습니다. 매일매일 늘 짜릿하고 새로운 기술용어들, 매일 진행되는 올-핸즈(All-hands) 미팅에서 도대체 무슨 맥락으로 얘기가 오가는 것인지, 프로젝트를 설치하려고 하면 왜 내 로컬 환경에서만 희한한 에러가 발생하는 것인지…🤯 그리고 이슈 생성, 커밋을 비롯해 모든 내용이 “영문” 으로 공유되어야 하는 압박 덕분에 첫 달은 정말 마음속으로 울며(?) 출근했습니다.
그렇다고 해서 좌절만 할 순 없었습니다. 여느 인턴들의 바람처럼 회사에 큰 도움은 못되더라도 짐이 되고 싶진 않았으니까요. 일주일 간 엄청난 삽질과 마주하며, 질문이 반복되지 않도록 뭐든 적어야겠다는 생각을 했고, TIL까지는 아니더라도 알게 된 용어나 맥락을 적기 시작했습니다.
아래는 제가 인턴 기간, 그리고 이후에도 꾸준히 업데이트한 적자✍️생존의 일부 내용을 캡처한 것입니다.
또 오가는 쓰레드 중에 당장은 모르겠지만 도움이 될 만하다고 생각되는 것들도 모두 읽어보고, 남길만한 것은 정리했습니다. 그러고 나서 겨우 첫 이슈에 대한 PR을 작성하며 코드 리뷰를 요청하고, 신랄한(!) 코멘트를 받으며 래블업의 개발 문화에 조금씩 익숙해지기 시작했습니다. 그리고 조금씩 자신감이 붙기 시작하면서 나중에는 고객사 요청에 대응하는 이슈에도 자원하는 대담함도 생겼습니다.
지나고 보니 이런 대담함은 저를 제외한 래블업의 모든 멤버들이 가진 패시브 스킬이었습니다. 결국, 래블업은 철저한 탑-다운의 구조라기보다는 탑-다운과 바텀-업이 적절히 섞인 구조였고, 모든 멤버가 하나의 유기체처럼 움직이는 형태였습니다. 그 때문에 자율출근, 유연 근무라는 한국 사회 기준으로서는 엄청난 자유를 주더라도 멤버 한 명, 한 명이 책임감을 갖고 목표를 향해 움직여서 인원 대비 많은 성취를 이뤄낼 수 있었지 않았을까 생각합니다.
내가 배운 기술 스택과 소프트 스킬
래블업은 제가 인턴 생활을 시작한 곳이며, 풀타임 소프트웨어 엔지니어로서는 첫 직장이기도 합니다. 이 때문에 직장생활에서 필요로 하는 거의 모든 것을 래블업에서 배웠다고 해도 과언이 아닙니다. 래블업의 주력 제품 중 하나인 Backend.AI(백엔드 닷 에이아이)에서 아래와 같은 기술 스택을 사용해 개발을 진행하며, 이에 대한 이해를 높일 수 있었습니다.
Web Component(이하 웹 컴포넌트)
- 웹 표준으로 현재 모던 웹 브라우저에서는 모두 기본으로 지원합니다. 브라우저 엔진에서 웹 컴포넌트를 렌더링 할 때에 ShadowDOM이라는 HTML 도큐먼트로 각 컴포넌트의 style이 의도치 않게 서로에게 영향을 주는 것을 막고 독립적으로 적용될 수 있도록 하는 구조입니다. 또한 Javascript 코드 내에서 접근할 때에는 shadowRoot가 open된 상태여야 하며 “shadowRoot” 라는 키를 통해서만 접근할 수 있습니다.
- React의 VirtualDOM과 비슷한 면이 있지만, 목적이 다릅니다. Virtual DOM은 최적화를 위한 것이라면 ShadowDOM은 style이나 로직이 컴포넌트 별로 독립적으로 적용되기 위한 것입니다. (더 읽어보기: [ShadowDOM vs VirtualDOM](https://www.testim.io/blog/shadow-dom-vs-virtual-dom/))
Lit (Lit-Element)
- Lit이란 웹 컴포넌트를 빠르고 쉽게 만들 수 있는 웹 컴포넌트 전용 라이브러리입니다. 쉽고 빠르게 만든다 함은, shadowDOM을 선언하고, document에 붙이고, 설정하는 일련의 과정을 라이브러리 상에서 추상화 해주는 것을 의미합니다. 가령 소프트웨어 엔지니어에게는 익숙한 OOP 구조 형태(Class 지원)로 사용할 수 있도록 하며, 렌더 중, 렌더 직후, 명시적으로 렌더 요청을 하는 등 라이프사이클 별로 호출할 수 있는 함수를 제공하여 사용자가 좀더 직관적으로 컴포넌트를 구현할 수 있도록 돕습니다. (더 읽어보기: [Lit Documentation (v2)](https://lit.dev/docs/))
Modern Javascript & Typescript
- ES6 이후의 Javascript로 for-each, for-of, while 과 같은 반복문 외에 Array 타입에 특화된 map, filter, reduce 같은 함수를 지원합니다.
- API 호출 시 외부 라이브러리(jQuery)가 아닌 기본 함수(fetch)로 비동기 처리가 가능합니다.
- 다양한 데이터를 불러올 때에 Type을 지정해 어떤 타입일지 예측하고, 그에 맞는 함수를 호출하거나 대응이 가능하게 합니다.
- Type을 지정해서 잘못된 접근을 할 경우 컴파일러 상에서 명시적으로 에러를 호출해줍니다.
물론 프론트엔드 뿐만 아니라, 백엔드(Backend.AI Core) 쪽에도 조금씩 기여하면서 파이썬 비동기 라이브러리인 Python Asyncio 도 찍먹(!)해볼 수 있었습니다. 아래는 백엔드 쪽 기여와 동시에 저에게 Backend.AI 구조 파악에 많은 도움이 되었던 이슈에 대한 발표 내용입니다.
래블업은 오픈소스에서 잔뼈가 굵은 분들께서 멤버로 있는 꽤나 희귀한 개발 조직으로 이뤄져 있습니다. 덕분에 개발 문화 역시 진취적이고 리버럴합니다. 이 때문에 위에서 언급한 바와 같이 업무가 바텀-업으로 진행되는 때도 있습니다. 이 경우, 직위에 상관 없이 자유롭게 제안하거나 또는 제안에 앞서 그 제안이 타당한지에 대해 내부 세미나를 열어 발표하고 피드백을 얻기도 합니다.아래는 제가 배운 업무상의 소프트 스킬들 중 많은 도움이 되었던 부분을 세 가지로 추린 것입니다.
- 궁금한 것이 있으면 하루가 지나기 전 물어보기. 단, 내가 그때까지 아는 부분까지도 함께 언급하기
- 당장 나와 관련이 없는 것 일지라도 발 담가보고 삽질해보기, 그리고 그 내용을 짧게라도 기록하기
- 내가 알게 된 내용을 가능한 한 자주 공유하기
그 외 또 이룬 것
저는 개발만 하진 않았습니다. 아래 기술된 다양한 경험을 통해 개발 업무 외적으로 성장할 수 있었습니다. 혹자는 개발만 하기에도 바쁠 텐데 너무 잡다하게 하는 것이 아니냐, 대체 너의 전문성은 무엇? 🤷🏻♀️ 이라고 묻기도 합니다. 하지만 저는 개발뿐만 아니라 개발 외적으로 회사가 어떻게 돌아가는지, 그리고 다른 부서와 어떻게 협업하는지 배우는 것 역시 개발자가 가져야 할 기본소양이라고 생각합니다.
- Backend.AI GS(Good Software) 인증에 기여
- Backend.AI 문서화 기여 가이드 작성
- 회사 메인페이지 및 주요 제품 페이지 웹 퍼블리싱 및 반응형 페이지 적용
- Backend.AI 튜토리얼 영상 제작
- 2021년 오픈소스 컨트리뷰션 아카데미 멘토 활동
- 2021년 7월 회사의 연간 미팅 계획 및 진행
- 2022년 5월 (주니어) 개발자 → 시니어 개발자로 승진! ✨
- 인프콘 2022 토크 콘서트: 주니어 개발자들의 대나무숲 패널 참여
앞으로 더 성취하고 싶은 것
아래는 당장은 아니더라도 앞으로 래블업에서 해내고 싶은 것들을 나열한 것입니다.
- 디자인 시스템 구축
- Backend.AI의 MSA 서비스에 웹 컴포넌트와 React 병용
- 회사 사이트 및 주요 제품 사이트에 GA4 (Google Analytics 4) 적용
- 래블업 기술 블로그(docusaurus) 항목 별 카테고리 생성
- 주요 저장소에 BDD 또는 테스트 환경 적용
줄임말
처음엔 그동안 정신없이 달려온(?) 연유로 어떤 내용을 적어야 할지 막막했습니다. 하지만 천천히 작성해나가며 돌이켜보니 정말 많은 일을 래블업에서 시작했기에 이뤄낼 수 있었습니다. 특히, 페이스가 올라올 수 있도록 기다려주시고 너른 마음으로 이해해주신 동료와 사수님이 없었다면, 위의 모든 일은 불가능했다는 생각이 들었어요. 이 글을 빌어 래블업의 모든 멤버 분들께 다시 한 번 감사하다는 말씀을 드리고 싶습니다.
또 지속해서 래블업에 기여할 수 있는 개발자 강지현이 되겠다는 다짐💪을 해봅니다.
번외: 래블업은 일만 하는 스타트업이 아닙니다.
코로나 시국에 래블업에 조인하게 되어, 비교적 래블업의 많은 워크샵과 탐방을 경험하지는 못했지만 🥲(GTC 참여, Google I/O 참여라던가...), 일에 파묻히기보다는 다양한 외부 경험을 쌓을 수 있었습니다. 특히 최근에 다녀온 워케이션이 기억에 남는데요. 래블업을 "일만 하는 스타트업"이라고 오해를 하시는 분들께 이 글을 통해 제 생생한 기록 📸 중 극히(!) 일부를 공유합니다😎.
Done
- 강릉 워크샵 (2020.11)
- 양양 워케이션 (2022.07)
- 문화의 날 (2022.08)
On-going
- 제주도 워케이션 (2022.10)
Future-plan
- Google I/O 2023?