● 클라이언트 사이드 렌더링
○ 정의 : React.js의 웹사이트 프로젝트에 대해 프로그램이 작동 될때의 원리로 아래와 같이 6단계로 '유저' , '브라우저', '서버'간의 교류로 이루어진다.
● 클라이언트 사이드 렌더링 vs 사전랜더링 :
○ 사전 렌더링 정의 : 클라이언트 서버 렌더링의 FCP가 늦는다는 단점을 보완하는 렌더링 방식
○ 다음 페이지 교체 방식은 클라이언트 사이드 렌더링 방식을 채택하여, 페이지 교체 출력은 빠르게 가능해진다.
● 실습 백엔드 서버 세팅
○ 순서1_ 미리 세팅된 백엔드 서버의 github를 들어와 클론을 하든지, 다운을 받든지 하셈
https://github.com/winterlood/onebite-books-server
[GitHub - winterlood/onebite-books-server: onebite-books-server
onebite-books-server. Contribute to winterlood/onebite-books-server development by creating an account on GitHub.
github.com](https://github.com/winterlood/onebite-books-server)
○ 순서2_ 다운 받은 백엔드 파일 폴더로 VsCode 접속
○ 순서3_ 이 백엔드 파일을 사용할 서버를 선택해야함 //우리는 'supabase' + 'prisma' 스택으로 할것임 => Supabase 접속 후, 회원가입 ㄱㄱ
[Supabase | The Open Source Firebase Alternative
Build production-grade applications with a Postgres database, Authentication, instant APIs, Realtime, Functions, Storage and Vector embeddings. Start for free.
supabase.com](https://supabase.com/)
○ 순서4_ 회원 가입 후, 'Create a new project' 탭에 들어간 후, 아래와 같이 설정한다.
★이떄, 어지간하면, 비밀번호의 소문자 + 특수문자없이 설정해라. (안그러면 나중에 힘듬)
○ 순서5_ project 생성 후, 위의 'Connect' 버튼을 누른 뒤, 'Session pooler' 항목의 안의 text를 복사한다.
○ 순서6_ 다시 VsCode에 접속 후, 백엔드 프로젝트 가장 상위에 [.env] 파일을 생성 뒤, 아래와 같이 DATABASE_URL 변수 생성후, 복사한 문자열을 "" String 형태로 대입한다.
DATABASE_URL = "postgresql://postgres.ogjzpfajpeprnbwmyoxw:[YOUR-PASSWORD]@aws-0-ap-northeast-2.pooler.supabase.com:5432/postgres"
//예시 :
DATABASE_URL="postgresql://postgres.ogjzpfajpeprnbwmyoxw:1234512345toto@aws-0-ap-northeast-2.pooler.supabase.com:5432/postgres"
§만약 password 까먹었거나, 재설정 필요한 경우, supabase 사이트 다시 들어가, 맨마지막 탭의 'project settings' > 'Database Stettings'항목의 Database password 항목으로 password 재설정 가능하다.
○ 순서7_ 다시 VsCode로 접속해, 터미널 창을 열어서, 아래의 명령어 순으로 의존성 설정
- 터미널 서버 초기화 작업 :
npx prisma generate
rm -rf node_modules package-lock.json
npm install
- supabase에다가 테이블 push하기
npx prisma db push
- supabase에 초기 데이터들 삽입하기
npm run seed
○ 순서8_ 이제 백엔드를 빌드하고, 실행해보기 => 이제 Localhost에서 api를 열고 확인이 가능해진다.
npm run build
npm run start
http://localhost:12345/api
● 참고1) 다른 방법으로 api 사이트 열어보기 : vsCode의 터미널 창에 아래와 같은 명령어 작성
npx prisma studio
● 참고2) 순서7에서 supabase와의 연동이 되지 않았을 시, 참고할 해결방법 :
Prisma가 Supabase의 PostgreSQL 데이터베이스에 연결하지 못하는 오류입니다.
🔍 가능한 원인과 해결 방법
1️⃣ Supabase 데이터베이스가 실행 중인지 확인
Supabase 데이터베이스가 일시적으로 다운되었거나 중지된 경우 발생할 수 있습니다.
✅ 해결 방법:
- Supabase 콘솔에 로그인
- 해당 프로젝트 선택
- Database → Status에서 DB가 정상적으로 실행되고 있는지 확인
- Paused(중지됨) 상태라면 "Start" 버튼을 눌러 실행
2️⃣ 네트워크 문제 확인
로컬 환경에서 외부 PostgreSQL 서버(Supabase)에 접속하려면 네트워크 상태가 중요합니다.
✅ 해결 방법:
- 인터넷 연결 확인
- 터미널에서 PostgreSQL 연결 테스트
- 응답이 오면 서버에 연결할 수 있음
- 응답이 없으면 Supabase 서버 문제이거나 인터넷 문제
- ping aws-0-ap-northeast-2.pooler.supabase.com
- 직접 DB 연결 확인
- psql: could not connect to server 에러가 발생하면 Supabase DB가 다운되었거나 방화벽 문제
- psql "postgresql://postgres.ogjzpfajpeprnbwmyoxw:junkim9612to@aws-0-ap-northeast-2.pooler.supabase.com:5432/postgres"
3️⃣ Supabase의 네트워크 및 방화벽 설정 확인
Supabase는 기본적으로 퍼블릭 데이터베이스 접근을 허용하지 않습니다.
✅ 해결 방법:
- Supabase 프로젝트로 이동
- Database Settings → Connection Pooling 확인
- SSL/TLS 설정 확인
- Prisma의 DATABASE_URL에 ?sslmode=require를 추가하여 SSL 연결 시도:
DATABASE_URL="postgresql://username:password@host:port/dbname?sslmode=require"
- 예시:
DATABASE_URL="postgresql://postgres.ogjzpfajpeprnbwmyoxw:junkim9612to@aws-0-ap-northeast-2.pooler.supabase.com:5432/postgres?sslmode=require"
4️⃣ 비밀번호가 변경되었는지 확인
만약 Supabase에서 DB 비밀번호를 변경한 경우 .env의 DATABASE_URL이 유효하지 않게 됩니다.
✅ 해결 방법:
- Supabase 콘솔 → Database → Connection Info에서 새로운 비밀번호 확인
- .env 파일의 DATABASE_URL을 최신 비밀번호로 업데이트
5️⃣ Prisma 캐시 삭제 후 재설정
기존 설정이 잘못 저장되었을 수도 있습니다.
✅ 해결 방법:
rm -rf node_modules/.prisma
npx prisma generate
6️⃣ 로컬에서 Supabase 연결 테스트
만약 로컬 환경에서 Prisma로 연결이 안 된다면,
직접 psql로 접속이 가능한지 테스트하세요.
psql -h aws-0-ap-northeast-2.pooler.supabase.com -U postgres -d postgres -p 5432
비밀번호 입력 후 접속할 수 있으면 Prisma 설정 문제일 가능성이 높습니다.
🔥 정리
- Supabase DB가 실행 중인지 확인
- 네트워크 연결 및 방화벽 문제 확인
- Supabase의 Connection Pooling 및 SSL 설정 확인
- .env에 올바른 비밀번호 및 SSL 설정 추가
- Prisma 캐시 삭제 후 다시 npx prisma generate 실행
이 방법들을 하나씩 시도해 보고, 그래도 문제가 있다면 추가적인 로그를 공유해 주세요! 😊🚀