
방구석 유튜브로만 보다가 처음으로 오프라인에서 발표를 들으니까 집중이 더 잘됐다.
필기하며 들었던 내용을 정리하면서 회고해보고자 한다.
연사자: 양의현님 토스페이먼츠
10년 이상 지속 가능한 서비스로 레거시 프로젝트 리뉴얼으로
400개의 화면 프로토타입을 최적화하여 디자인 해야 한다.
기간 6개월개발자 6명
다양한 기능과 형태를 패턴으로 정의하여 재사용 가능한 컴포넌트 구현으로 디자인 의존성을 낮추었다.
동일한 패턴 -> 동일한 구현체
<YearMonthDayDate
label="적용 기간"
size="small"
value={new Date()...}
>
{children}
<YearMonthDayDate/>
유연하게 변형할 수 있도록 children을 받고 size로 형태를 결정.
팀원들이 일관성 있는 같은 퀄리티로 빠르게 개발할 수 있으므로 개발 기간 획기적으로 단축, 유지보수 향상
최근 회사에서 현재 페이지의 경로를 보여줘야 하는 요건 구현중 ex) 관리 > 마이페이지 > 이메일 설정
url을 파싱, 순회하며 미리 만들어놓은 테이블에 매칭시켜 자동화 시킨 경험이 있었는데
이 세션을 듣고 회사 코드에 더 자동화 시킬 수 있는 작업들이 생각났다.
data fetch 부분의 로직을 테이블로 매칭시켜놓고 인자로 request와 params를 받아
type 추론까지 가능하게 구현해볼 수 있을것 같았다.
깨달은 것은, 프론트엔드 업무 중 가장 반복적인 작업들을 정의하고 최대한 쓰기 쉽게 컴포넌트 설계, 자동화하여
모든 팀원들이 재사용 할 수 있게 구현하고 유지보수 향상을 위해 팀원의 실력 편차를 떠나 모두가 일관성 있는 코드를 구현 할 수 있도록 구현하는것.
연사자: 유진의님 LottieFiles
C++에서 만든 애니메이션을 웹에서 테스트 자동화를 구현하기
웹을 구성하는 요소 HTML, JS, CSS, 그리고 새롭게 등장한 WASM
단, 아직 WASM 성숙단계가 아니기 때문에 빌드 과정에서 오류가 좀 있다.
WASM은 2개의 파일이 존재한다.
a.wasm -> C++로 작성된 바이너리 파일이다.
a.js(glue code) -> a.wasm의 바이너리를 js가 이해핼 수 있도록 변환해주는 즉 글루 코드라고 한다.
웹환경은 vercel로 배포하였고 Github CI/CD를 활용하여 특정 이벤트를 트리거하여 자동화 구현하였다.
cli 배포는 npm으로 배포하여 전역으로 설치만 하면 언제든지 사용할 수 있다.
$ npm i -g tvg-cli
이 세션을 들으며 WASM이 많이 성숙해지면 언젠가 C++로 짠 코드로 웹에서 게임도 돌릴 수 있게 될까? 생각하게 됐다. WASM 코드를 짜기 복잡하고 어렵다고 하지만 계속 관심 갖고 공부해나가야 할것 같다. Go언어와 마찬가지로.
연사자: 박영진 네이버 with ZEP
최적화에 사용 )연사자: 정석호님 비바리퍼블리카
Web -> AWS CDN -> AWS Lamda
AWS에 이미지를 보내 최적화한 이미지를 받아오는것.
경로로 받은 시간을 ffmpeg으로 비디오 안에 해당 시간의 이미지를 보여줄 수 있게 된다.
서버없이 프론트에서 WASM으로 FFMPEG을 사용하여 확장자 변경을 구현한 프로젝트가 있는데 그 프로젝트에서도 시간을 입력받아 썸네일을 쉽게 자동화 적용을 해봐야겠다.
Web -> AWS CDN -> AWS Lamda
하지만 서버 비용이 발생하고 결국 어쨋든 네트워크가 완료되는 시간이 달라지지는 않으므로 현재는 이 방법을 사용하고 있지 않는다고 한다.
데이터 타입에 따라 어떠한 UI를 자동화하기 위해서는 디자인 컴포넌트 기반이 필수적으로 있어야 한다.
스켈레톤 UI도 마찬가지이다. ㅎ
다크 테마 큰 글씨 모드 노치 UI 등 토스에서는 이런 기능들을 제공하고 있다.
1. 웹뷰에서는 디바이스 기기의 정보에 접근할 수 없다. 네이티브에서만 접근할 수 있는 정보들이다.
2. 네이티브에서 userAgent를 확인하고 userAgent를 Custom한다. ex) Mozila....dark(사용자 기기 테마)
3. 웹에서는 스타일 시트에 미리 작성해 놓는다. 테마가 다크라면 블랙, 글씨 모드가 크다면 폰트 사이즈 업 등
( 개인 생각으로는 CSS-IN-JS로 안한 이유는 깜빡 현상이 있을 수도 있을것 같다. )
서버에서 title을 보내주면 title에 맞게 자동적으로 og이미지가 변경된다.
구현 방식을 공유해주시진 않았지만 개인 생각으로는 테이블로 key(title), value(image)를 구현해놓고
title값을 key로 넣어 value를 반환받는 느낌일것 같다.
.../query?color=red
.../query?width=90&color=red
위 둘은 브라우저가 다르게 캐시한다. 즉 캐시 연동이 안된다.
그래서 경로 기반으로 변경하였다.
image/width=90,height=80/...
브라우저 캐시 기능을 최대한 활용하고 API 설계시 QueryString보다 경로 기반으로 설계하라.
회사 검색 기능과 필터링 기능이 기존에 상태 기반으로 되있어 로직이 복잡하고 불안정하였던 것을
QueryString으로 새로 구현하고 나서 로직이 매우 단순해지고 불안정성도 굉장히 낮아져서 개인적 만족도와 성취감이 높았는데
이 세션을 듣고 생각이 또 바뀌었다. `queryString으로 순서가 다르면 캐시가 되지 않는 것을 처음 알았다..
물론 queryString도 순서를 일정하게 맞춘다면 캐시할 수 있겠지만 한번 더 찾아보고 공부해야 할 것 같다.
경로 기반으로 구현했을때가 오히려 더 복잡해질 수 있고 tanstack query를 사용하면 자체적으로 캐시를 해주기 때문에
굳이 브라우저 캐시를 사용하지 않아도 되지 않을까? 생각도 들었다.
도메인에 따라 캐시 중요도가 많이 필요로 한다면 경로 기반으로 구현하는 방법이 있겠다를 새로 깨달았다.
예전에 이런 컨퍼런스를 들으면 모르는 내용이 더 많았고 이해도 안되고 용어도 어려워서 이해를 잘 못했는데
어느덧 여러 컨퍼런스를 다니다 보니 그리고 꾸준히 공부하며 새로운 것을 회사에 도입하다 보니 어느덧 조금은 성장한것 같다.
발표를 들으며 어떻게 구현했을까 더 깊게 궁금증도 있었고 내가 생각한 방법은 이건데.. 연사자님도 그런 방법으로 하셨을까?
이런 고민들을 하며 더 깊게 집중할 수 있었다.
굿즈도 받고 기분 좋은 추억이였다. 내년에도 갈 수 있도록 노력하겠다 ㅎ