전체 목록
Next.jsHard#231

Server Actions는 어떤 문제를 해결하나요?

#Next.js#ServerActions#Form#Mutation

답변 포인트

클라이언트 액션과 서버 함수 연결를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

Server Actions는 별도 API 라우트 없이 폼 제출이나 사용자 액션에서 서버 함수를 호출하게 해줍니다. 데이터 변경, 검증, revalidation을 한 흐름으로 처리할 수 있습니다.

Server Actions는 폼 제출이나 클라이언트 이벤트에서 서버 함수를 직접 호출할 수 있게 해, 별도의 API route 작성 부담을 줄이고 mutation 로직을 서버 가까이에 둘 수 있게 합니다.

기본 예시

TSX
// app/actions.ts
'use server';

export async function createTodo(formData: FormData) {
  const title = String(formData.get('title'));
  await db.todo.create({ data: { title } });
}
TSX
<form action={createTodo}>
  <input name="title" />
  <button type="submit"></button>
</form>

해결하는 문제

  • 간단한 mutation마다 API route, fetch, body parsing 코드를 반복하지 않아도 됩니다.
  • 서버 전용 코드와 secret을 클라이언트 번들에 넣지 않습니다.
  • form과 progressive enhancement를 자연스럽게 지원합니다.
  • mutation 후 revalidatePath, redirect 같은 Next.js 기능과 연결하기 쉽습니다.

주의점

Server Action도 외부에서 호출 가능한 서버 엔드포인트처럼 취급해야 합니다. 인증/인가, 입력 검증, CSRF 모델, rate limit을 반드시 고려해야 합니다.

TypeScript
'use server';
export async function deletePost(id: string) {
  const user = await requireUser();
  await assertCanDelete(user, id);
  await db.post.delete({ where: { id } });
}

면접 답변 포인트

Server Actions는 서버 mutation을 컴포넌트와 가까운 위치에서 선언하고 호출하게 해 API 보일러플레이트를 줄입니다. 하지만 보안 검증이 자동으로 해결되는 것은 아니므로 서버 엔드포인트처럼 다뤄야 합니다.

관련 질문

같은 카테고리/태그 기준