์˜๋„์น˜ ์•Š๊ฒŒ ๋ณ€๊ฒฝ๋œ CRLF <=> LF ํ•ด๊ฒฐํ•˜๊ธฐ
ยท
issue
๋ฌธ์ œ ์ƒํ™ฉ ๋ณ€๊ฒฝ๋œ ์ž‘์—… ๋‚ด์šฉ์„ pushํ•˜๋ ค๋Š”๋ฐ husky ์„ธํŒ…์˜ pre-push ํŒŒ์ผ์— ์—†๋Š” exit ๋„˜๋ฒ„์™€ ํ•จ๊ป˜ ๊ฑฐ์ ˆ๋˜์—ˆ๋‹ค.์ฒ˜์Œ์—” ๋ญ๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ๋ชฐ๋ž๋Š”๋ฐ, ๋ฐฑ์—”๋“œ๋ถ„์ด ์ผ๋ถ€ ํŒŒ์ผ์˜ ์„ธํŒ…์ด CRLF๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ๋ ค์ฃผ์…จ๋‹ค.  CRLF/LFCR, LF๋Š” ‘Carriage Return, Line Feed’์˜ ์•ฝ์ž์ด๊ณ  ๊ณ ์ „ ํƒ€์ž๊ธฐ์—์„œ ์œ ๋ž˜๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ข…์ด๋ฅผ ๊ณ ์ •ํ•˜๋Š” Carriage๋ฅผ ์ œ์ž๋ฆฌ๋กœ ๋ฏธ๋Š” ๋™์ž‘ (Carriage Return, \r) ๊ณผ ์ข…์ด๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ์ค„์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๋™์ž‘์„ (Line Feed, \n) ๋‚˜ํƒ€๋‚ธ๋‹ค.  ์ปดํ“จํ„ฐ OS๋ณ„๋กœ ๋‹ค๋ฅธ ์ค„๋ฐ”๊ฟˆ ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ๋‹ค. Linux (์œ ๋‹‰์Šค ๊ณ„์—ด) : ๋ฆฌ๋ˆ…์Šค์—์„œ์˜ ์ค„๋ฐ”๊ฟˆ์€ LF๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค. (\n)Windows : Windows์—์„œ์˜ ์ค„๋ฐ”๊ฟˆ์€..
Next.js ๋ณ‘๋ ฌ ๋ผ์šฐํŒ… & ๊ฒฝ๋กœ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ํ†ตํ•œ ๋ชจ๋‹ฌ ํŽ˜์ด์ง€ ๊ตฌํ˜„ 2
ยท
What I Learn
์ด์ „์— ๊ณต๋ถ€ํ–ˆ๋˜ Next.js์˜ ๊ธฐ๋Šฅ์ธ parallel routes, intercepting routes๋ฅผ ์ด์šฉํ•œ ๋ชจ๋‹ฌ ํŽ˜์ด์ง€ ๊ตฌํ˜„ ํ•˜๊ธฐ.์ค‘๊ฐ„์— ํ”„๋กœ์ ํŠธ๊ฐ€ ํ์ง€๋ถ€์ง€๋˜์–ด์„œ ๊ทธ ์ด์ƒ์˜ ์ง„ํ–‰์€ ํ•˜์ง€ ๋ชปํ–ˆ๋Š”๋ฐ, ์ด๋•Œ ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฒƒ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•ด๋ณด์•˜๋‹ค.  ๊ฐ ํŒŒ์ผ๋ณ„ ๊ธฐ๋Šฅ์€ ์œ„์— ์ฒจ๋ถ€ํ•œ ๊ธ€์—์„œ ๋ชจ๋‘ ์„ค๋ช…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ ์šฉํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘์„ฑํ•ด๋‘”๋‹ค. ํŽ˜์ด์ง€์˜ UI๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค. ์ด๋Ÿฐ ๋ชจ๋‹ฌ์ด ์‹ ๊ณ ํ•˜๊ธฐ/์ˆจ๊ธฐ๊ธฐ/์ˆจ๊น€ํ•ด์ œ ๋กœ 3๊ฐ€์ง€๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค ๋ณ‘๋ ฌ ๋ผ์šฐํŒ…์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ฒฝ๋กœ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ํ†ตํ•ด ๋ชจ๋‹ฌ์„ ์ƒ์œ„์— ๋„์šฐ๋Š” ์ด ๋ฐฉ๋ฒ•์€ ์ด๋™ํ•œ ํŽ˜์ด์ง€ ๋‚ด๋ถ€์—์„œ ๋ชจ๋‹ฌ์„ ์ƒ์„ฑํ•ด์„œ ๋ Œ๋”ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋กœ์ฑ„์„œ ๋ชจ๋‹ฌ ์ž์ฒด๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ์ด๋‹ˆ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ข‹์•„์ง€๊ฒŒ ๋  ์ˆ˜ ์žˆ๋‹ค ๊ตฌํ˜„ํด๋” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™..
e.stopPropagation(), ์ด๋ฒคํŠธ ์ „ํŒŒ ๋ฐฉ์ง€
ยท
What I Learn
PR ๋ฆฌ๋ทฐ๋กœ ๋ฐ›์•˜๋˜ ํ”ผ๋“œ๋ฐฑ ์ค‘ ์ด ์งˆ๋ฌธ์„ ๋ฐ›๊ณ  ์ž‘์„ฑํ•ด๋ณด๋Š” ๊ธ€์ด๋‹ค. ๋จผ์ € ๋‚˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋กœ์ฑ„์„œ ๋ชจ๋‹ฌ ์ž์ฒด๋ฅผ ๋„์šฐ๋Š” intercepting routes & parallel routes๋กœ ๋ชจ๋‹ฌ์„ ๋„์› ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์งˆ๋ฌธ์ด ๋‹ฌ๋ฆฐ ํŒŒ์ผ์€ ๋‹ค์Œ (.)hide/ page.tsx ์ด์—ˆ๋‹ค. 'use client'import { Button } from '@/shared/components/Button'import { useRouter } from 'next/navigation'import { useCallback } from 'react'export default function Page({ params: { userId, messageId },}: { params: { userId: string; messageId..
format date as 'YYYY.MM.DD AMhh:mm'
ยท
What I Learn
ํฌ๋งทํŒ…ํ•ด์•ผํ•˜๋Š” ์–‘์‹์€ ์œ„์™€ ๊ฐ™์•˜๊ณ , js์˜ DateTimeFormat์„ ์‚ฌ์šฉํ•ด KST๋กœ ๋ฐ”๊พธ๋ฉด์„œ ์˜ต์…˜์„ DateTimeFormatOptions๋กœ ์ฃผ์—ˆ๋‹ค. /** * ์ฃผ์–ด์ง„ ๋‚ ์งœ์™€ ์ผ์ž๋ฅผ "YYYY.MM.DD. ์˜ค์ „(ํ˜น์€ ์˜คํ›„)HH:MM" ํ˜•์‹์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. */const dateFormat = (e: Date) => { const options: Intl.DateTimeFormatOptions = { year: 'numeric', month: '2-digit', day: '2-digit', hour: 'numeric', minute: '2-digit', hour12: true, } const formatter = new Intl.DateTimeFormat('ko-K..