괴로운 일들은 도처에 있습니다. 길지 않은 삶을 살아오는 동안 직간접적으로 보고 듣고 겪어온 일들이 이 정도라면 앞으로의 삶에서 남은 괴로움이 얼마나 될지 미루어 짐작도 할 수 없겠네요. 틀림없이 앞으로도 크고 작은 고통들이 저를 찾아올 거예요. 누군가의 말처럼 삶은 정말로 고통의 연속인지도 모르겠습니다. 하지만 그와 동시에 우리는 악조건 속에서 피어나는 꽃들을 봅니다. 전쟁과 기아, 가난이 가득한 곳에서도 꽃은 피어나고 행복한 웃음이 피어납니다. 반대로 평화와 배부름, 풍족함이 가득한 현대적인 도시에서도 짜증 섞인 목소리나 서로 다투는 소리가 들려옵니다. 저는 문득 생각했습니다. 어쩌면 우리에게 외부 환경은 그다지 중요하지 않은 걸까? 저는요, 명상을 해요 불행과 행복이 외부의 영향에서 비롯되는 것이 ..
2022년 하반기 회고 남들은 12월에 쓰는 회고를 1월에 쓰고 앉아 있는 게으른 개발자 루크입니다. 언제나 마찬가지겠지만, 바쁘네요! 하지만 바쁘지 않고 한가한 것보다는 정신없이 바쁜 편이 전 더 좋습니다. 제가 개발자로 진로를 바꾸고, 일을 시작하기 전에 느꼈던 일종의 절박함을 잊지 않으려고 노력하고 있어요. 앞으로도 잊지 않고 열심히 구르려고 준비하고 있습니다! 이직한 회사에서 1인분 하기 저번 회고에서는 이직했다는 소식을 전해드렸는데요, 이제야 좀 제자리를 잡고 일을 하고 있는 느낌입니다. 경력직으로 이직해 본 경험이 있는 분이라면 공감하실 수도 있겠지만, 최대한 빠르게 온보딩해서 스스로를 증명하고 싶은 욕심이 저에게는 있었어요. 당연히 수 차례의 면접을 통해서 어느 정도는 검증된 상태로 채용이 ..
React 18에서 새롭게 등장한 hooks React 18이 나온 지도 시간이 꽤 지났습니다. 이제는 어느 정도 안정화 단계에 접어들었다고 판단되어서 새로운 프로젝트를 시작하면서 도입하기로 결정했는데요, React 18에서 새롭게 등장한 hooks의 기능이 꽤나 강력합니다. 한 번 정리해두면 좋을 것 같아서 정리해보았습니다. 우선 이번에 등장한 hooks는 총 5개입니다. 그중에 2개는 라이브러리를 위해 제공되는 것이고, 3개는 어플리케이션 단에서 사용할 수 있는 것이에요. Library hooks 해당 hooks는 라이브러리를 위해 제공되는 hooks로, 일반적인 Application 단에서는 사용할 필요가 없어서 자세히 알아보지는 않았습니다. 그냥 이런 게 있다더라 정도만 이해하시고 상세한 설명은 ..
수익 발생 작년 12월 8일부터 애드센스가 승인되어서 조금씩 수익이 발생하고 있었습니다. 그렇게 거의 8개월이 지났는데, 드디어 첫 수익을 정산받을 수 있었습니다 🎉 총 US$104.63가 정산되었는데요, 현재 환율로 계산해보면 약 14만 원 정도 됩니다. 하지만 저는 국민은행을 통해서 수익금을 지급받았고, 국민은행은 해외송금을 받을 때 건당 1만 원의 수수료가 부과됩니다 😢 물론 US$100 미만의 경우에는 수수료가 면제되지만, 애드센스는 US$100 이상부터 출금이 가능하기 때문에 큰 의미는 없겠네요. 그래서 결과적으로 오늘 입금된 원화 금액은 아래와 같습니다. 작고 소중한 수익이 발생했네요 🤭 나중에 수익이 더 늘어서 자주 출금할 일이 생긴다면 기준 금액을 올리는 것도 도움이 되겠지만, 저는 지금 ..
Suspense? ErrorBoundary? 사실 React18에서 완전히 새롭게 도입된 기능은 아닙니다. Suspense와 ErrorBoundary 모두 React16.6에서 처음 등장한 개념이에요. 하지만 그동안은 experimental(실험적) 기능이었고 React18에서 정식 기능으로 편입되었다고 보는 것이 맞습니다. Suspense 기존에는 lazy loading을 지원하기 위해서 주로 사용되어 왔습니다. 하지만 이제는 컴포넌트가 API 호출을 하는 동안 fallback으로 보여줄 내용을 지정해줄 수 있게 되었어요! 🎉 사용법은 아래와 같습니다. import { Suspense } from 'react' {/* ... */} ErrorBoundary 이 친구는 UI에서 발생한 에러..
2022년 상반기 회고 올해는 상반기가 무척 바빴습니다. 특별히 무슨 일이 있었던 건 아닌데, 주로 이직 때문이었어요. 작년 말부터 본격적으로 이직을 준비하기 시작하고 나서 대략 6개월 정도가 걸렸던 것 같네요. 그래서 이번 회고는 주로 이직 준비에 대한 간략한 기록이 될 것 같습니다. 이직동기 이직을 어쩌다가 하게 되었는지에 대한 질문은 면접을 보는 내내 들었던 질문이고, 저는 나름대로 명확한 이유를 가지고 있었습니다. 많은 이유가 있었지만 대략 세 가지 정도로 정리하자면 아래와 같습니다. 팀원들에 대한 불만 같이 일하는 팀원 중에 제대로 프론트엔드 개발자라고 부를 수 있는 사람은 저 혼자뿐이었습니다. 그러다 보니 회사에서 어떠한 자극을 받거나 동기를 부여받을 수 있는 환경이 갖춰지지를 못했어요. 그래..
코딩을 하다보면 배열을 랜덤하게 섞을 상황이 생깁니다. 대부분의 경우, 아래와 같은 코드를 이용해서 배열을 섞고는 하죠. Array.prototype.sort()를 이용한 방법 function sortShuffle(arr) { return arr.sort(() => Math.random() - 0.5); } 이는 배열을 정렬하는 sort 메서드를 이용해서 새롭게 정렬을 만들어내는 방식인데요, Math.random()의 결과는 0 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [arr[i], arr[j]] = [arr[j], arr[i]]; } return arr; } 테스트 동일한 배열로 동일한 환경에서 테스트를 진행해 보았습니다. 테스트 코드는 아..
지난 글을 통해서 문해력에 대한 이야기를 했습니다. 한 줄로 요약을 하자면, '뭐라도 읽읍시다'가 되겠네요. 읽지 않거나 혹은 읽지 못하거나 최근에 사람들의 문해력에 대해서 말이 많습니다. 우리나라는 문맹률은 굉장히 낮지만, 글을 읽고 이해하는 문해력, 즉 실질 문맹률은 굉장히 높은 것으로 나타났다고 하더라고요. 요즘 안 그래 luke-tofu.tistory.com 그래서 이번 글의 주제로는 '어떻게 읽으면 좋을지'에 대해서 아주 간단하게 설명하는 시간을 가져보겠습니다. 사실 '어떻게 읽는가'에 대해서 한 마디로 요약하는 것은 불가능합니다. 왜냐하면 사람마다 글을 읽는 목적이 다르기 때문이에요. 누군가는 문학작품을 감상하려는 목적으로 가지고 볼 수도 있고, 또 누군가는 정보 습득이나 학습을 목적으로 읽을..
2022년 2월도 벌써 중반을 지나고 있는데 회고를 쓰는 개발자가 있다!? 네.. 그게 접니다.. 늦었지만 빠르게 가볼까요! 회사 업무에 관해 Notification 기능 개발 2021년 연초부터 계획된 대규모 작업이었습니다. 기존 UI와 이질감이 들지 않게 Notification 기능을 개발해야 했거든요. Frontend와 Backend 간의 긴밀한 협업이 필요해서 정규 회의가 아니더라도 수시로 소통하면서 개발을 진행했던 기억이 납니다. 회의 때 나왔던 이야기여도 구현하는 실무자들끼리 의견을 조율해서 선조치하고 후보고하는 형식으로 기민하게 일이 진행되었고 실제로 기능 시연 때도 박수를 받았던 기억이 있습니다. 이 때를 기점으로 회사에서도 어느 정도 인정을 받기 시작했던 것 같아요. 동시에 온갖 이슈가 ..
팀장님: 루크 씨, 저희 제품 config Dialog를 좀 수정해야 할 것 같네요. 이틀 드릴게요. 루크: ..네? 문제의 발단 회사에서 업무를 하던 도중 위와 같은 요구사항이 들어왔습니다. 상세한 내용은 회사 보안상 서술하기 좀 어렵지만, 간단하게 각색해서 그려보면 아래와 같아요. 기존에는 캐릭터의 이름만 변경하도록 되어있던 아주 단순한 구조의 Dialog 컴포넌트가 이제는 Favorite도 추가/수정하도록 변경된 겁니다. 심지어 Favorite은 몇 개든지 들어가야 하는 상황이고요. 캐릭터는 약 500개가 넘고, API는 한 번에 모든 캐릭터의 이름을 불러오도록 되어있습니다. 그리고 저기 들어가는 Favorite 컴포넌트는 다른 곳에서도 동일하게 사용되어야 했기 때문에, 저는 캐릭터 이름을 변경하는..