이지폴보트(EasyPollVote)는 사용자가 투표를 생성하고 공유하여 익명으로 투표할 수 있도록 설계됨
Next.js + Supabase 템플릿을 기반으로 개발, GET/POST 요청을 통해 투표 데이터 관리
Supabase 데이터베이스에 이름, 이메일, 투표 항목을 저장하며, 중복 투표 검증은 미구현
투표 결과는 GET 요청으로 집계, 피카츄(Pikachu)와 블래스토이즈(Blastoise) 투표수를 표시
본문에서는 Supabase를 사용하여 투표 데이터를 저장하고 조회하는 과정을 설명한다.
POST 요청: 폼 데이터를 JSON 형식으로 변환하여 `/vote` 엔드포인트로 전송, 데이터베이스에 저장
GET 요청: `/vote` 엔드포인트에서 투표 데이터를 가져와 피카츄(Pikachu)와 블래스토이즈(Blastoise) 투표수를 집계
데이터 유효성 검사: 폼 제출 시 투표 항목 선택 여부를 확인, 미선택 시 에러 메시지 표시
Supabase는 PostgreSQL(PostgreSQL) 기반의 BaaS(Backend-as-a-Service)로, 개발자가 데이터베이스 관리 부담 없이 애플리케이션 로직에 집중할 수 있도록 돕는다.
글에서는 Next.js의 API 라우트(Route)를 사용하여 백엔드 로직을 구현하는 방식을 소개한다.
`/vote` 폴더 내 `route.ts` 파일에 GET/POST 요청 처리 로직 구현
GET 요청: 투표 결과를 집계하여 피카츄(Pikachu)와 블래스토이즈(Blastoise) 투표수를 계산
POST 요청: 폼 데이터를 받아 Supabase 데이터베이스에 저장
Next.js API 라우트는 서버리스(Serverless) 함수를 쉽게 배포할 수 있게 해주며, 프론트엔드(Frontend)와 백엔드(Backend) 간의 긴밀한 통합을 가능하게 한다.
본문에서는 useEffect 훅(Hook)을 사용하여 투표 결과를 가져와 화면에 표시하는 방법을 설명한다.
useEffect 훅(Hook): 컴포넌트 마운트(Mount) 시 `/vote` 엔드포인트에 GET 요청을 보내 투표 데이터 가져오기
데이터 처리: 가져온 데이터를 피카츄(Pikachu)와 블래스토이즈(Blastoise) 투표수로 집계
상태 관리: useState 훅(Hook)을 사용하여 투표수 및 로딩 상태 관리
이러한 방식은 클라이언트 사이드 렌더링(Client-Side Rendering)을 통해 사용자에게 실시간으로 투표 결과를 보여준다.
이지폴보트(EasyPollVote) 개발 과정에서 몇 가지 개선할 점이 존재한다.
중복 투표 방지: 현재는 중복 투표를 허용하므로, IP 주소, 쿠키(Cookie) 또는 사용자 인증(User Authentication)을 통해 방지 필요
데이터 유효성 검사 강화: 이메일 형식 검사 등 서버 측 유효성 검사(Server-Side Validation) 추가
사용자 인터페이스(UI) 개선: 투표 결과 시각화 및 사용자 경험(UX) 향상
이러한 개선 사항들을 통해 이지폴보트(EasyPollVote)는 더욱 안정적이고 사용자 친화적인 애플리케이션으로 발전할 수 있다.