2023년 Deview가 4년만에 오프라인으로 열렸다.
너무 가고 싶었는데 2.27-28 이틀 모두 티켓팅에 실패하며 아쉬움의 눈물을 흘리고 있던 그 때, 착한 팀원들이 양도를 해줘서 어부지리로 이틀 다 다녀올 수 있었다.
(빼뚜른 거 아니고 사정이 있어서 못 가게 되어 저를 주셨답니다 😎)
데뷰는 코엑스에서 열렸는데 첫날에는 워낙 넓고 크다보니까 헤매던 와중 누가봐도 개발자다 싶던 분들의 뒤를 졸졸 따라가다보니 이쪽으로 들어올 수 있었다. 둘째 날에는 여유롭게 커피도 사오고 한 번 와봤다고 하나도 헤매지 않고 찾아갈 수 있었다.
작년에 NHN 컨퍼런스는 코엑스 옆에 있는 호텔에서 열렸던 걸로 기억을 하는데 거기도 엄청난 규모였지만, 체감상 deview가 장소가 조금 더 협소해서 그런지 더 많은 사람들이 모인 느낌이었다.
보통 키노트는 잘 안듣고 돌아다니는 편인데, 이번에는 회사 사람들이랑 같이 가서 (nhn 때 너무 외로웠다...) 시간이 남아 키노트를 들었는데 처음부터 끝까지 'AI' 에 대한 강조??와 중요성에 대해 설파하는 느낌이었고 프론트를 개발하는 사람으로서 아 이제 백엔드 공부를 시작해야 하는 건가? 하는 물음표를 던지게 하는 그런 키노트였다. 하여튼 앞으로 몇 년간은 네이버가 어떤 방향으로 프로덕트를 만들고 싶은지, 어떻게 준비하는지를 알 수 있었던 시간이었고 아마도 업계의 많은 부분들이 그런 기조를 따라가지 않을까 싶었다. (ChatGPT와 함께)
솔직히 NHN 컨프에서는 프론트가 들을 게 많았다. 6개의 모든 섹션을 쉬지 않고 다 들었었는데, 한 섹션 빼놓고는 다 프론트 관련을 들었을 정도였다. (아마 그 섹션에는 내가 흥미 있을만한 게 없었던 기억이 난다.) 그런데 이번 Deview는 백엔드 개발자들이 왔다면 더 흥미로웠을 주제가 많았던 것 같고 모바일 쪽은 거의 전무했다. 다행히 프론트는 그에 비하면 좀 괜찮은 섹션들이 있어서 나름대로 열심히 들었다.
(첫 날에는 띠가 초록색이었는데, 첫 날에만 당첨된 회사분들한테 샤워하지 말고 그 팔찌 그대로 차고 오라고 농담했었는데 deview는 그렇게 호락호락 하지 않았다....)
흥미로운 강의들이 많았지만 관심이 갔던 주제 중 하나는 cfcs라고 cross framework components 라이브러리인데 하나의 코드로 여러 프레임워크를 대응할 수는 없을까? 라는 아이디어에서 시작한 라이브러리이다.
naver에서 내놓은 egjs라는 UI 라이브러리가 있는데 코드르 보니 cfcs를 기반으로 만든 것 같았다. 이해한 대로 발표 내용을 요약하자면, 하나의 컴포넌트에서 가지는 상태와 이벤트(이벤트 핸들링, 메서드), 그리고 컴포넌트 라이프 사이클(create -> mounted -> unmounted(destroy))을 활용해 유틸 훅을 만들어 어떤 프레임워크에서든지 사용할 수 있도록 vanilla.js로 코어 로직을 만들고 각 프레임워크에서 그 로직을 가져와 확장해서 만든 형태였다. 처음 들었을 때는 필요한 로직을 vanilla로 구현하고 해당 코드를 바로 모든 프레임워크에서 가져다 쓰는 줄 알았는데 그건 아니었고, 각 프레임워크(라이브러리)에서 import해서 한 번 wrapping해서 export하는 형태인 것 같았다.
이 발표에 관심이 갔던 이유는 현재 우리 회사 팀 프로젝트들의 기술 스택이 통일 되어 있지 않는 문제가 있었기 때문이다. 기존 메인 서비스는 vue로 되어 있는데 그 외의 신생 프로젝트들은 전부 react로 구현되어 있어서 이전에 디자인 시스템을 구현하기 위해 공통 컴포넌트를 만들 때도 react와 vue 모두를 대응하기 위해 각각의 프레임워크로 두 개를 구현해서 export하는 식으로 코드를 짰었다. 중간에 홀딩이 되어 계속 진행되지 못했기 때문에 어딘가 찜찜한 느낌이 있었는데, 이 아이디어를 차용한다면 어쩔 수 없이 각각의 프레임워크에서 사용하기 위해서는 react와 vue, 두 개의 컴포넌트는 만들겠지만 공통의 로직은 하나로 분리해서 관리 포인트를 줄일 수도 있지 않을까? 하는 생각이 들었기 때문이다.
하지만 이것이 또 성공하기 위해서는 멀티 레포로 분산되어 있는 여러 프로젝트들이 하나의 레포로 묶이는 것이 우선이 되어야 한다는 생각이 들었다. 모노레포가 된다면, (적어도 vue.js로 구현된 프로젝트들만이라도 하나의 레포가 된다면) 공통 컴포넌트를 vue로 만들어서 관리 포인트를 하나로 가져갈 수 있을테니 말이다. nhn 컨퍼런스와 이번 deview를 들으면서 가장 크게 느낀 것은 이제 모노레포는 단순히 하나의 선택지가 아닌, 좀 더 나은 개발 환경을 만들 수 있는 좋은 선택이라는 것이다. 멀티 레포로 나눠져 있다 보니 팀원들도 (나 역시) 담당하고 있는 서비스가 아니라면 다른 서비스의 코드를 보기 위해서는 다른 레포를 검색해 찾아 들어가서 봐야 하고 지속성도 떨어진다. 어찌됐든 하나의 레포에 묶는다면 다른 서비스의 코드를 볼 확률도 높아지고 자연스레 도메인 지식도 넓혀갈 수 있는 환경이 될 것이라는 생각이 들었다.
그래서 집에 와서 단순히 발표를 들은 것에서만 그치지 않고 직접 데모를 만들어서 내가 생각한 것들이 가능할 지 테스트 해보기 위해 yarn workspace로 모노레포를 만들고 그 안에 core, react, vue3 이렇게 디렉토리를 만들어 모노레포 + cfcs를 가볍게 만들어보려고 하는 중이다.
아직 만드는 중이고 초기 세팅밖에 하지는 않았지만 모노레포를 직접 해보면서 배우는 것도 많다. tailwind config는 공통으로 빼두었는데 결국 의존성은 가장 바깥에서 갖고 있으면 안 되고 각각의 dir에서 가지고 있어야 하는 반면, eslint나 typescript는 monorepo 쪽에서 갖고 있어도 잘 적용되는 것 같다.
한 번에 세 개를 같이 세팅하려고 하다 보니 이상하게 적용하는 것도 많은 것 같지만 시간을 두고 보면서 보완해 나가려고 한다. cfcs 로직도 많이 참고할 것 같다. (thanks..naver 👍)
이에 대한 삽질기는 앞으로 차차 작성해 보려고 한다.
또 들었던 것 중에서 인상 깊었던 건 kotlin 멀티플랫폼에 대한 내용이었는데, kotlin으로 웹을 만드는다는 게 너무 충격이었다. kotlin의 인기가 요즘 천정부지로 치솟고 있다는 건 알고 있었지만 웹을 만들 수 있는지는 몰랐는데, 안드 진영과 서버 쪽 Java를 쓰는 쪽이 kotlin으로 많이 갈아타고 있다고 들어서 js를 잇는 만능맨 언어가 될 것 같다는 생각이 들었다. (나도 한 번 해봐야지?!)
회사에서는 기능 구현에 바빠 기술적으로 고민해보는 시간이 많이 확보되지 못했었는데 그래도 이런 컨퍼런스에 참여하며 또 시야를 넓힐 수 있어서 개인적으로는 너무 좋았다. 앞으로도 기회가 된다며 종종 이런 컨퍼런스를 다니고 싶고 또 그러려고 한다. 많은 개발자들이 이런 데에 참여해서 나처럼 환기할 수 있었으면 좋겠다.
fin.