![[인프런 워밍업 스터디 클럽 4기_FE] 3주차 발자국](https://cdn.inflearn.com/public/files/blogs/1e8f11e5-8d3b-4e5e-a257-70daf086bb51/4-frontend.png)
[인프런 워밍업 스터디 클럽 4기_FE] 3주차 발자국
강의 수강 내용 및 회고
짐코딩님의 프론트 부트캠프의 마지막 주에는 사용자의 흐름, 데이터 흐름, 그리고 성능 최적화까지의 개발 과정을 배웠다. 특히 Server Components와 Server Actions, React Query, 캐싱 전략, 라우팅 등 주요 개념을 어떻게 적용하는지 더 살펴보는 시간이었다.
페이지 이동 방식
서버 컴포넌트에서 페이지를 리다이렉트할 때는
redirect
클라이언트 컴포넌트에서는
useRouter
페이지 내 링크 이동은
<Link>
Server Action
API 라우트를 따로 만들지 않고 secure 하게 서버에서 사용자 이벤트 (form submission, data mutation) 을 처리할 수 있다.
브라우저에서 직접 호출하지 못하고 오직 form action 또는 prop으로 넘긴 함수에서만 실행
전체 페이지 리렌더링이나 별도 네비게이션 없이 최소 범위의 컴포넌트 리렌더링에 의해 함수가 트리거 된다
app/actions.ts
에use server
를 상위에 정의하고 클라이언트 컴포넌트에서 임포트해서 사용
유효성 검사: Zod
zod
라이브러리를 활용해 데이터 타입 검증스키마 정의 후
parse
를 통해 데이터를 검사하고 유효하지 않으면 에러 throw
데이터 캐싱 전략
캐싱은 서버와 클라이언트 양쪽에서 필요에 따라 적용
Request memoization: 요청 함수 반환값 캐싱
Data Cache: 서버 데이터 캐싱
unstable_cache
로 무거운 DB 호출 캐싱,revalidate
함수로 서버에서 재검증 가능export const revalidate = 3600; // ISR: 1시간마다 재검증
React Query
로 클라이언트 브라우저 메모리에 데이터 캐싱이 필요하다
useEffect(() => { if (state?.success) { queryClient.invalidateQueries({ queryKey: ['posts'] }); router.push('/'); } }, [state?.success, queryClient, router]);
Full Route Cache: 전체 페이지 캐싱
Router Cache: 유저 세션/시간 당 라우터 프리패치 캐싱
라우팅
라우팅 그룹 (Route Groups)
app/ └─ (marketing)/ └─ about/ → /about url 에 marketing 이 노출되지 않음
병렬 라우팅 (Parallel Routes)
@
디렉토리slot
생성layout
에서slot
을props
로 받아 렌더링default
를 넣어 fallback 페이지 제공
app/ ├─ @team/ │ └─ page.tsx ├─ page.tsx └─ layout.tsx
인터셉팅 라우팅 (Intercepting Routes)
(.)
,(..)
,(..)(..)
으로 현재 경로를 가로채 모달로 soft navigation실제로 URL을 방문하면 full page로 렌더링
SEO 최적화
metadata 동적/정적 설정
최적화 전략
static 렌더링이 성능과 SEO 면으로 좋다
초반에 배운 ISR, SSG, SSR 렌더링 방식들을 실제 유즈 케이스 관점으로 바라보고 적용해볼 수 있었다.
이번에 배운 내용으로 블로그에 효율적인 렌더링과 클라이언트와 서버 간 데이터 흐름을 구현할 수 있었다. 사실 이걸 다시 나 혼자 만들라고 하면 쉽게 개발 할 수 있을 것 같진 않다. 아직 완벽히 이해가 되지 않는 부분들이 많지만 이런게 있고 프론트앤드 개발자로써 이런 고민들을 할 수 있구나 를 배운 것 같다. 배운 내용들이 많아서 내 개발 프로세스에 다 적용시킬 수 있을 것 같진 않지만 개발해나가면서 발전해야할 점들이 보일때 "이런게 있었던 것 같은데" 할 수 있으면 충분 할 것 같다. 경험을 통해 이런 내용들은 더 확고하게 자리 잡을 것이라 빌고 믿는다.
댓글을 작성해보세요.