์์ดํฐ ์ฒ์ง์ธ ํค๋ณด๋์์ "์ ์" ๋ผ๋ ๊ธ์๋ฅผ ์ ๋ ฅํ ๋, "์ต" -> "์ แแ" -> "์ แแข" ์ด๋ ๊ฒ ์ ๋ ฅ์ด ๋๋๋ฐ ํ๊ธ๋ง ๋์ํ๊ธฐ ์ํด ๋ฃ์ด๋์๋ regex ๊ฐ ๋์ํ๋ฉด์ ๊ธ์๋ฅผ ์ง์๋ฒ๋ฆฌ๋ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค.ย [๊ธฐ์กด Regex]return target.replace(/[^๊ฐ-ํฃใแแขใฑ-ใ ใ -ใ ฃa-zA-Z\s]/g, '');ํ๊ธ, ์์ด๊ฐ ์๋ ๋ฌธ์๋ ์ ๊ฑฐํ๊ธฐ ์ํ regex ์ ๋๋ค.ย [์ด์ ์์ธ]ย ์ข ์ฑ ์์๊ณผ ใแแข ๊ฐ์ ์ฒจ์๊ฐ ํฉ์ณ์ง๋ฉด์ ์๋ก์ด ์ ๋์ฝ๋ ๋ฌธ์๋ฅผ ๋ง๋ญ๋๋ค.ย [๋ณ๊ฒฝ๋ Regex]/*** ์์ดํฐ ์ฒ์ง์ธ์ ๋์ํฉ๋๋ค.* \u1100-\u1112 ์์ ใฑ-ใ * \u318D\u119E\u11A2\u2022\u2025\u00B7\uFE55 - ใแแขโขโฅยท๏น*/ret..
์ค๋์ Next JS์์ Client Data fetching ์ฌ์ฉ ์ ๋ง์ฃผํ ์ ์๋ Anchoring ์ด์์ ๋ํด ์ ๋ฆฌํ๋ ค ํฉ๋๋ค. Next JS docs์์ ๊ถ์ฅํ๊ณ ์๋ ์ฝ๋ ์คํ์ผ์ ์ ์ฉํ์ ๋ ์๊ธธ ์ ์๋ ์ด์์ด๊ธฐ ๋๋ฌธ์, ๊ด๋ จ ์ด์๊ฐ ์๊ฒผ์ ๋ ์ ๋ ๋๋ฒ๊น ์ ์๊ฐ์ ๊ฝค๋ ์ผ์ต๋๋ค. ๋จผ์ Next JS์ Data fetching์ ๋ํ ์ง์์ด ์ ๋ฌดํ ๋ถ๋ค์ ์ํด ๊ฐ๋ ๋ถํฐ ์ ๋ฆฌํ๊ณ ์ด์์ ๋ํ ํด๊ฒฐ ๊ณผ์ ์ ์ฐจ๋ก๋ก ์ ์ด๋ณด๊ฒ ์ต๋๋ค. Data fetching Next JS๋ฅผ ์ด์ฉํ Data fetching์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์! getStaticProps / getServerSideProps : Server Side์์ ๋ฏธ๋ฆฌ page h..
๊ฐ๋ฐ์ ์งํํ๋ฉด์ ์๋๋ก์ด๋ OS์์ ๋ค์ด๋ฒ ์ฑ์ ์ฌ์ฉํ ๋ (ํน์ ์๋๋ก์ด๋ ๋ฒ์ - ์๋ง๋ 11 ์ด์ ์์๋ง) flex ๋ ์ด์์์ด ๊นจ์ง๋ ์ด์๊ฐ ๋ฐ์ํ์๋ค. css๋ฅผ ๋ค๋ฐฉ๋ฉด์ผ๋ก ๊ณ ์ณ๋ณด๋ฉด์ ํด๊ฒฐํด๋ณด์๋๋ฐ, ์์ธ์ 'flex-shrink๋ฅผ ์ง์ํ์ง ์๋ ๊ฒ'์ด์๋ค. (caniuse) ๋ฐ์ํ ์น์ ๊ตฌ์ถํ ๊ฒฝ์ฐ ํด๋น ์ฌ๋ก๋ฅผ ํผํ๊ธฐ ์ํด css ์ฝ๋์ flex-shrink ์ฌ์ฉ์ ์ง์ํ๋๋ก ํ์.
๋ฌธ์ ์ํฉ next/link๋ฅผ ์ฌ์ฉํ GNB์ mouseEnter event๊ฐ ์๋ํ์ง ์์์ ๋ฉ์ธ ๋ฉ๋ด์ ๋ง์ฐ์ค๋ฅผ ์์ง์ฌ๋ subMenu๊ฐ ๋ฐ๋์ง ์๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ์์ธ GNB์์ ์ฌ์ฉํ๋ LinkContext์ SuperLink๋ฅผ next/link๋ก ์ฒ๋ฆฌํ๋๋ฐ, next 12 version์์ mouseHover ์ด๋ฒคํธ๊ฐ ์ ๋๋ก ์๋ํ์ง ์๋ ๋ฌธ์ ๊ฐ ์๋ค. fix(Link): Do not ignore onMouseEnter prop with absolute href by ericmatthys ยท Pull Request #32012 ยท vercel/next.js Fixes #22733 Regardless of whether it's recommended that Link be used with e..
์์ฝ css ๋ด๋ถ์ font asset์ ๋ฐ์์ค๋ path๋ฅผ ์ ๋๊ฒฝ๋ก๊ฐ ์๋ ์๋๊ฒฝ๋ก๋ก ๋ฐ๊พธ๋ฉด ๋๋ค. ๋ฌธ์ css์ url๋ก ์ ์ํด ๋ font asset์ด ๊ฐ๋ฐ๋ชจ๋(dev)์์๋ ์ ์ ์ฉ๋๋ค๊ฐ ์ค์๋ฒ(production)์์ ๋ฐ์๋์ง ์๋ ์ด์ ์ค์ ๊ตฌํ /* style.css */ @font-face { font-family: spoqaSansNeo; font-weight: 700; src:url('/font/SpoqaHanSansNeo-Bold.ttf'); src: url('/font/SpoqaHanSansNeo-Bold.otf') format("opentype"), url('/font/SpoqaHanSansNeo-Bold.ttf') format("truetype"); } /* next.config..
React array state๊ฐ ๊ฐฑ์ ๋์ด๋ view๊ฐ ๋ฐ๋์ง ์์ ๋ const [members, setMembers] = useState([]); const deleteMember = (index: number) => { // member ์ญ์ const tmp = members; tmp.splice(index, 1); setMembers(tmp); } return( { members.map((member: string, index: number) => {member} } ); members๋ผ๋ Array state์ ๊ฐ ํ๋๋ฅผ ์ญ์ ํ๋ ํจ์์ด๋ค. ํด๋น ํจ์๋ฅผ ์คํํด๋ ํ์๋๋ ํ์์ด ๋ณํ์ง ์๋ ์ด์๊ฐ ๋ฐ์ํ๋ค. ํ์ง๋ง ๊ฐ๋ฐ์๋๊ตฌ๋ฅผ ํตํด์ ๋ณด๋ฉด ๋ถ๋ช ํด๋น ์ปดํฌ๋ํธ์ members State๋ ๋ณ๊ฒฝ๋..
์ฟ ํค๊ฐ ๋ฐ๊ธ๋์ง ์์ ๋ KOS ํ๋ก์ ํธ๋ ํ๋ก ํธ์๋์ React.js๋ฅผ ์ฌ์ฉํ๊ณ ์๋ฒ๋ go lang ๋ผ์ด๋ธ๋ฌ๋ฆฌ gin์ ์ด์ฉํ์ฌ ์งํ์ค์ด๋ค. ์ฒ์์ api๋ฅผ ๋ง๋ค๊ณ ๋์๋ postman์ด๋ผ๋ ํด๋ก ์ ๋๋ก ๋์ํ๋์ง ๊ฒ์ฌํ๋ค. ์ฒ์์๋ api์ฐ๊ฒฐ์ด ์์กฐ๋กญ๊ฒ ๋๋ค๊ฐ ๋ก๊ทธ์ธ์ ์ํด์ ์ฟ ํค๋ฅผ ๋ฐ๊ธํ๋ api๋ฅผ ์์ฑํ ์ดํ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ฟ ํค๊ฐ ๋ฐ๊ธ๋์ง ์๋๋ค. ํ๋ก ํธ์๋์์ ๋ฐ์ Network๋ 200์ผ๋ก ์ ์์ด๊ณ set-cookie๋๋ ๊ฒ๊น์ง ๋ณด์ด๋ฉฐ response๋ฅผ ์ถ๋ ฅํด๋ณด์๋ ์ ์์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ฟ ํค๊ฐ ๋ฐ๊ธ๋์ง ์์๊น? ๋ฐฑ์๋์์ ํ๋ก ํธ์๋์ ์ฟ ํค๋ฅผ ์ ์ฅ์ํค๊ธฐ ์ํด์๋ ์์ชฝ์ credential ์์ฑ์ ๋ชจ๋ ON ํด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋จผ์ ๋ฐฑ์๋(go lang)์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. // ..
ํ๋ก ํธ์์ 2๊ฐ์ง ํธ์ถ api๋ฅผ ๊ฐ์ ํจ์์ ๋๊ณ ๋์์ ํธ์ถํ์๋๋, ์๋ฒ์์ ๋ท ์์๋ก ํธ์ถ๋ api ์คํ ์ No database selecte error ๊ฐ ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ : gorm.DB์ ์๋ sql.DB์ SetMaxOpenConns ํจ์๋ฅผ ์ด์ฉํ์ฌ, ๋์์ ํ์ฉ ๊ฐ๋ฅํ ์ต๋ ์ปค๋ฅ์ ๊ฐ์๋ฅผ ์ ํํด์ฃผ์ด์ผํ๋ค. Config.DB, err = gorm.Open(mysql.Open(Config.DBURL(Config.BuildDBConfig())), &gorm.Config{}) if err != nil { fmt.Println("Status: ", err) return } // ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ค๋ค. db, err := Config.DB.DB() if err != nil { fmt.Print..
Comment