์•„์ดํฐ ์ฒœ์ง€์ธ ํ‚ค๋ณด๋“œ ์ด์Šˆ (แ„‹แ†ž, แ„‹แ†ข ๋Œ€์‘)
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2024. 4. 11. 11:21

์•„์ดํฐ ์ฒœ์ง€์ธ ํ‚ค๋ณด๋“œ์—์„œ "์œ ์š”" ๋ผ๋Š” ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, "์œต" -> "์œ แ„‹แ†ž" -> "์œ แ„‹แ†ข" ์ด๋ ‡๊ฒŒ ์ž…๋ ฅ์ด ๋˜๋Š”๋ฐ ํ•œ๊ธ€๋งŒ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ๋„ฃ์–ด๋‘์—ˆ๋˜ regex ๊ฐ€ ๋™์ž‘ํ•˜๋ฉด์„œ ๊ธ€์ž๋ฅผ ์ง€์›Œ๋ฒ„๋ฆฌ๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.ย [๊ธฐ์กด Regex]return target.replace(/[^๊ฐ€-ํžฃใ†แ†žแ†ขใ„ฑ-ใ…Žใ…-ใ…ฃa-zA-Z\s]/g, '');ํ•œ๊ธ€, ์˜์–ด๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๋Š” ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ regex ์ž…๋‹ˆ๋‹ค.ย [์ด์Šˆ ์›์ธ]ย ์ข…์„ฑ ์ž์Œ๊ณผ ใ†แ†žแ†ข ๊ฐ™์€ ์ฒจ์ž๊ฐ€ ํ•ฉ์ณ์ง€๋ฉด์„œ ์ƒˆ๋กœ์šด ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.ย [๋ณ€๊ฒฝ๋œ Regex]/*** ์•„์ดํฐ ์ฒœ์ง€์ธ์„ ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค.* \u1100-\u1112 ์ž์Œ ใ„ฑ-ใ…Ž* \u318D\u119E\u11A2\u2022\u2025\u00B7\uFE55 - ใ†แ†žแ†ขโ€ขโ€ฅยท๏น•*/ret..

[Next JS] Anchoring issue :: SWR / react-query ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์ 
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2022. 2. 20. 15:39

์˜ค๋Š˜์€ 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..

Android์˜ ๋„ค์ด๋ฒ„ ์•ฑ์—์„œ ๋ ˆ์ด์•„์›ƒ ๊นจ์งˆ ๋•Œ (flex-shrink ๋ฏธ์ง€์›)
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2022. 1. 23. 11:54

๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์•ˆ๋“œ๋กœ์ด๋“œ OS์—์„œ ๋„ค์ด๋ฒ„ ์•ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ (ํŠน์ • ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „ - ์•„๋งˆ๋„ 11 ์ด์ƒ ์—์„œ๋งŒ) flex ๋ ˆ์ด์•„์›ƒ์ด ๊นจ์ง€๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. css๋ฅผ ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ๊ณ ์ณ๋ณด๋ฉด์„œ ํ•ด๊ฒฐํ•ด๋ณด์•˜๋Š”๋ฐ, ์›์ธ์€ 'flex-shrink๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ'์ด์—ˆ๋‹ค. (caniuse) ๋ฐ˜์‘ํ˜• ์›น์„ ๊ตฌ์ถ•ํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์‚ฌ๋ก€๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด css ์ฝ”๋“œ์— flex-shrink ์‚ฌ์šฉ์„ ์ง€์–‘ํ•˜๋„๋ก ํ•˜์ž.

Next/link ์‚ฌ์šฉ ์‹œ mouseEnter ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ˜„์ƒ
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2022. 1. 9. 10:16

๋ฌธ์ œ ์ƒํ™ฉ 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..

Next์˜ css์—์„œ ์“ด font asset์„ ๋นŒ๋“œ ์‹œ ์ œ๋Œ€๋กœ ๋ฐ›์•„์˜ค์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2022. 1. 3. 13:59

์š”์•ฝ 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๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์„ ๋•Œ
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2021. 3. 14. 20:22

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๋Š” ๋ณ€๊ฒฝ๋˜..

์ฟ ํ‚ค๊ฐ€ ๋ฐœ๊ธ‰๋˜์ง€ ์•Š์„ ๋•Œ, Access-Control-Allow-Origin ์˜ค๋ฅ˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2021. 2. 6. 23:35

์ฟ ํ‚ค๊ฐ€ ๋ฐœ๊ธ‰๋˜์ง€ ์•Š์„ ๋•Œ KOS ํ”„๋กœ์ ํŠธ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์— React.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์„œ๋ฒ„๋Š” go lang ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ gin์„ ์ด์šฉํ•˜์—ฌ ์ง„ํ–‰์ค‘์ด๋‹ค. ์ฒ˜์Œ์— api๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ๋Š” postman์ด๋ผ๋Š” ํˆด๋กœ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” api์—ฐ๊ฒฐ์ด ์ˆœ์กฐ๋กญ๊ฒŒ ๋˜๋‹ค๊ฐ€ ๋กœ๊ทธ์ธ์„ ์œ„ํ•ด์„œ ์ฟ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ํ•˜๋Š” api๋ฅผ ์ž‘์„ฑํ•œ ์ดํ›„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ฟ ํ‚ค๊ฐ€ ๋ฐœ๊ธ‰๋˜์ง€ ์•Š๋Š”๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐ›์€ Network๋„ 200์œผ๋กœ ์ •์ƒ์ด๊ณ  set-cookie๋˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋ณด์ด๋ฉฐ response๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์•„๋„ ์ •์ƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์ฟ ํ‚ค๊ฐ€ ๋ฐœ๊ธ‰๋˜์ง€ ์•Š์„๊นŒ? ๋ฐฑ์—”๋“œ์—์„œ ํ”„๋ก ํŠธ์—”๋“œ์— ์ฟ ํ‚ค๋ฅผ ์ €์žฅ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–‘์ชฝ์˜ credential ์†์„ฑ์„ ๋ชจ๋‘ ON ํ•ด์ฃผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋จผ์ € ๋ฐฑ์—”๋“œ(go lang)์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. // ..

[go lang] api ๋™์‹œ ํ˜ธ์ถœ ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜ ๊ฐœ์„ ํ•˜๊ธฐ :: No database selected error
์›น (WEB)/์—๋Ÿฌํ•ด๊ฒฐ 2021. 2. 3. 18:55

ํ”„๋ก ํŠธ์—์„œ 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..