μΈμ€νκ·Έλ¨ ν΄λ‘ νλ‘μ νΈ J-Stagram μ νΌλ νμ κ²μκΈ κΈ°λ₯μ λ§λλ κ³Όμ μμ, κ²μκΈ λ¦¬μ€νΈλ₯Ό λΆλ¬μ€λ κ²κΉμ§ μμ± ν ν΄λΉ κ²μκΈμ μμ±μλ₯Ό λΆλ¬μ€λ μμ μ μ§νμ€μ΄μλ€. μ΄λ₯Ό Supabase μ Admin API μΈ listUsers() λ₯Ό ν΅ν΄ νμ¬ κ°
Next.js νκ²½μμ Supabase μ μ€ν 리μ§λ₯Ό μ°κ²°νμ¬ νμΌμ λ‘λλ₯Ό νλ μμ μ μ§ννκ³ μμλ€. νμ§λ§ κ³μ 400 BadRequest κ° λ μ Supabase 곡μλ¬Έμ λ° μ¬λ¬ κ³³μμ κ²μμ ν΄λ³΄μμ§λ§ λͺ νν μμΈμ μ°Ύμ§ λͺ»νλ€β¦πνμΌμ μ νν ν βνμΌμ
μ¬λΌμ΄λ λ°°λλ₯Ό λ§λ€ λ, κ° μμ μΈλ€μΌ μ΄λ―Έμ§μ μμ μΆμΆν΄ λ°°κ²½μμ κΉμλ¬λΌλ λμμΈμ μμ²μ΄ μμλ€. κ·Έλμ λ°κ²¬ν κ²μ΄ ColorThief λΌλ λΌμ΄λΈλ¬λ¦¬..!ColorThief λ Javascriptλ§ μ¬μ©νμ¬ μ΄λ―Έμ§μμ μμ νλ νΈλ₯Ό κ°μ Έμ€λ λΌμ΄λΈλ¬λ¦¬λΌκ³
κ²μ AI κΈ°λ₯μͺ½μμ νμ¬ AI λ΅λ³ κ²°κ³Όλ 컨ν μΈ μ λ°λΌ λ¬Έλ¨μΌλ‘ λΆλ₯λμ΄ λ°μ΄ν°κ° λ΄λ €μ€λλ°, κ·Έ 컨ν μΈ μ title κ°μ νκΈ μ λͺ©μΌλ‘ μΉνν΄μΌ νλ€. κ·Έλμ redux μ state κ°μ νμ©νλ μ€ μλμ κ°μ useSelector λ₯Ό μ¬μ©ν μͺ½μμ μλ¬κ° λ°
κ²μ νμ΄μ§μμ νμ λλ₯Όλλ§λ€ κ·Έμ ν΄λΉνλ λ΄μ€ λͺ©λ‘μ΄ λμ€λλ‘ κ΅¬νμ€μ΄μλ€. κ·Όλ° μ¬κΈ°μ νλμ λ¬Έμ κ° λ°μνλλ°β¦βμ μ± λ΄μ€β λΌλ νμ λͺ©λ‘ api μμ² μκ°μ΄ λ€λ₯Έ νλ³΄λ€ μ€λκ±Έλ € μμ²μ€ λ€λ₯Έ νμ λλ₯΄λ©΄, λ€λ₯Έ νμ λͺ©λ‘ λ°μ΄ν°κ° λΏλ €μ§ κ·Έ μ΄νμ ν λ² λ
selectbox μ μ€νμΌμ μ£Όκ³ μΆμλ° Selectbox μ κ²½μ° selectbox νκ·Έλ₯Ό μ¬μ©νλ©΄ μ€νμΌμ 컀μ€ν νλλ° νκ³κ° μκΈ° λλ¬Έμ ul, li νκ·Έλ₯Ό μ¬μ©νμ¬ option μ ꡬννλλ± λ°λ‘ selectbox μ 체λ₯Ό μ§μ 컀μ€ν ν΄μ ꡬνν΄μ£Όμ΄μΌ νλ€.μ΄λ
μνμ΄λΌλ μλΉμ€μμ ν¨λνμμ κ°μ νλ 루νΈλ₯Ό μμ νκ³ μμλ€. ν¨λνμμ κ°μ νκΈ° μν΄μλ λ‘κ·ΈμΈ, λ³ΈμΈμΈμ¦ λ κ°μ§ 루νΈλ₯Ό κ±°μ³μΌ νλ€. λ‘κ·ΈμΈμ΄ μλ κ²½μ° λ‘κ·ΈμΈ νμ΄μ§λ‘ μ 리λ€μ΄λ νΈ λλλ°, λ³ΈμΈμΈμ¦μ κ²½μ° μΈμ¦ ν ν¨λ κ°μ νμ΄μ§κ° μλ
κ΄λ¦¬μ νμ΄μ§μ λ€μ΄λ‘λ κΈ°λ₯μμ νμ΄μ§μ λν κ°μΈ νλΌλ―Έν°(pageName)μ μΆκ°νλ μμ μ μ§ννλ€. κ° νμ΄μ§λ§λ€ 첨λΆνμΌμ λ€μ΄λ‘λ λ°μΌλ©΄ κ·Έ μ΄λ ₯μ΄ λ¨μ λ€μ΄λ‘λ μ΄λ ₯ νμ΄μ§ λͺ©λ‘μ λ±λ‘λλ κ³Όμ μ΄μλλ°, λ°±μλ κ°λ°μλΆμ΄ λ€μ΄λ‘λκ° λ°μνκ²
κ΄λ¦¬μ νμ΄μ§μμ 곡ν΅μΌλ‘ μ°μ΄λ ν€μλλ₯Ό κ΄λ¦¬νλ νμ΄μ§λ₯Ό μμ νλ€. μ£Όμ , μ₯λ₯΄, μ€λμ€λ‘ λλκ³ ν΄λΉ λΆλ₯μ λ°λΌ μ°μ΄λ ν€μλλ₯Ό μΆκ°νκ±°λ μμ ν μ μλ κΈ°λ₯μ΄λ©°, ν΄λΉ ν€μλλ€μ μ μμ μΌλ‘ λ€λ₯Έ νμ΄μ§μλ μ μ©μ΄ λλ€.κΈ°μ‘΄ λ°μ΄ν°λ‘ λ°μ
μ΄λλ―Ό νλ‘μ νΈμμ 곡μ§μ¬νμ λ±λ‘νλ νμ΄μ§λ₯Ό μμ μ€μ΄μλ€. νΌ μμ μ§νμ€ μλν°λ ꡬνν΄μΌνκ³ , MUI λΌμ΄λΈλ¬λ¦¬μμλ λ°λ‘ μλν° κΈ°λ₯μ΄ μ 곡λμ§ μμλ€. κ·Έλμ μ°Ύμ보λ λμ€ ReactQuill λΌλ ν΄μ μκ²λμ΄ μ μ©ν΄λ³΄κΈ°λ‘ νλ€.λλ νμ¬ react-hoo
μΈμ€νκ·Έλ¨ ν΄λ‘ μ½λ©μ νλ μ€, μλ¦Ό νμμ μ€λ λ μ§μ ν΄λΉνλ 컨ν μΈ λ₯Ό νν°λ§ ν΄μ νμνλ μμ μ νκ³ μμλ€. data μ map μ λλ € μ€λ λ μ§μ ν΄λΉλλ 컨ν μΈ λ©΄ todayAlarm μ΄λΌλ state λ°°μ΄μ λ΄μμ§λ κ΅¬μ‘°λ‘ μ½λλ₯Ό ꡬννλλ°, μ€λμ ν΄
λ¨μν νΌλΈλ¦¬μ± μ 무λ₯Ό λ§‘κ² λμ΄ μμ μ€, κΈ°νμλΆκ»μ μμ μ μ리μμ λ‘컬νλ©΄μ λ³΄κ³ μΆλ€ νμ ¨λ€. μ΄μ κΉμ§ 리μ‘νΈλ λ·° νκ²½μμ μμ μ νλ€κ°, μΌλ° HTML/CSS/JavaScript κ°μ΄ μ μ νμΌλ‘λ§ κ΅¬μ±λ μνμμ λ‘컬 νλ©΄μ 곡μ λ리λ κ²μ μ²μμ΄μλ€.ip μ£Ό
νμ¬ λ¦¬μ‘νΈ νκ²½μμ μΈμ€νκ·Έλ¨ ν΄λ‘ μ½λ© μ€μ΄λ€. μΈμ€νκ·Έλ¨ λ©μΈ κ²μκΈμ βλ보기β λ²νΌμ λλ₯΄λ©΄ νμ μ΄ λμ€λλ°, κ±°κΈ°μ βκ²μκΈλ‘ μ΄λβ μ λλ₯Ό μ μμΈνμ΄μ§λ‘ μ΄λνλλ°, μ΄ λΆλΆμ ꡬννλ €νλ€.νμ§λ§ κ²μκΈ μμΈλ λ κ°μ§μ ννλ₯Ό λλ€. ν΄λΌμ΄μΈνΈ νκ²½μμ
κ°μΈνλ‘μ νΈ μ€, μμλ‘ ν¬μ»€μ±μ μ£Όλ μμ μ΄ νμνλ€. β λκΈ μμ΄μ½μ ν΄λ¦νλ©΄ μλ λκΈ νΌμ΄ ν¬μ»€μ± λλλ‘μμ μ κ°λ¨νλλ°, useForm μ setFocus λ₯Ό μ¬μ©νλ©΄ λ μΌμ΄μλ€. νμ§λ§ μ΄μ§ΈμμΈμ§ ν¬μ»€μ±μ΄ λμ§ μμκ³ , useRef κΉμ§ μ¬μ©νλλ°λ ν¬μ»€
μΈμ€νκ·Έλ¨ ν΄λ‘ μ½λ© νλ‘μ νΈ μμ μ€, λ보기 λ²νΌμ ν κΈ ν΄λ¦μ λ©λ΄μ°½μ΄ λ¨κ³ λ«νλλ‘ λ§λ€μ΄λμ μνμ΄λ€. μ¬κΈ°μ λλ λ©λ΄μ°½ μΈμ μμμλ ν΄λ¦ν μ λ©λ΄μ°½μ΄ λ«νλλ‘ νκ³ μΆμ΄νλ€. μ°Ύλ λ΄μ©μ€, λ¨μνκ² μ 체μμμ νκ·Έλ‘ κ°μΌ ν ν΄λΉ μ μ νκ·Έμ onClick
next νλ‘μ νΈλ₯Ό μμνλ € μ΄κΈ° μΈν μ€, λ€μκ³Ό κ°μ eslint μλ¬ λ¬Έκ΅¬κ° λ΄λ€.μ΄κΈ° eslintrc.json λ λ€μκ³Ό κ°μ΄ μλμΌλ‘ μ€μ λμ΄μλ μν©μ΄λ€.next.js μ΄κΈ° μΈν (eslint, prettier) κ΄λ ¨ κΈμ μμΉνμλλ°, μμ λΆλΆλ§μΌλ‘ μλ²½νκ²
μ€ν¬λ‘€ κΈ°λ₯μ λ§μμΌνλ μν©μμ λλΆλΆμ body μ overflow-y: hidden μ μ£Όλ λ°©λ²μ΄ μ μλμ§λ§, κ·Έλ μ§ μμ κ²½μ° μλ°μ€ν¬λ¦½νΈλ‘ μ΄λ₯Ό μ²λ¦¬ν΄μΌνλ€.μ²μμ μλμ κ°μ΄ μ΄λ²€νΈλ₯Ό μ£Όμμ§λ§ μλνμ§ μμλ€ γ λλ²μ§Έ μλλ‘ μλμ κ°μ΄ λ€λ₯Έ μ΄λ²€νΈμλ μ
μ¬μ©μ μ λ ₯νΌμ μ¬λ¬ λ¨κ³λ‘ μμ±ν μ μλ λΆλΆμ λ μ΄μ΄ νμ μμΌλ‘ λμ΄μ§λκ²μ΄ μλ, λΈλΌμ°μ μμμλ λ€λ‘κ°κΈ°, μμΌλ‘ κ°κΈ°κ° κ°λ₯ν λλ©νμ΄μ§ νμμΌλ‘ λ§λ€κ³ μΆμλ€. μλμ κ°μ μ¬νλλ¬Έμ΄μλ€.4κ°μ νμ΄μ§λ‘ λΆλ¦¬νλ©΄ νμ΄μ§ μ΄λ μ μ΄μ μ μ λ ₯ν μ¬μ©μμ μ
μ΄λ―Έ ννμ΄μ§ μ€ν¬λ‘€μ΄ ꡬνλμ΄μλ μννΉμ νμ΄μ§λ΄μμ μ¬λΌμ΄λκ° μΈλ‘λ‘ μ€ν¬λ‘€λλ κ΅¬μ‘°λ‘ λ§λ€μ΄μΌ νλλ°, ννμ΄μ§ μ€ν¬λ‘€ κΈ°λ₯κ³Ό κ²Ήμ³ μ€ν¬λ‘€ μ΄λ²€νΈλ₯Ό ꡬννλλ° μ½μ§ μμλ€..ν΄λΉ νμ΄μ§μ λλ¬νλ©΄ body μ μ€ν¬λ‘€μ λ§μ ν μ¬λΌμ΄λλ₯Ό μ€ννκ² νκ³ , μ¬λΌμ΄λ
select λ°μ€μμ νλͺ©μ μ’ λ₯ κ°μλ₯Ό μ λ ₯νλ©΄, κ°μμ λ°λΌ input μΉΈμ΄ μΆκ°λλ κΈ°λ₯μ ꡬνν΄λ³΄μλ€. (νλͺ©μ 4κ°κΉμ§ μ λ ₯ κ°λ₯)κ°μλ₯Ό λ³κ²½μ, κ°μκ° μ μ΄μ§λ©΄ μ μ΄μ§ κ°μλ§νΌ λ€μμλΆν° input μμ , μ λ ₯κ°μ΄ κ°μ΄ μ μΆλ μ μμΌλ―λ‘ κ·Έμ λ°λ₯Έ valu