Next.js
-
멀티프로젝트 Claude Code 설정 운영기 4편 — 룰은 상시 로드가 아니라 적중할 때 로드한다AI 엔지니어링 2026. 9. 1. 07:44
CLAUDE.md에 "Vercel의 react-best-practices를 따라줘"라고 적어두면 에이전트가 그 룰을 지킬 것 같다. 안 지킨다. 이름과 링크는 근거가 아니기 때문이다. 모델은 그 65개 룰의 내용을 이번 컨텍스트에서 보지 못하고, 보지 못한 규칙을 지킬 방법은 없다. 여러 프로젝트에 Claude Code와 Codex를 물려 팀 컨벤션을 먹이려던 나는 여기서 막혔다. 이 글은 "AI에 규칙을 어떻게 주입하나?"라는 질문에 대해, 매번 주입에서 출발해 측정 뒤 조건부 로드로 후퇴하기까지의 작업기다. 에이전트에 팀 컨벤션을 강제하려는 사람이라면 같은 벽을 만난다.이름만 대는 지시는 지켜지지 않는다문제의 뿌리는 단순하다. 에이전트는 매 요청마다 자기 컨텍스트 창에 들어온 텍스트만 근거로 삼는다...
-
단일 `ko.json`이 모든 PR의 충돌 진원지일 때 - next-intl 메시지를 도메인으로 쪼개는 설계Tip 2026. 7. 8. 19:49
1. 도입부 (Why This Matters)화면에 문구 하나 추가하는 PR이 왜 자꾸 머지 충돌이 날까. 범인은 대개 하나다 — 모든 도메인의 번역이 들어찬 단일 messages/ko.json. 검색·상세·결제·랜딩처럼 서로 다른 기능을 건드리는 PR이 전부 같은 파일의 다른 줄을 편집한다. 파일이 수천 줄로 불어나면 병렬 작업과 릴리스 분기에서 충돌은 상수가 된다.이 글은 그 단일 파일을 도메인 파일로 쪼갠 설계 기록이다. 단순히 파일을 나누는 게 아니라 — 충돌 면적 축소, 번들러 정적 분석 안전성, 타입 기준(source of truth), 그리고 도메인 추가 비용을 0에 수렴시키는 codegen까지 — 네 가지를 한 번에 푼다. 읽는 데 약 8분, 읽고 나면 당신의 가장 큰 메시지 파일을 어디서..
-
React useOptimistic vs React Query optimistic updates: 낙관적 업데이트, 무엇을 선택할까?React 2025. 9. 1. 18:59
사용자가 어떤 액션을 취했을 때 서버 응답을 기다리지 않고 UI에 미리 성공한 것처럼 반영하는 것을 낙관적 업데이트라고 합니다. 예를 들어 SNS에서 댓글을 달면 서버 응답 전에 곧바로 댓글이 화면에 나타나고 “전송 중...”이라고 표시되는 경험을 본 적이 있을 것입니다.성공 시에는 그대로 두고, 실패 시에는 UI를 다시 원래대로 돌립니다. 이러한 기법은 미묘한 시간 지연으로 인한 답답함을 줄여 사용자 경험을 개선하지만, 동시에 실패 시 UI를 되돌리고 오류를 알리는 처리가 중요합니다. 낙관적 UI 업데이트를 활용하면 서버 처리 중에도 “Sending...”과 같은 상태를 즉시 표시할 수 있습니다. 위 이미지는 사용자가 댓글을 작성하자마자 UI에 (Sending...) 라벨이 나타나는 예시입니다. 서버 ..
-
이제는 TipTap? 아직도 CKEditor?Tip 2025. 8. 1. 19:56
최근 편집기에 대해 조사하던 중 많이 변했다는 것을 체감했습니다.Quill 주로 사용하고 좀 더 많은 기능이 필요하다면 CKEditor를 사용하는 게 일반적이었는데, Tiptap과 같은 새로운 Editor가 나와 오늘은 Tiptap과 CKEditor, Quill에 대해 비교해 보겠습니다.ProseMirror와 TipTap – 모던 에디터의 탄탄한 기반먼저 TipTap을 이야기하기 전에, 그 기반 기술인 ProseMirror를 짚고 넘어가야 합니다.ProseMirror는 CodeMirror를 만든 Marijn Haverbeke가 설계한 문서 편집 엔진으로, 수년간 다양한 에디터에서 활용되며 안정성을 검증받은 배틀 테스트된(editor) 라이브러리입니다.ProseMirror는 문서 모델(schema)과 편집..
-
Next.js App Router(3) - 폴더 구조와 파일 역할Next.js 2025. 6. 27. 10:59
이번 편에서는 Next.js App Router의 page 파일 이외에 새롭게 추가된 파일들의 역할을 알아보고 효율적인 폴더 구조를 구성하는 방법에 대하여 알아보겠습니다. 1편에서 App Router에서 추가된 주요 파일들에 소개했는데요.다시 간단하게 작성해 보자면 다음과 같습니다.page.tsx: 각 경로의 메인 컴포넌트입니다. 서버 컴포넌트가 기본이며, 클라이언트 컴포넌트로 사용하려면 상단에 'use client'를 추가합니다.layout.tsx: 특정 경로 그룹에서 공통으로 사용되는 레이아웃을 정의합니다. 페이지 전환 시에도 상태가 유지됩니다.template.tsx: 페이지 전환마다 새 인스턴스로 생성됩니다. 상태를 초기화하고 싶을 때 사용됩니다.loading.tsx / error.tsx: 로딩 상..
-
Next.js App Router(2) - 서버 vs 클라이언트 컴포넌트Next.js 2025. 6. 25. 10:25
Next.js App Router에서 가장 큰 변화점은 기본적으로 모든 컴포넌트는 Server Component(서버 컴포넌트)라는 것입니다.이번 글에서는 Server Component와 Client Component에 대해 알아보겠습니다.1. Server Component의 장점과 역할서버 환경(Node.js)에서 렌더링DB 쿼리, 외부 API 호출, 비밀 키·토큰 활용 등 브라우저에서 노출되면 안 되는 모든 작업을 안전하게 처리할 수 있습니다.예시: 서버 컴포넌트 내에서 직접 DB에 접근하여 데이터를 가져오고, 이를 UI에 반영HTML 렌더링 및 전송서버에서 렌더링 된 HTML이 브라우저로 전달되어, JS 번들 없이도 빠르게 콘텐츠가 보임React의 클라이언트 훅, 브라우저 API 미사용useStat..
-
Next.js App Router(1) - Next.js의 새로운 패러다임 이해하기Next.js 2025. 6. 23. 14:13
Next.js가 App Router를 도입 한 13 버전 이후 벌써 15 버전이 되었습니다.기존에 Page Router를 사용하던 곳들도 이제는 App Router 도입을 고민하고 또 도입하고 있습니다.이번 글에서는 Next.js App Router가 등장한 배경, 철학, 그리고 Pages Router와의 차이점에 대해 알아보겠습니다.1. Next.js App Router의 등장 배경Next.js는 React를 기반으로 한 프레임워크로서 항상 React의 변화를 빠르게 도입하는 프레임워크입니다.React 18에서 도입된 Concurrent Rendering과 React Server Components(RSC) 지원은 기존 SPA 한계를 극복하기 위한 도전이었습니다.Next.js도 SPA의 한계를 깨고 더..
-
Next.js와 Node.js 기반 실시간 대용량 편집기 Part2. 구현 및 성능 최적화Tip 2025. 5. 3. 00:14
1편에서는 대용량 데이터를 처리하는 협업 편집기의 시스템 아키텍처와 프로토콜 선택 기준을 심층적으로 다뤘습니다. 이번 2편에서는 실제 Next.js 프론트엔드와 Node.js 백엔드를 사용하여 이러한 시스템을 구현하는 방법과, 성능을 최적화하는 다양한 기법을 살펴보겠습니다.1. Next.js 클라이언트에서의 데이터 스트리밍 처리Next.js 클라이언트에서는 실시간 편집 데이터를 주고받기 위해 주로 WebSocket API를 사용합니다. Next.js는 React 기반이므로, 보통 페이지가 로드되면 useEffect 훅 등을 통해 WebSocket 연결(new WebSocket("wss://..."))을 열고 이벤트 리스너를 설정합니다.useEffect(() => { const socket = new W..