일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 카카오 Maps
- iCalendar
- 타로프로젝트
- vue 카카오 Maps API
- 프론트앤드개발
- Supabase
- 노마드코더
- node.js이메일보내기
- node.js 로그관리
- 데이터흐름설계
- book_club
- crud구현
- plugin
- supabase세션오류
- 프론트엔드
- corser챌린지
- jqueryplugin
- 노개북
- node메일보내기
- 개발자북클럽
- 웹개발
- nextjs15
- 개발회고
- niceselect사용법
- openai연동
- vue Maps API
- whispersofthestars
- 사이드프로젝트
- select플러그인
- book-club-it-dictionary
- Today
- Total
ㅇㅅㅇ
🌌 Whispers of the Stars | Next.js 15 + Supabase로 웹사이트 구현 3주차(5/5~5/9) 회고 본문
🌌 Whispers of the Stars | Next.js 15 + Supabase로 웹사이트 구현 3주차(5/5~5/9) 회고
소 아 2025. 5. 11. 08:00
📚 목차
🌟 이번 주 개요
이번 주는 OpenAI 및 날씨 API 연동을 통한 AI 기능 고도화, 기록 분석 기능 구현, 그리고 기존 기록 등록·목록·상세·수정 흐름의 UI/UX 보완 및 오류 해결에 집중한 한 주였습니다.
사용자 데이터 흐름을 연결하고 실제 리딩 → 저장 → 분석까지 확장할 수 있도록 기능 구조를 정리하고, 다양한 오류 해결 작업도 함께 진행했습니다.
🛠️ 작업 흐름 (일자별 순서 기반)
1. OpenAI API 연동한 타로 리딩 기능 구현
- 질문 유형과 카드에 따라 감성적인 해석을 생성하도록 GPT 프롬프트 구성
- 응답 결과를
sessionStorage
에 저장하고 기록 등록 페이지와 연결되는 구조 구현 - 라우터와 로딩 처리 등 사용자 경험 흐름까지 정리함
2. 날씨 API를 연동한 감성 메시지 출력 기능 구현
- 위치 기반 날씨와 시간대 조합에 따라 문장을 출력하는 로직 작성
- 프론트엔드에서 axios를 사용해 외부 API 호출
- 날씨 상태별 메시지를 조건에 맞게 구성하고, 시각적으로 출력되도록 처리함
3. 기록 등록/수정/상세/목록 기능 디벨롭
- 카드 선택 구조를 개선하고 이미지 업로드 처리 안정화
- 기록 등록 시 카드 연결, 해석 입력, 이미지 삭제 기능 보완
- 수정 시 초기값 상태를 정확하게 유지하도록 개선
- 상세 페이지에 카드 목록, 키워드, 후기 등 정보 출력 구조 설계
- 목록 페이지에 카테고리 필터, 검색 기능, 페이지네이션 기능 적용
4. 기록 분석 기능 구현 및 UI 제작
- 기간, 카테고리, 키워드 기준 필터 UI 작성
- 자주 등장한 카드, 키워드, 질문 유형 시각화 출력
- 카드 이미지와 분석 결과 스타일 구성 보완
- 시작일이 종료일보다 뒤에 올 수 없도록 유효성 검증 추가
🔍 문제 발생 및 해결 과정
🛠️ 문제 1. Supabase 세션 유지 오류
현상
로그인 후 새로고침 시 인증 세션이 유실되는 현상이 발생함
오류 코드
Failed to parse cookie string: [SyntaxError: Unexpected token b in JSON at position 0]
원인createBrowserSupabaseClient()
사용 시 쿠키 파싱이 올바르게 되지 않아 세션 유지가 불안정했음
해결 방법
createPagesBrowserClient()
로 전면 교체하여 세션 상태를 안정적으로 유지함- Supabase 대시보드에서 인증 리디렉션 URL 및 도메인 설정을 다시 점검함
🛠️ 문제 2. 카드 통계 출력 오류
현상
기록 분석 결과에서 카드와 키워드가 출력되지 않음
오류 코드
TypeError: Cannot read properties of undefined (reading 'name')
원인record_cards.cards
가 배열이 아닌 단일 객체 형태로 내려오는데, 이를 배열처럼 처리하면서 타입 에러가 발생함
해결 방법
const mainCardEntry = r.record_cards?.find((c) => !!c.cards);
const rawCard = mainCardEntry?.cards;
- 위와 같이 타입 가드 및 null 체크를 추가하여 안전하게 가공 처리함
🛠️ 문제 3. 관계형 쿼리 실패
현상
카드 데이터가 Supabase 관계형 쿼리에서 조회되지 않음
오류 코드
Could not find a relationship between 'record_cards' and 'cards' in the schema cache
원인record_cards → cards
관계가 누락되어 있었고, Supabase 스키마 캐시에도 반영되지 않았음
해결 방법
- Supabase 대시보드에서 FK(외래키)를 직접 재설정하고
- 아래 쿼리 형태로 관계형 데이터를 다시 가져오도록 구성함
.select("record_cards(card_id,cards(name,keywords,image_url))")
📦 현재까지 완성된 기능
- OpenAI 연동 기반 타로 해석 기능
- 날씨 기반 감성 메시지 출력 기능
- 카드 / 키워드 / 질문 통계 분석 기능
- 기록 등록 / 수정 / 상세 / 목록 흐름 구성 및 기능 디벨롭
- Supabase 인증 세션 유지 오류 해결
🌟 회고
이번 주는 단순한 기록 기능을 넘어서, AI 해석 기능과 분석 기능을 구현하며 서비스의 성격이 명확해진 한 주였습니다.
특히 사용자에게 감성적 해석을 제공하는 GPT 연동 기능과, 데이터 기반의 분석 기능을 함께 구축하면서 타로 기록의 확장 가능성을 확인할 수 있었습니다.
또한 예상치 못한 오류를 단순히 수정하는 데 그치지 않고, 타입 가드·쿼리 구조·인증 흐름까지 재설계하며 전반적인 구조 안정화를 경험할 수 있었습니다.
디버깅과 테스트를 반복하며 실제 사용자 경험과 데이터 흐름을 연결하는 프론트엔드 감각도 많이 키울 수 있었습니다.
🧩 요약
항목 | 결과 |
타로 리딩 AI 기능 | 구현 완료 |
감성 메시지 출력 기능 | 구현 완료 |
기록 분석 기능 | 구현 완료 |
기록 등록/수정/상세/목록 기능 | 디벨롭 완료 |
Supabase 세션 오류 해결 | 완료 |
✅ 최종 마무리
이번 주는 AI 기반 리딩 기능과 기록 분석 기능을 모두 완성하며, 단순 저장소에서 감정과 흐름을 해석하는 타로 저널 서비스로 전환할 수 있는 기반을 만들었습니다.
남은 기간에는 미션을 수행하면서 디자인 통일, 커뮤니티 기능, 검색·필터 기능 고도화 작업도 병행하여 마무리할 계획입니다.
'챌린지 모음 > Whispers of the Stars' 카테고리의 다른 글
🌌 Whispers of the Stars | Next.js 15 + Supabase로 웹사이트 구현 2주차(4/28~5/2) 회고 (1) | 2025.05.06 |
---|---|
🌌 Whispers of the Stars | Next.js 15 + Supabase로 웹사이트 구현 1주차(4/21~25) 회고 (0) | 2025.04.26 |