This month I Learned - 2021년 1월
Developer
- 엔지니어링 매니저를 위한 추천 도서 | GeekNews
- 어쩌다 보니 나를 포함한 두 명이서 한 팀이 되어있고, 장기적으로 이 팀을 이끌어야 하는 입장이 되었다.
- 지난 번 팀의 팀장님께 ‘개발 7년차, 매니저 1일차’ 도서를 선물해드린 적이 있었는데, 이제 나도 그 책을 봐야할 때가 된걸까…
JS / TS
- Typescript Helper Types · GitHub
- 타입스크립트 헬퍼 타입 모음집. 조금 어려운 부분도 있지만, 상대적으로 쉽고 실용적으로 접근할 수 있는 타입들도 있으니 한번 쭉 읽고 따라쳐보고 활용해볼만 하다고 느꼈다.
- Joe Fallon’s Blog | TypeScript try/catch/finally and Custom Errors
- 일단 제목에는 타입스크립트가 언급되어있긴 한데 자바스크립트로 에러를 처리하는 법 모범 사례(Best Practice)를 안내하고 있다.
- 에러를 캐치할 때 타입 정보를 제대로 캐낼 것
Error
객체(혹은 이를 상속한 객체)를 활용하고 그 외의 단일값은 최대한 지양할 것
finally
구문에서 리소스 해제
- 에러를 특정할 것. ts-custom-error 같은 패키지가 도움이 된다.
- 에러를 삼키지 말 것 (
catch
블락에서 먹어버리는 행위)
throw
를 goto 문으로 쓰지 말 것
catch
문을 로깅 후 다시 에러를 던지는 용도로 사용하지 말 것 (로그 중복 호출됨)
- Do Not Catch Exceptions in TypeScript | by Tomáš Veselý | Medium
- 바로 위의 링크를 읽고 정리했던 이유는 일단 이 글을 읽으면서 생각을 좀더 확실히 하기 위해서였다. 이전에 포스팅으로 ‘에러 처리를 어떻게 하면 좋을까’ 하고 고민을 해본 흔적은 있으나 명확한 결론은 내지 못한 채 코드의 유지보수성은 나락으로 떨어져갔다.
- 결국 중간 과정으로 어중간하게
Either(Result)
모나드를 활용하는 듯한 코드가 나오자, 이럴거면 이런 방식으로 에러를 처리하기 위한 당위성을 명확히 정리하여 팀 내부에 공유하고 필요한 도구를 도입하여 에러 처리 방식을 개선하자는 생각을 냈다.
- 이 글의 핵심은 ‘기대할 수 있는 에러(Expected Error)’ 는 던지지 말고 다른 방식으로 처리하자는 것이다. 위의 에러 처리 모범 사례 글에서 커스텀 에러가 언급되긴 했지만, 이런저런 문제가 있다는 것이다. 특히 “에러를 뱉을 수 있는 함수가 정확히 무엇을 뱉는가?” 를 특정하기 어렵다.
throw
문으로 던져지는 에러는 리턴 타입이 아니고, 타입스크립트 타입으로 정의할 수 없기 때문이다.
- 그래서
value
, error
가 있는 Result
타입 이야기를 꺼낸 것이고, 이 글에서는 실제로는 써먹기 어려운 아주 낮은 수준의 예제를 제공하고 있지만 충분히 타입스크립트로 명시적인 에러 처리를 위한 아이디어는 얻을 수 있었다.
- 덕분에 neverthrow 라는 라이브러리를 알게 되어 활용할 수 있게 되었다. 3년 전에 썼었던 Either 모나드 구현체에 비하면 아주 높은 수준으로 발전되어 있고 문서화도 잘 되어있어서 적극적으로 수용해보려 한다.
Frontend
- The trick to viewport units on mobile | CSS-Tricks
- 업무에서 모바일 대응을 할 일은 거의 없지만, 모바일로 접속한 사용자를 위해 프로토타입 재생을 위한 전용 페이지가 있다. 그런데 이전부터 iOS 사파리로 접속했을 때 앱으로 여는 것을 유도하는 버튼의 위치가 하단 툴바에 가려지는 문제 때문에 궁여지책으로
document.documentElement.clientHeight
을 처음 페이지 로딩 시 고정값으로 쓰고 있었다. 이렇게 하면 사용자가 직접 툴바를 없애는 동작을 실행할 시 레이아웃이 또 깨지기 때문에 제대로 된 해결책을 적용하지 못한 셈이었다.
- 그렇게 돌아만 가는 식으로 오랫동안 방치하던 페이지를, 이번에 landscape 지원을 하면서 다시 이런저런 수정을 가할 일이 생겼다. 구현은 팀 동료분이 하고 계시긴 하지만, 관련된 레이아웃을 잡는데 도움이 되도록 같이 조사를 조금 하다보니 괜찮은 글을 발견했다.
window.innerHeight
을 잡아내서 임의의 CSS 변수로 할당하고, 그 변수가 100vh
보다 약간 낮지만 연관된 수치가 되도록 조정을 하는 것이다. 그리고 calc
함수를 이용하여 계산하도록 하는 것이다.
- 아마 회사에서 모바일 애플리케이션에 들어가는 웹뷰를 작업하시는 분들이나 모바일 웹사이트 대응을 많이 해야 하는 분들은 이미 경험을 통해 충분히 숙지하고 있을만한 해결책이라고 생각된다.
- 연관된 글로 이 글도 매우 유용한데 사파리 웹킷에만 적용되는 속성인
-webkit-fill-available
을 이용하여 사파리의 툴바 문제는 그럭저럭 해결할 수 있다 하더라도 다른 브라우저의 레이아웃에 맞추는 것은 어차피 윗글의 설명대로 해야 될 것이다.
- The State of CSS 2020: Trend Report
- TailwindCSS의 높은 관심과 올라가고 있는 사용률 (하지만 아직 적용되고 있는 정도는 높지 않음)
- Sass는 높은 만족도와 사용율을 보이고 있음, 주로 많이 사용되면서 만족도가 높은 것은 (PostCSS, Styled Components, BEM, Sass)
- CSS-in-JS에서는 Styled Components, CSS Modules가 많은 인지도 및 사용층 확보, 그 뒤를 이어 Styled JSX
- CSS 자체도 많이 변화하고 있으며 Grid 등의 인지도 및 사용율은 꽤 높음.
preferes-reduced-motion
(사용율 15%), preferes-color-scheme
(사용율 18%) 새 미디어 쿼리도 잘 활용되고 있음
- 새로운(발전하고 있는) CSS에 대한 만족도는 대체로 73.9%로 매우 높음(만족 62.1% + 매우 만족 11.8%). 매우 불만족하는 사용자층은 1%에 불과함
- Programmatic file downloads in the browser - LogRocket Blog
- 특정 페이지에 접속할 때 비밀번호를 입력하여 들어간 다음, 패스워드 입력에 성공한 컨텐츠를 다운로드 받을 때 아무런 보안 제약이 없는
<a href>
태그를 클릭만 하는 것이 아니라 fetch
를 통해 GET 요청을 서버와 주고받는 식으로 파일을 다운로드 받는 기능을 구현해야 했다.
- 언제나 대체로 유용한 정보를 제공하는 LogRocket 블로그 답게 내가 필요한 정보 뿐 아니라 ‘브라우저에서 파일을 받는 방법’ 이라는 것을 A부터 Z까지 잘 짚어서 알려준다. 저기서 나는 응답을
blob
객체로 만든 다음 URL.createObjectURL
함수에 넘기는 방식을 활용했다.
- CSS-in-JS에서 CSS-in-CSS로 바꿔야 하는 이유 | bono blog
- 사실 이 글은 너무 피상적인 부분에 대해서 다루고 있다고 생각해서 내용이 일부만 공감이 갔다. 하지만 필력이 무척 마음에 들었다. 글쓴 분의 블로그의 다른 글과, 브런치에 연재중인 에세이를 틈 나는대로 읽어보고 싶다는 생각이 들 정도였다.
- CSS-in-JS 상태계는 여러 세대로 나뉘어 계속 다음 세대가 나올 수록 발전하고 있다. 그 도약은 상상을 초월할 수준이다. 또한 다양한 형태의 최적화 방법론이 도입되고 있으므로, 더 깊이 알아볼 필요가 있다고 느꼈다.
- html - How to hide the eye from a password input in MS Edge and IE - Stack Overflow
- Edge 브라우저를 검수할때 깊게 들여다보지 않다 보니 패스워드 입력 필드에서 별도로 reveal 버튼이 나오는 줄 몰랐었다.
- 이미 패스워드 입력용 컴포넌트에 reveal 버튼을 만들어두었기 때문에 불필요한 중복 기능이므로 지우려고 보니까 이런 답변이 있었다.
- 본문의 속성을 IE 및 레거시 엣지 브라우저에서만 있는 이슈처럼 되어있는데 최신 버전 엣지 브라우저에서도 나타나는 문제더라.
- GitHub - felipefialho/frontend-challenges: Listing some playful open-source’s challenges of jobs to test your knowledge
- 오픈소스로 공개되어있는 채용 사전 과제들 링크 모음
- 주로 영어와 포르투갈어로 된 저장소 링크가 많다. 포르투갈어(브라질 회사)의 링크가 많다는게 조금 놀라웠다.
- 각 과제는 주로 Readme 파일 하나만 제공되며, 구현해야 하는 내용에 대해 상세한 명세가 적혀있다. 이 명세에 제시된 기술 스택으로 본인 나름의 풀이를 시도해보는 것이 꽤 재미있는 도전이 될 것이다.
- 몇개 훑어보면서 단연 눈에 띄는게 있다면 공개된 iTunes API 를 이용하여 Top 100 앨범을 나열하는 웹사이트를 만드는 과제였다. 필수 구현사항을 제시하고, 각 레벨별로 이러이러하게 구현한다면 Novice, Intermediate, Expert 레벨일 것이라고 추가 기준을 세워주는 부분이 마음에 들었다.
React