[React] 서버 액션(alpha)

2024. 10. 18. 21:04·Front/React

 

서버 액션(Server Actions)은 React 18에서 새롭게 도입된 기능으로, 서버에서 실행되는 코드를 클라이언트에서 쉽게 호출할 수 있게 해준다. 이는 서버에서 직접 액션을 처리하고, 그 결과를 클라이언트로 반환하는 방식으로 작동하여 클라이언트에서 복잡한 상태 관리나 비동기 처리를 덜어주는 장점을 가지고 있다

 

 

React 서버 액션의 주요 특징

 

1. React 컴포넌트에서 호출 가능

서버 액션은 React 컴포넌트 내에서 호출할 수 있으며, 서버 액션이 완료되면 결과값을 받아 렌더링할 수 있습니다. 이를 통해 클라이언트에서 복잡한 로직을 구현할 필요 없이 서버에서 처리된 데이터를 바로 사용할 수 있습니다.

 

2. 직접적인 서버와 클라이언트 통신

서버 액션은 클라이언트가 직접 호출하는 서버 함수입니다. 이는 서버와 클라이언트 간의 통신을 직관적으로 만들어줍니다. React가 서버에 액션을 전달하고, 서버에서 결과를 받아오게 되는 이 과정은 서버측에서 해당 작업을 처리하기 때문에 클라이언트에서는 상태 관리나 비동기 처리를 복잡하게 할 필요 없어지고 React가 이 통신을 추상화해 관리합니다.

 

3. 비동기 지원

서버 액션은 비동기 처리를 지원하며, await 키워드를 사용하여 서버 액션이 완료될 때까지 대기할 수 있습니다. 이 덕분에 API 호출이나 데이터베이스 쿼리 같은 작업을 서버 액션 안에서 쉽게 처리할 수 있습니다.

 

5. 서버 액션의 보안

서버 액션은 서버에서만 실행되기 때문에, 클라이언트에서 민감한 로직을 실행하지 않아도 됩니다. 중요한 데이터 처리나 비즈니스 로직을 서버 측에서 안전하게 처리할 수 있으며, 클라이언트는 결과만 받아 처리하게 됩니다.

 


 

 

예시 코드

'use server'

export async function saveUserData(formData) {
  const data = Object.fromEntries(formData); // FormData 객체를 JSON으로 변환
  const res = await fetch('/api/save', {
    method: 'POST',
    body: JSON.stringify(data),
    headers: {
      'Content-Type': 'application/json',
    },
  });

  return res.json();
}

// 클라이언트 컴포넌트
export default function UserForm() {
  return (
    <form action={saveUserData}>
      <input name="username" />
      <button type="submit">Save</button>
    </form>
  );
}

<form action={saveUserData}>

서버 액션을 사용하려면 폼의 action 속성에 서버 액션 함수가 연결되어야 한다.

폼이 제출되면 서버에서 바로 saveUserData 함수가 실행된다.

폼 데이터를 formData로 전달받음

 

export async function saveUserData(formData) {
  const data = Object.fromEntries(formData); // FormData 객체를 JSON으로 변환
  const res = await fetch('/api/save', {
    method: 'POST',
    body: JSON.stringify(data),
    headers: {
      'Content-Type': 'application/json',
    },
  });

  return res.json();
}

1. res.json()의 역할

저작자표시 (새창열림)

'Front > React' 카테고리의 다른 글

[React] 이미지 목록 + 페이지네이션 구현 Part 1  (7) 2024.10.11
[React] 상태관리 :: Redux와 React Query | 차이점 | 함께 사용하면 좋은 이유  (0) 2024.09.27
[React Library] React Router의 개념과 사용방법  (3) 2024.09.23
[React] Context란? | Context 사용방법과 예시  (1) 2024.09.07
React와 Next.js의 차이와 Next.js 프로젝트 생성하기  (0) 2024.01.22
'Front/React' 카테고리의 다른 글
  • [React] 이미지 목록 + 페이지네이션 구현 Part 1
  • [React] 상태관리 :: Redux와 React Query | 차이점 | 함께 사용하면 좋은 이유
  • [React Library] React Router의 개념과 사용방법
  • [React] Context란? | Context 사용방법과 예시
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (86)
      • Web (1)
        • Web (1)
        • HTTP (0)
      • Java (25)
        • JVM (0)
      • Spring (9)
      • AWS (0)
      • Language (4)
        • Java Script (3)
        • Type Srcipt (1)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (20)
        • JSP (0)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
      • 회고록 (0)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    김영한
    springboot
    CSR
    중복제거
    백엔드
    javascript
    스프링부트
    SSR
    csrvsssr
    sql강의
    java의 정석
    SQL강의 추천
    React Next.js
    과학기술인 등록번호 발급
    Spring
    자바스크립트set
    Java
    과학기술인등록번호 조회
    React
    강의후기
    강의 후기
    인프런
    데이터베이스 강의
    Next.js 필요성
    csr과ssr의 차이
    과학기술인 번호 발급
    과학기술인번호 조회
    프론트엔드
    Next.js
    과학기술인 등록
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
[React] 서버 액션(alpha)
상단으로

티스토리툴바