Side Project 6

MySQL에서 Supabase로 마이그레이션하기

들어가며 사이드 프로젝트에서 DB 플랫폼으로 PlanetScale을 사용하고 있었는데요. 이번에 무료 플랜이 사라진다고 하여 대안인 Supabase로 마이그레이션 하게 되었습니다. 왜 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 Supabase is an open source Firebase alternative. Start your pro..

Side Project 2024.03.30

검색어 자동 완성 기능 구현하기

들어가며 이번에는 검색어 자동 완성 기능을 구현해 보겠습니다. 기능 기능은 크게 세 가지로 나눌 수 있습니다. 1. 검색어를 입력하면 해당 글자를 포함한 상품이 있는 경우 리스트로 표시해 줍니다. 2. Tab키, 위 방향키, 또는 아래 방향키를 눌러 리스트 내에서 움직일 수 있습니다. 현재 선택한 아이템을 표시해 주며,검색창에 이름이 입력됩니다. 3. 엔터키를 누르거나, 리스트 아이템을 클릭하면 해당 검색 결과로 이동합니다. 동작 과정 전체적인 동작 과정은 다음과 같은 모습입니다. 구현 예시 코드 아래는 구현 예시 코드입니다. import { useRouter } from 'next/router'; import { ChangeEvent, KeyboardEvent, MouseEvent, useEffect,..

react hook form에서 이벤트 사용하기

들어가며 이번에 사이드 프로젝트를 진행하며 겪은 문제에 대해 얘기해 보고자 합니다. 폼을 구현하기 위해 react hook form을 사용했는데요. input에는 onBlur, onChange, onClick, onKeyDown 이벤트를 사용했습니다. 다음과 같은 형태였죠. ; 문제 문제는 폼 제출이 안 된다는 겁니다. 응?? 이벤트에 무슨 문제가 있나 싶어 하나씩 지워보며 확인한 결과 onChange를 지웠더니 정상 작동이 되는 걸 확인했습니다. 이상한 점은 onChange 이벤트 핸들러 내부 로직을 지우고 등록만 해도 문제가 발생했다는 거죠. 솔루션 이곳저곳 찾아보니 다음과 같은 내용을 발견할 수 있었습니다. react hook form Ver 7.16부터는 onBlur와 onChange 핸들러를 r..

onBlur 이벤트와 마우스 이벤트

들어가며 이번에 사이드 프로젝트를 진행하며 겪은 문제에 대해 얘기해 보고자 합니다. 검색어 자동 완성 기능을 구현하는 게 목표였는데요. 검색어를 입력하면 해당 글자를 포함한 상품이 있는 경우 리스트로 표시해 줍니다. 리스트 아이템을 클릭하면 해당 검색 결과로 이동합니다. 검색창 외부를 클릭하면 onBlur 이벤트가 발생해 리스트가 사라지도록 했는데요. (onBlur 이벤트는 요소가 포커스를 잃었을 때 발생합니다.) 문제 문제는 리스트 아이템을 클릭할 때도 onBlur 이벤트가 발생해 리스트가 사라지고 검색 결과로 이동하지 않았습니다. 왜 이런 일이 발생한 걸까요? 마우스 클릭 이벤트에 대해 살펴보겠습니다. 마우스 클릭 이벤트는 크게 세 단계로 발생합니다. onMouseDown -> onMouseUp ->..

Vercel producton 모드 - nodemailer 이메일 전송 문제

들어가며 사이드 프로젝트를 진행하며 겪었던 문제에 대해 얘기해 보고자 합니다. Next.js를 이용한 프로젝트였는데요. 계정 등록을 할 때 해당 유저에 대한 인증이 필요했고, Nodemailor를 이용해 이메일 인증을 진행하기로 했습니다. 문제 순조롭게 진행이 되는 거 같았느니 예상치 못한 곳에서 문제가 발생했습니다. 분명 개발 모드에서는 정상적으로 작동했는데 프로덕션 모드에서는 이메일 전송이 안 되는 겁니다. 솔루션 구글링을 한 결과 다음과 같은 내용을 발견할 수 있었습니다. This problem is really confusing indeed. I've managed to fix this by simply adding async/await. This is because streaming respon..

Nodemailer를 사용해 이메일 인증 구현하기

들어가며 오늘은 nodemailer를 사용해 이메일 인증을 구현해 보겠습니다. nodemailer는 Node.js 애플리케이션에서 이메일을 쉽게 보낼 수 있도록 해주는 모듈입니다. Next.js를 사용한 프로젝트에서 진행했습니다. Nodemailer :: Nodemailer Nodemailer Nodemailer is a module for Node.js applications to allow easy as cake email sending. The project got started back in 2010 when there was no sane option to send email messages, today it is the solution most Node.js users turn to by de..