label๊ณผ input์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ ๋ ๊ฐ์ง๊ฐ ์๋ค. ๋ ๋ค ์๊ณ ์์์ง๋ง ์ ํํ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ๋ชฐ๋ผ์ ์ด๋ฒ์ ์ ๋๋ก ์ ๋ฆฌํด๋ณด์๋ค. ๋๋ ์ฃผ๋ก ๋ช ์์ ์ฐ๊ฒฐ๋ก๋ง ์ฌ์ฉํด์์๋๋ฐ, ์ํฉ์ ๋ฐ๋ผ ๊ณจ๋ผ์ฐ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค. ๋ ๊ฐ์ง ๋ฐฉ์ ์๋ฌต์ ์ฐ๊ฒฐ (Implicit
์๋ ์ a ์์ button ๋ฃ๊ณ JS ๋ก stopPropagation ํ๋๋ฐ, HTML ํ์ค ์๋ฐ์ด๋ผ๋ ๊ฑธ ์๊ฒ ๋๊ณ ๋ชจ๋ ํ์ค (Stretched Link) ์ผ๋ก ์ ๋ฆฌํด ๋ . ์นด๋๋ ์์ญ ์ ์ฒด๋ฅผ ํด๋ฆญ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ๋, a/button ์ผ๋ก ์ปจํ ์ธ ๋ฅผ ๊ฐ์ธ์ง ์๊ณ
ํผ๋ธ๋ฆฌ์ ๋ก ์ผํ๋ค๊ฐ ์ฒ์์ผ๋ก ๋ฐฑ์๋ ์ฝ๋๋ฅผ ๋ค์ฌ๋ค๋ณผ ์ผ์ด ์๊ฒผ๋๋ฐ, URL ์์ ๊ฐ ๋ฐ๋ ํจํด์ด ๊ณ์ ๋์์ ์ด๋ฒ์ ์ ๋๋ก ์ ๋ฆฌํด๋ดค๋ค.PHP ๊ฐ URL ์ ์ ๋ณด๋ฅผ ๋ฐ์์ ๋ณ์์ ๋ด๋ ํจํด ์ ๋ฆฌ? ๋ค๋ถํฐ = ์ฟผ๋ฆฌ์คํธ๋ง (query string)& ๋ก ์ฌ๋ฌ ํ๋ผ๋ฏธํฐ ๊ตฌ๋ถํ
ํ ๊ธ ์ค์์น ๊ตฌํ ๋ฐฉ๋ฒ ์ฐพ๋ค๊ฐ :checked ํดํน์ ์๊ฒ ๋๋๋ฐ, ํ ๊ธ๋ฟ ์๋๋ผ ํญยท๋ชจ๋ฌยท์์ฝ๋์ธ๊น์ง ๊ฐ์ ์๋ฆฌ๋ก ๋ง๋ค ์ ์๊ธธ๋ ์ ๋ฆฌํด๋ณด์๋ค.input์ :checked ์ํ๋ CSS ํ์ ์ ํ์(+, ~)๋ง์ผ๋ก JS ์์ด ํ ๊ธ, ํญ, ๋ชจ๋ฌ, ์์ฝ๋์ธ์ ๋ง๋ค ์ ์
ํ์ผ๋ช ์ ๋์๋ฌธ์๋ง ๋ณ๊ฒฝํ์ ๋ Git์ด ๋ณ๊ฒฝ์ฌํญ์ ๊ฐ์งํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์์ธ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๋ค. ๋ฌธ์ ์ํฉ CSS ํ์ผ๋ช ์ด Main.css๋ก ๋์ด ์์ด ์๋ฌธ์ main.css๋ก ๋ฐ๊พธ๋ ค๊ณ ํ๋ค. ์๋ํฐ๋ ํ์๊ธฐ์์ ์ด๋ฆ๋ง ๋ฐ๊พผ ๋ค Git ์ํ๋ฅผ ํ์ธํ
์ฌ์ค ํ์์ <form> ํ๊ทธ๋ฅผ ์ ์ ์ผ๋ค. ๋ก๊ทธ์ธ์ด๋ ๊ฒ์์ด๋ ๊ทธ๋ฅ <div>๋ก ๊ฐ์ธ๊ณ ๋ฒํผ์ ์ด๋ฒคํธ ๊ฑธ์ด์ JS๋ก ๊ฐ ๊ธ์ด ๋ณด๋ด๋ ์์ด์๊ณ , ๋์์ ์ ๋๋๊น ๊ตณ์ด form์ ์จ์ผ ํ ์ด์ ๋ฅผ ๋ชป ๋๊ผ๋ค.๊ทธ๋ฌ๋ค ์ต๊ทผ์ ๋ ๊ฑฐ์ ํ์ด์ง ๋ฆฌ๋ด์ผ ์์ ์ ํ๋ฉด์
๋๊ธ, ์ฑํ , ๋ฆฌ๋ทฐ์ฒ๋ผ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์คํธ๋ฅผ ๊ณ ์ ํญ ๋ฐ์ค ์์ ๋ณด์ฌ์ค์ผ ํ ๋, ๋์ด์ฐ๊ธฐ ์์ด ๊ธธ๊ฒ ๋ถ์ฌ ์ด ๋ฌธ์์ด(์: URL, ์ฐ์๋ ์๋ฌธ/์ซ์)์ด ๋ ์ด์์์ ๋ฐ์ด๋ด๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค.์ด๊ฑธ ํด๊ฒฐํ๋ ค๊ณ ๊ฒ์ํ๋ฉด word-break, overflow-wrap, wor
Laravel์์ HTML์ ๋ง๋ค์ด์ฃผ๋ ํ ํ๋ฆฟ ์์ง.ํ์ผ ํ์ฅ์๋ .blade.phpHTML ์์์ @๋ฌธ๋ฒ, {{ }}๋ฅผ ์ฌ์ฉํด ์๋ฒ ๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ค. ํผ๋ธ๋ฆฌ์ ์ ์ฅ์์๋"ํ๋์ฝ๋ฉ HTML โ ๋ฐ์ดํฐ ๊ธฐ๋ฐ UI๋ก ๋ฐ๊พธ๋ ๊ณผ์ "์ด๋ผ๊ณ ๋ณด๋ฉด ์ดํด๊ฐ ์ฝ๋ค.์์:
iframe์ ์๊ฐ๋ณด๋ค ์์ฃผ ๋ณด์ด์ง๋ง,๋ง์ ์ง์ ๋ค๋ฃจ๋ ค๊ณ ํ๋ฉด ๋์ด ๋ฌธ์ ๋ ๋๋ฉ์ธ ์ ์ฝ ๋๋ฌธ์ ๊ฝค ๊น๋ค๋ก์ด ํ๊ทธ๋ค.ํนํ ๊ทธ๋ฅ ๋ถ์ฌ ๋ฃ๊ธฐ๋ง ํ๋ฉด ๋๋ ์ค ์์๋ค๊ฐ๋์ด๊ฐ ์ ๋ง๊ฑฐ๋, ๋ด๋ถ ํ์ด์ง์ ์ ๊ทผ์ด ์ ๋๊ฑฐ๋, ๋ฐ์ํ ๋์์ด ๊ผฌ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.์ด๋ฒ ๊ธ์ ์ค๋ฌด์์ i
๋ชจ๋ฐ์ผ ๊ฒ์ ํ์ด์ง์์ ๊ฒ์์ฐฝ์ด ์๋ ๋ค๋ฅธ ์์ญ(์ค์์ดํผ, ๋น ๊ณต๊ฐ ๋ฑ)์ ํฐ์นํด๋ ํค๋ณด๋๊ฐ ์ฌ๋ผ์๋ค.document ์ ์ฒด์ touchstart ์ด๋ฒคํธ๋ฅผ ๊ฑธ์ด์ ๊ฒ์์ฐฝ์ .focus()๋ฅผ ์ฃผ๊ณ ์์๋ค.์๋๋ iOS ๋์์ด์๋ค. iOS์์๋ ์ฌ์ฉ์ ์ ์ค์ฒ ์์ด ํธ์ถํ .
๋ชฉ๋ก UI๋ฅผ ๊ตฌํํ๋ค ๋ณด๋ฉด ๋ฐ์ดํฐ ๋ก๋ฉ ๋์ ํ๋ฉด์ด ๋น๊ฑฐ๋ ๋ ์ด์์์ด ๋ฐ๋ฆฌ๋ ์ํฉ์ ์์ฃผ ๋ง์ฃผ์น๋ค.์ค์ผ๋ ํค UI(Skeleton UI)๋ ๊ทธ ์๊ฐ์ ์ฑ์ฐ๊ธฐ ์ํ ๋ก๋ฉ ํจํด์ผ๋ก, ์ค์ ์ฝํ ์ธ ์ ๋น์ทํ ํํ์ ํ์ ๋ธ๋ก์ ๋จผ์ ๋ณด์ฌ์ค๋ค.๋ผ๋(skeleton)๋ง ๋จผ์ ๊ทธ๋ ค๋
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ typescript์ next.js๋ฅผ ์ ๋ชฉ์์ผ์ ์ฝ๋๋ฅผ ์ง๊ณ ์๋๋ฐ, ๊ฐ๋์ฉ ๋๋ํ๊ฐ ๋์๋ค. ๋ด๊ฐ ์๋ ๋๋ํ๋ ๋ถ๋ฑํธ์ ํจ๊ป ์์ ์ฌ์ฉํ๋ not์ ์๋ฏธ๋ฐ์ ๋ชฐ๋๋๋ฐ, ๋๋ฌธ๋๋ฌธ ๋ค์ ๋๋ํ๊ฐ ์ฐํ๋ ๊ฒ์ด๋ค. ์ ๊ฒ ๋ญ๊น ์ ๊ฒ ๋ญ
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ createObjectURL URL.createObjectURL์ ๋ธ๋ผ์ฐ์ ์์ ๋ก์ปฌ ํ์ผ์ ๋ก๋ํ์ฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๋ค. ๋ธ๋ผ์ฐ์ ์์ ๋ก์ปฌ ํ์ผ์ ๊ฐ๋จํ ๋ก๋ ๊ฐ๋ฅ ์ด๋ฏธ์ง ํ์ผ์ ์ ๋ก๋ํ๊ธฐ ์ ์ ์ฌ์ฉ์์๊ฒ
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ .superRefine ctx.addIssue๋ฅผ ํตํด ์ํ๋ ๋งํผ ์ด์๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ํจ์ ์คํ ์ค์ ctx.addIssue๊ฐ ํธ์ถ๋์ง ์์ผ๋ฉด ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํต๊ณผ fatal: true ์ค์ ์, ๊ทธ ๋ค์ refine์ด ์คํ
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ Image ์ปดํฌ๋ํธ ๊ธฐ๋ณธ jsx img๊ฐ ์ง์ํ์ง ์๋ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ ฅํ๊ธฐ๋ฅ์ ์ง์ํ๋ค. ๋ก๋ฉ ์ ํ๋ก ์ปดํฌ๋ํธ ์์น๊ฐ ๋ฐ๋ฆฌ๋ content shift๋ฅผ ๋ฐฉ์งํ๋ค. ์์ถ๋ฅ ์ด๋, ํ๋ฉด ํฌ๊ธฐ๋ณ ์์ถ ์ต์ ์ ์ ๊ณตํ๋ค. ํ์ prop์ผ๋ก
๋ง ๊ทธ๋๋ก ์ค๊ฐ์์ ๋์ํ๋ ์ผ์ข ์ ์ํธํ์จ์ด๋ฅผ ๋ปํ๋ค. ์ด๋ค ๊ฒ๊ณผ ๋ค๋ฅธ๊ฒ ์ฌ์ด์์ ์คํ๋๋ ์ฝ๋.๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด request๊ฐ ์๋ฃ๋๊ธฐ ์ ์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.์ด๋ฏธ์ง, CSS, JS, Favicon ์์ฒญ ๋ฑ ์น ์ฌ์ดํธ์ ๋ชจ๋ ๋จ์ผ request ํ๋ํ๋ ๋ง
์ค๋ ๊ณต๋ถํ๊ฒ & ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ bcrypt ๋น๋ฐ๋ฒํธ๋ฅผ ํด์ํ ๋ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด์ํจ์๋ ๋จ๋ฐฉํฅ ๋ฉฑ๋ฑ์ฑ ํจ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ์ง ์๋๋ค.(ํดํน์ ์ํ์ฑ) ์ ํด์ง ์ ๋ ฅ์ ๋ฐ๋ผ ์ ํด์ง ๋์๋ฅผ ์ถ๋ ฅํจ bcryptํ๋ ์ด์ ๋ณด์์ ๋ฐ์ดํฐ๊ฐ
๋ฌธ์์ด ์ ํจ์ฑ ๊ฒ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌcoerce๋ ๊ธฐ๋ณธ ๊ฐ์ ๊ฐ์ ๋ก ๋ณํ๋ด์ฅ ์์ฑ์(String(input), Number(input), new Date(input) ๋ฑ))๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ ๋ ฅ์ ๊ฐ์ ํจinput์ ๊ฐ์ ํญ์ string์ผ๋ก ์ค๊ธฐ ๋๋ฌธ์ ์ ํ๋ฒํธ ๊ฐ์๊ฑด ๊ผญ n
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ด์์ ํต์ญ์ฌ ์ญํ ์ ํด์ฃผ๋ ๋๊ตฌ๋ด๊ฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ถฐ ํ์ํ ํ์ผ์ด๋ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ์๋์ผ๋ก ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ๋ง ์ ์ฉํจSQL์ ๋ชฐ๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ๋์์ค์ ๊ฐ๋ฐ ์ด๋ณด์์๊ฒ๋ ์ ์ฉํจ๋ฐ์ดํฐ๋ฒ ์ด์ค
Zod์๋ ๋ช ๊ฐ์ง ๋ฌธ์์ด ๊ด๋ จ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํฌํจ๋์ด ์๋ค.(https://zod.dev/?id=strings)๋ฌธ์์ด ์คํค๋ง๋ฅผ ๋ง๋ค ๋ ๋ช ๊ฐ์ง ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ง์ ํ ์ ์๋ค.const name = z.string({required_error: "Name์