7. 모든 음식들을, 카테고리 별로, 태그 별로 검색되도록 구현하자
핵심 기능중 하나인 음식 페이지를 꾸며볼 차례입니다. 음식들을 카테고리별 (한식,양식,중식 ... ), 태그별로(매움, 짭짤, 달달 ...) 로 구분지어 볼 수 있어야 했습니다. 주요한 기능이기에, "느린 UX 보다는, 빠른 UX 가 필요했습니다." 로딩은 조금 있을지언정, 좋은 유저경험을 위해 getStaticProps 로 "사전 데이터 페칭을 진행했습니다" 1. AllFoodsPage 에, 사전 데이터 페칭을 해줍니다. 페칭된 데이터들을 음식들이 있는 컴포넌트로, 넘겨줍니다. import FoodCategoryHeader from "../../components/food-components/food-category-header"; import { connectDb, findAllFoods } from..
2022. 12. 2.
6. 로그인 기능 구현 with Next-Auth
로그인 기능은, 뭐먹지? 페이지에 반드시 필요한 기능이었습니다. 우선, 수많은 음식들 중, 내가 원하는 음식은 고작 수십가지! 회원 별로, 서로 다른 음식들을 "찜" 할 수 있어야 했습니다. Express 를 사용했을 때에는, connect-mongodb-session 패키지를 사용하여, DB 에, 유저의 정보를 저장, 로그인의 기능이 정상적으로 활용 되었을때, 유저들에게 auth 한 session 을 만들어주고, 클라이언트 사이드의 쿠키에 저장을 하여, 쿠키가 만료 될때까지, 자유로운 이동을 하게 하였다. Nextjs 에서는 JWT 를 이용하여, 로그인 한 유저에게, Json Web Token 을 발급한다. 토큰은, "서버에서 생성" 되며, 클라이언트에게 전달되고, 유저는 클라이언트 사이드 브라우저, ..
2022. 12. 2.
0. 내가 React, Nextjs 를 선택한 이유
한달 전, 첫 Express 와 바닐라 자바스크립트로, 쇼핑몰 사이트를 만들어 보았다. 처음 만들어 보는 페이지여서, 모양새는 빠졌지만, 그래도, 나름 괜찮다고 생각은 했다. 그런데 가장 큰 문제는 UX(유저 경험) 였다. 그때보다야 실력이 늘어난 지금, 충분히 더 나은 UI 를 꾸밀 수 있지만, UX 는 어떻게 하지 못했다. EXPRESS 의 한계 때문이었다. 속도는 상대적이다. NODEJS 역시, 충분히 괜찮은 구동환경이지만, SPA 를 활용한 라이브러리와는 속도 비교자체가 되지 않았다. 그래서 SPA 를 구현할 라이브러리를 선택하게 되었고, 가장 사용자가 많아, 커뮤니티가 활성화 되어있는, REACT 를 선택하였다. 나는 독학으로 공부중이다. 무엇보다 중요한 것이 "올바른 정보의 습득" 이다. VU..
2022. 12. 2.
4. 로그인, 회원가입 페이지 생성
로그인 페이지에는, 간단한 Form 만 작성합니다. 필요한 것은, Email, Password, 정도만 필요하기 때문에 간단하게 만들어줍니다. 후에, useState나, useRef 로 값들을 상태에 넣어, fetch 를 통해, 자체 API 에 요청하여. DB 안에 넣을 것입니다. 로컬 파일 내에, USERINFO 를 저장하면, 해킹의 위험이 있습니다. import styles from "./login-form.module.css"; import Link from "next/link"; import { useRef, useState } from "react"; function LoginForm() { const emailRef = useRef(); const passwordRef = useRef(); c..
2022. 12. 2.
3. Layout 구성하기
웹페이지에는, 기본적으로 Layout 즉, Footer와, Header 가, 필요하지유! Layout 컴포넌트를, 만들어서, "전체 애플리케이션의 바깥쪽에, 붙여줄겁니다" import "../styles/globals.css"; import Layout from "../components/ui/layout/layout"; function MyApp({ Component, pageProps: { session, ...pageProps } }) { return ( ); } export default MyApp; 이런식으로 말이지요! 그렇게하면, Layout 를 "전역" 에서 사용 가능할 겁니다. Layout 은 모든곳에 필요하니까요! 폴더를 만들어줍니다. 그리고 그곳에 레이아..
2022. 12. 2.