들어가기 앞서... 벌써 2026년의 절반이 지났다. 매년 이맘때쯤이면 시간이 빠르다는 말을 하게 되는데, 올해는 유독 더 빠르게 지나간 느낌이다. 회사에 다니고, 운동을 하고, 사이드프로젝트를 굴리고, 중간중간 공부를 하다 보니 어느새 7월이 되어 있었다. 상반기 동안 무엇을 했냐고 물으면 가장 먼저 떠오르는 것은 아무래도 사이드프로젝트다. 몇 개는 출시해서 운영 중이고, 몇 개는 리팩터링하거나 출시 준비를 하고 있다. 왜 이렇게 많이 만들게 됐는지에 대해서는 이전에 초등학생 때 노트 게임 만들던 감각으로에서 따로 적어두었다. 다만 이번 회고를 쓰려고 보니, 프로젝트를 몇 개 만들었는지는 크게 중요하지 않다는 생각이 들었다. 숫자로 보면 꽤 많이 한 것처럼 보인다. 실제로도 많이 하긴 했다. 그런데 ..
개요 AI가 개발을 정말 잘해주는 시대가 됐다. 요즘 AI로 개발을 해보면, 예전 같으면 꽤 오래 걸렸을 작업들이 금방 끝난다. 신규 기능 개발이나 기존 기능 수정 정도는 웬만하면 큰 문제 없이 해준다. 사이드프로젝트 규모에서는 더 체감이 크다. 내가 하고 있는 사이드프로젝트들은 규모가 커봐야 4만 줄에서 7만 줄 정도다. 이 정도 규모에서는 AI가 컨텍스트도 꽤 잘 따라오고, 구조도 생각보다 잘 잡아준다. 대규모 마이그레이션이나 검증이 빡세게 들어가는 작업이 아니라면, 유료 플랜 하나로 회사 업무와 사이드프로젝트를 병행하는 것도 가능하다. 그러면 이제 개발 지식은 별로 필요 없어졌을까? 나는 아직은 아니라고 생각한다. 현시점에서는 개발 지식이 여전히 필요하다. 그리고 AI가 더 똑똑해져도 한동안은 ..
개요 요즘 회사에 다니면서 사이드프로젝트를 꽤 많이 굴리고 있다. 1D1S, Rutsubo, Laiteu는 이미 출시해서 운영 중이고, HIARC-Platform은 예전에 했던 프로젝트를 전면 리팩터링하고 있다. 여기에 아직 출시하지 않은 앱도 2개 정도 있다. 이렇게 적어놓고 보니 나도 좀 이상하긴 하다. "아니 회사도 다니면서 이걸 왜 이렇게까지 하지?" ...라고 물으면, 사실 거창한 이유는 없다. 그냥 프로덕트 만드는 게 재밌다. 현재 신분상 겸업을 할 수 없어서 수익을 내고 있는 것도 아니고, 당장 큰돈이 되는 것도 아니다. 그런데도 계속 만들게 된다. 자기만족도 있고, 언젠가는 수익을 만들 수 있지 않을까 하는 기대도 있다. 하지만 제일 큰 이유는 내 머릿속에 있던 것이 실제로 굴러가는 ..
개요 이 책은 13가지 질문과 함께 시작한다. 세계 평균 여성의 학습 기간, 빈곤국에서의 아동 사망률 등 세계 정세에 대한 객관식 질문들이다. 나름대로 상식을 동원해 열심히 풀어봤지만, 결과는 13문제 중 단 2문제 정답이었다. 보기 3개 중 아무거나 찍는 침팬지의 정답률이 33%인데, 나는 세상을 이해하는 데 있어 침팬지보다도 못한 성적을 거둔 셈이다. 나만 유독 세상 물정에 어두워서 그런 걸까? 놀랍게도 거의 모든 국가에서 사람들의 정답률이 침팬지보다 낮다고 한다. 개인이 아무리 똑똑해도 정답률은 40%를 넘기기 힘들다. 우리가 이렇게 세상에 대해 무지한 이유는, 우리가 아는 사실이 진짜 사실이 아니거나 1980년대의 낡은 지식에 머물러 있기 때문이다. 세상은 변했지만 우리의 세계관은 업데이트되지 ..
개요: 당연한 말인데, 머릿속에 없으면 의미 없는 것들 데일 카네기의 자기관리론을 매일 5~20페이지씩 꾸준히 읽어서 마침내 다 읽었다. 솔직히 책 내용을 한 줄로 요약하면 "당연한 말 많이 한다" 이다. 근데 그게 단점은 아니다. 당연한 상식이라 할지언정 내 머릿속에 없으면 의미가 없는 건데, 이 책은 그걸 한번 일깨워준다. 내가 평소에 두루뭉술하게 알고 있던 것들을, "아 내가 이미 알고 있었던 거구나" 라고 바로 인지할 수 있을 정도로 구체적으로 짚어준다. 만약 내가 이 책을 읽지 않은 상태에서 같은 주제로 글을 써보라고 하면, 절대 이렇게 구체적으로 못 쓴다. 예시까지 자연스럽게 들어가면서 쓸 자신은 더더욱 없다. 특히 좋았던 건 이 책에 나오는 사례들이 다 실존 인물 기반이라는 점이다. 데일..
4.1 Deduplicate Global Event Listeners핵심: 전역 이벤트 리스너를 훅 인스턴스 간 공유한다.왜 중요한가: 리스너 폭증으로 인한 메모리/CPU 낭비를 막는다.코드리뷰 신호: 같은 훅 사용 수만큼 window 리스너가 늘어난다. 같은 훅 사용 수만큼 window 리스너가 늘어난다 코드는 보통 구현 편의 때문에 생기지만, 트래픽이 늘면 병목으로 확대된다. 이 항목의 핵심은 문법 변경이 아니라 실행/렌더 흐름을 정리해 전역 이벤트 리스너를 훅 인스턴스 간 공유한다를 기본값으로 만드는 데 있다. 변경 뒤에는 요청 중복 여부, stale 데이터 노출 시간, 재시도/취소 동작와 회귀 테스트를 같이 보면서 리스너 폭증으로 인한 메모리/CPU 낭비를 막는다 결과가 재현되는지 점검한다. 예..
3.1 Authenticate Server Actions Like API Routes핵심: Server Action 내부에서 인증/인가를 반드시 검증한다.왜 중요한가: 액션은 엔드포인트처럼 호출 가능하므로 보안 경계가 필요하다.코드리뷰 신호: action 함수 내부에 auth/authorization 검증이 없다. action 함수 내부에 auth/authorization 검증이 없다 코드는 보통 구현 편의 때문에 생기지만, 트래픽이 늘면 병목으로 확대된다. 이 항목의 핵심은 문법 변경이 아니라 실행/렌더 흐름을 정리해 Server Action 내부에서 인증/인가를 반드시 검증한다를 기본값으로 만드는 데 있다. 변경 뒤에는 서버 응답 시간, DB/외부 API 호출 수, 캐시 적중률와 회귀 테스트를 같이..
2.1 Avoid Barrel File Imports핵심: 대형 라이브러리는 배럴 import 대신 직접 import를 사용한다.왜 중요한가: 불필요한 모듈 해석/번들 포함을 줄인다.코드리뷰 신호: 아이콘/컴포넌트 라이브러리를 루트 엔트리에서 구조분해 import한다. 실무에서 아이콘/컴포넌트 라이브러리를 루트 엔트리에서 구조분해 import한다 부분만 단발성으로 고치면 같은 문제가 다시 나오기 쉽다. 작은 단위(한 페이지, 한 훅, 한 API)부터 대형 라이브러리는 배럴 import 대신 직접 import를 사용한다 패턴을 적용하고, 경계 케이스를 함께 정리해야 회귀를 줄일 수 있다. 이후 번들 분석 결과(엔트리 청크, 라우트별 청크)와 초기 JS 파싱 시간을 배포 전후로 비교해 불필요한 모듈 해석/..
Vercel Labs에서 skill로 공유한 React Best Practices를 개인 공부용으로 사람이 읽기 좋게 정리하고 설명을 다시 작성한 글입니다. 나중에 슥슥 읽으려고 AI와 함께 작성한 글이니까 이상한 부분 있으면 알려주세요. 1.1 Defer Await Until Needed핵심: await는 실제로 필요한 분기 안으로 옮긴다.왜 중요한가: 불필요한 대기를 제거해 응답 시간을 즉시 줄일 수 있다.코드리뷰 신호: `early return`이 가능한데도 그 전에 실행되는 오래 걸리는 비동기 호출이 있다. `early return`이 가능한데도 그 전에 실행되는 오래 걸리는 비동기 호출이 있다 징후는 기능을 빠르게 추가할 때 쉽게 누적된다. 먼저 의존성이 없는 작업은 먼저 시작하고, 실제 소비 ..