서버 컴포넌트에서 API 호출 시 Supabase의 클라이언트/서버 클라이언트 차이점이 궁금합니다.
강의를 듣다가 궁금한 점이 생겨서 질문드립니다.
브라우저에서 실행되는 코드에서는 브라우저 클라이언트를 사용하고, 서버에서 실행되는 코드에서는 서버 클라이언트를 사용합니다. - [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가지 유형의 클라이언트를 생성합니다.
클라이언트 컴포넌트 클라이언트(createBrowerClient) - 브라우저에서 실행되는 클라이언트 컴포넌트에서 Supabase에 접근
서버 컴포넌트 클라이언트(createServerClient) - 서버에서만 실행되는 서버 컴포넌트, 서버 액션 및 라우트 핸들러에서 Supabase에 접근
서버 컴포넌트로 동작하는 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;
}
回答 2
0
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
결론먼저 말씀드리면 서버에서 실행되는 코드라면 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

