— conference, kakao — 4 min read
컨퍼런스에 대한 자세한 내용은 아래 링크에서 확인 가능합니다.
- 최대한 객관적인 내용을 전달하려고 했으며 사견은 인용방식으로 적었습니다.
- 발표 자료가 공개되었습니다. 아래 내용은 발표자료가 공개되기 전 메모한 내용이므로 발표 PDF를 보시면서 사견을 참고하세요.
Tech.kakao.com 카카오 기술 공유 사이트
카카오뱅크가 기존 금융업계와 다르게 오라클을 제외하고 x86 리눅스 베이스로 MySQL, Postgres, Tomcat, Nodejs 등을 사용한 배경 설명
모바일 First에 기술 중심 전략, 제품에 개발자 의견 들어가게함
창의, 자기주도, 수평커뮤니케이션
카카오페이지 Spring JSP를 리액트로 포팅한 과정 소개
(props)
대신 ({ props1, props2 })
&&
() => 로 this.bind
해결컨벤션 도구 ESLint(Custom Rule), Prettier
클래스가 지상파 방송이면 훅은 Youtube다.
didMount Update로 user바뀌면 setState하던 중복코드를
useEffect로 관리
Mount Unmount eventHandler등록/해제
useEffect에서 eventHandler등록/해제
기능별로 Effect를 여러개따서 관리 가능
HOC는 작성해야할 코드 많음.
지금회사도 HOC쓰는데 훅으로 걷어내야될듯
훅으로 해결 useState와 useEffect
'피할 수 있으면 피하자'라고 함.
지금회사는 서비스 특성 상 서버렌더링이 필수임. 현재프로젝트가 NextJS v8로 되어있는데 이미 진행되고 규모가 훨씬 클것으로 예상되는 카카오페이지가 최신 버전(v9)으로 포팅을 완료하고 다이나믹라우팅까지 쓴다는 얘기를 듣고 좋은 기술이 나왔는데, 회사 내부에서 이미 공유했었는데 '더 작은 조직인 우리는 왜 빠르게 대응하지 못했을까?' 라는 생각을 하게 되었음.
아래와 비슷한 그림(Redux 원리)으로 설명 시작
Mobx, Hook, Context 많이 있지만 성숙한 라이브러리이므로 Redux 추천
다른 개발조직(카카오페이)에도 물어봤는데 데이터 변화가 눈에 확실히 보이는 Redux를 선호한다고 했다. Mobx는 사용하기는 쉽지만 데이터가 어떻게 변화하는지 흐름 파악이 쉽지 않다고 함.
지금회사에서도 이미 고민했던 부분과 해결 방법이 대부분 일치한다. ducks패턴, immer 등
HOC패턴의 코드를 제거하는게 좋겠다는 생각을 했음. (지금회사 코드에 connect, map, HOC패턴 존재함)
무조건 HOC를 제거하자는게 아니다. withLayout같은 컨셉은 HOC로 구현해도 좋지만 withMobile같은 단순 props를 주입받기 위해서 쓰는 HOC코드를 useMobile과 같이 리팩토링할 수 있겠다고 생각함.
지금회사도 redux-saga를 통해서 API Logic은 미들웨어에서 처리하고 컴포넌트는 UI에 집중하게 되어있다.
그러나 Request, Success, Failure로 상태관리하는 코드는 코드가 너무 많아지고 이를 질문한 사람이 있었는데 내가 대답한 내용은 velopert가 세미나에서 발표한 패턴을 참고해도 좋다고 했다.
2번처럼 saga자체에 상태관리 함수를 만들어도 좋을듯
타입스크립트가 리액트 NPM 다운로드 추월
Typescript가 React의 NPM다운로드 순위를 추월한 그래프를 보여줬다.
아래와 똑같은 그래프는 아니고 아래 그래프는 현재(2019.09.11)기준 NPM Trend 그래프다.
https://www.npmtrends.com/react-vs-typescript
생산성 많이 좋아지므로 도입 추천
아래와 비슷한 느낌의 그래프를 보여줬는데 세미나 자료가 없어서 비슷한 그래프로 대체한다.
Javascript 생산성 그래프
Typescript 생산성 그래프
세미나 내용을 듣고 스스로 내린 결론은 카카오의 대부분의 개발조직이 Typescript를 사용하며 만족한다. 개발일정에 코드테스트와 코드리뷰 시간까지 모두 포함해서 일정을 산출하거나 PR을 통해서 Reviewer의 승인이 없으면 아예 Merge도 안되는 조직도 있다고 했다. (플랫폼팀)
이는 빠르게 서비스를 출시해야되는 지금회사의 상황과는 맞지 않을 수도 있다. 그러나 서비스를 열었다가 금방 닫는게 아니라면 '우리도 코드리뷰를 충분히 하면서 개발을 했으면 좀 더 변화게 대응이 빠르지 않았을까?' 라고 생각했다.
한가지 예로 지금회사에서도 Typescript 도입이 의논된 적이 있었으나 외부라이브러리 사용할 때 type을 지원안하거나 모든 컴포넌트에 props Interface를 작성해야해서 속도가 늦어진다고 생각해서 도입하지 않았다.
그러나 카카오는 Typescript에 대해서도 아래와 같은 그래프(똑같은 그래프는 없어서 비슷한 그래프를 찾아서 넣었다.)를 보여주며 말했다.
'빠르게 결과물을 도출하는게 처음엔 빨라보이지만 프로젝트가 일정 수준이 되면 유지보수 및 기능추가에 Typescript가 더 빠르다고 말했다.
절대 'Typescript가 좋다.' 라는 말을 하고 싶은게 아니다. 카카오의 대부분의 개발 조직은 Typescript 도입을 만족한다고 말한 내용을 전달하고 지금회사에서도 고려했던 경험을 말한 것이다.
styled-components, rebase추천(아래와 같은 예제 보여줌)
1<Box ml="10px" <Text fontSize={[10, 12, 14]}
COLORS, FONT_SIZE 상수로 관리
이미 지금회사에서 하고 있는 좋은 패턴
Paint API로 컴포넌트 모듈을 작성/추가/사용 하는 예제를 보여줌.
React 컴포넌트와 비슷한 개념이지만 CSS API기 때문에 라이브러리 종속적이진 않다.(이 부분은 웹 컴포넌트와 비슷한 느낌)
그러나 브라우저 지원이 모던브라우저밖에 안돼서 현재 카카오도 개발자 내부에서 쓰는 어드민페이지 같은 곳에서만 사용한다고 말함.
성능 비교로 기존 툴팁 컴포넌트를 Paint API로 구현한 예제(카카오맵에 툴팁 1000개 띄우고 맵을 좌우로 이동)를 보여줬는데 프레임 속도가 확실히 차이났다.
크롬 기준으로 JS로 레이아웃처리 시 렌더링 파이프라인 2번 타는데 이 방식을 사용하면 렌더링 최적화를 더 할 수 있다고 했음.
예제 사이트: https://css-houdini.rocks
Animations API, Web Audio API, 웹어셈블리, 확장 가능한 웹 표준 서명 등에 대해서 설명했다.
프론트 개발자가 일거리를 찾아서 해낸 사례(카카오 뱅크였나 기억이 잘 안나는데 회사 초기에 인트라넷부터 아무런 시스템이 없는 상황이었다고 말함.).
카카오뱅크 신분증검수 서비스로 업무효율 3~4배 향상시킴.
업무 도메인이 다른 사람과 1년 동안 트레이드오프 과정이 걸렸음.
몇번 엎더라도 라이프사이클 검토하면서 진행.
업무 도메인이 다른 사람과 개발자의 시각이 달라서 의견을 맞추는 시간이 오래 걸렸다고함.
프로젝트를 몇번 엎더라도 서비스 사용 라이프사이클을 계속 검토했다고함. => 결국 유저에게 초점을 맞추고 개발함.
개인의 만족을 위해 혼자 다 만들자 vs 분야별 전문가를 모아서 좋은 프로덕트를 만들자
개인 욕심 포기하니 간단하게 해결되었다고 함.
좋은 프로덕트를 만들기로 함.
이미 주변에서 프로젝트 껴달라고 하는 분야별 좋은 개발자들이 많았다고 함.
도서검색처럼 카카오 직원 자리 검색 서비스
프론트개발자로써 보는 순간 감탄나오고 바라만봐도 즐거운 서비스를 만드려고 노력했다고함.
해당 세션에서 가장 많은 감탄이 나온 서비스
카카오 업무시간 관리 툴
결론 동료를 위한 일이 유저를 위한 일이 된다. 동료가 곧 유저다.