프론트앤드

Next.js client에서 server로 API를 요청하지 않고 server 작업을 실행하는법 (useTranstition())

벨보이 2024. 5. 14. 17:08

🤔  먼저 fetch API를 이용한 Client 와 Sever의 통신 방법에 대해 알아보자

기본적으로 Client와 Server는 API를 통해 데이터를 주고 받는다
하지만 Next.js는 Client와 서버의 데이터를 API를 통해서 주고 받지 않아도 된다

 

🧐  HTTP 요청(fetch API) VS Next.js Server Action

기본적으로 Next.js를 사용하지 않고있다면 HTTP 요청을 사용해야한다 RESTful하고 통신이 명확하게 분리되기 때문이다

하지만 Next.js fullstack으로 개발중이라면

Next.js Sever Action이 더 좋을 수 있다

코드를 간소화해도 되고 HTTP 요청이 없어서 빠른 응답과 직접적으로 클라이언트 함수에 접근이 가능하기 때문이다

다양한 BE를 사용한다면 HTTP 요청이 정답이지만 Next.js Sever 와만 통신하는 데이터 처리라면

Server Action이 좋은 선택이 될 수 있다

 

// Client Function
const TestServerJobs = async () => {
	try{
    	const response = await testAction()
    }
}

// Action
const testAction = async () => {
  return await testService.testFunction()
}

//Service
class TestService{
	anync testFunction(){
    	{서버 서비스 작업}
        return response
    }
}

export const testService = new TestService();

😆  그렇다면 useTransition() 이란?

`useTransition`은 React 18에서 도입된 훅으로, 비동기 작업을 효율적으로 처리하고 UI의 응답성을 유지하는 데 도움이 됩니다. 이 훅을 사용하면 비동기 상태 업데이트를 "전환(transition)"으로 취급하여, React가 더 중요한 업데이트(예: 사용자 입력)를 우선 처리하고 덜 중요한 업데이트(예: 데이터 가져오기)를 나중에 처리할 수 있습니다.

- **`useTransition` 사용**: UI의 응답성을 유지하면서 비동기 작업을 처리할 때 유용합니다. 중요한 작업과 덜 중요한 작업을 구분하여 처리할 수 있습니다.
- **`useTransition` 미사용**: 간단한 비동기 작업에는 적합하지만, 복잡한 비동기 작업에서는 UI의 응답성이 떨어질 수 있습니다.

두 방법 모두 특정 상황에 따라 유용할 수 있으며, 애플리케이션의 요구사항과 복잡성에 따라 적절한 방법을 선택하는 것이 중요합니다.

 

// Client

const testFunction = async () => {
	try{
    	const response = await serverDataAction();
    }catch(e){
    	console.log(e)
    }
}


// useTransition 사용

const [transition, startTransiting] = useTransition()

const testFunction = async () => {
	startTransiting( () => {
            try{
                const response = await serverDataAction();
            }catch(e){
                console.log(e)
            }
    })       
}

 

 

💪 출처 및 도움주신분들

 

GPT