inflearn logo
강의

講義

知識共有

SupabaseとNextを使ったフルスタック開発入門 (Supabase OAuth、Next.js 14をフィーチャー)

서버 컴포넌트에서 API 호출 시 Supabase의 클라이언트/서버 클라이언트 차이점이 궁금합니다.

解決済みの質問

329

seong2

投稿した質問数 4

0

강의를 듣다가 궁금한 점이 생겨서 질문드립니다.

브라우저에서 실행되는 코드에서는 브라우저 클라이언트를 사용하고, 서버에서 실행되는 코드에서는 서버 클라이언트를 사용합니다. - [Creating a Supabase client for SSR](https://supabase.com/docs/guides/auth/server-side/creating-a-client?queryGroups=framework&framework=nextjs&queryGroups=environment&environment=client#create-a-client)

@supabase/ssr 라이브러리를 사용해서 2가지 유형의 클라이언트를 생성합니다.

서버 컴포넌트로 동작하는 page 컴포넌트에서 각 클라이언트를 사용해 번갈아 API 호출을 해봤는데 동일하게 작동하는 것 같았습니다. 서버 컴포넌트에서 Supabase의 클라이언트/서버 클라이언트가 동작하는 방식의 차이가 있는지, 렌더링 방식에 차이가 있는지 궁금합니다. 서버와 클라이언트 개념과 렌더링 방식(SSR, CSR)이 자꾸 혼동되어 헷갈리네요..

import { getTodos as getTodosClient } from '@/apis/todos';
import { getTodos as getTodosServer } from '@/actions/todos';

export default async function page() {
  const todos = await getTodos...();
} 
// todos.ts
import { createBrowserSideClient } from "@/lib/client/supabase";

export const getTodos = async() => {
  const supabase = await createBrowserSideClient();
  const result = await supabase.from("todos").select("*");
  
  return result.data;
}
// todos.action.ts
import { createServerSideClient } from "@/lib/server/supabase";

export const getTodos = async() => {
  const supabase = await createServerSideClient();
  const result = await supabase.from("todos").select("*");
  
  return result.data;
}

react 클론코딩 next.js supabase

回答 2

0

dodocoding

React Server Component ( RSC )는 기본적으로 서버에서 동작합니다. 하지만 브라우저에서도 동작하도록 "use client" 디렉티브를 줄수 있죠.

  • React Server Component ( RSC ) = SSR

  • React Server Component ( RSC ) + "use client" = SSR +CSR

 

Next.js AppRouter에서 RSC 으로 SSR, CSR 를 모두 커버 했다라고 보면됩니다.

0

dodocoding

결론먼저 말씀드리면 서버에서 실행되는 코드라면 createServerSideClient, 브라우저에서 실행되는 코드라면 createBrowserSideClient 을 사용하면 됩니다.

*supabase 응답을 콘솔로그를 찍었을때 vscode 라면 서버사이드, 브라우저라면 클라이언트 사이드 입니다.

 

1.서버 컴포넌트는 서버와 브라우저에서 모두 동작할 수 있습니다.

( React Server Component != SSR )

 

2 서버 컴포넌트의 서버 실행 구간

2.1 Supabase createServerSideClient : 모든 기능이 잘 동작합니다.

2.2 Supabase createBrowserSideClient : 사실 이렇게 써도 잘 동작 합니다. 브라우저에서 돌리는 코드는 서버에서도 동작하죠. ( 대신 createServerSideClient과 다르게 req 객체의 쿠키 조작과 같은 작업은 못하겠죠. )

 

3. 서버 컴포넌트의 브라우저 실행 구간

( RSC 가 브라우저로 넘어와서 하이드레이션 과정을 거쳐서 리액트 App으로 돌아간다고 했었죠.! )

3.1 Supabase createServerSideClient : 사용이 불가능합니다.

3.2 Supabase createBrowserSideClient : 그래서 반드시 요것을 써야하죠.

 

vsCode 대신 커서를 사용

0

78

2

mac 터미널 설정이 궁금합니다

0

74

1

DBeaver와 supabase connection

0

280

2

가상환경 같은건 없나요?

0

102

3

serverComponent=false일 때 쿠키 세팅을 하는 이유?

0

122

2

getUser 에 갑자기 serverComponent가 추가된 이유?

0

90

2

getUser 에 갑자기 serverComponent가 추가된 이유?

0

91

2

useCallback의 디펜던시 배열에 supabase 넣는 이유?

0

84

2

수파베이스 인증 토큰에서 개인정보 지우는 법?

0

152

2

Server Actions CRUD 로직, RLS 테스트 권한 error

2

124

2

DBeaver로 supabase connection해보기

0

426

2

Supabase CRUD 하기 또는 REST API화 하기 중 질문이 있습니다.

1

251

2

Direct connection / Transaction pooler / Session pooler 차이가 무엇인가요?

1

576

2

LiveDemo 페이지 정상작동하나요?

2

136

2

7.2 구글 로그인 1 - AuthUI 구현 구글 로그인 관련 질문드립니다.

0

397

2

7.2 강 구글 로그인 1 강좌에서 redirectTo 로 설정해도 이동이 안되요.

0

409

3

로딩에 대한 질문

1

199

1

DBeaver는 왜쓰는 건가요?

2

657

1

혹시 ssr과 csr을 병행하여 사용하고 싶을 땐

1

277

2

타입에러에 관해 질문있습니다

0

287

4

9.1 강의에서 생긴 servercomponent 변수

2

278

2

3:07에 const result = 입력하는 부분은 복붙인가요??

0

176

1

{10.2장] 로그인 후 새로고침 해야 todolist가 보입니다

0

224

1

serverComponent 가 갑자기 강의에서나와요

0

264

1