GithubHelp home page GithubHelp logo

til's Introduction

Hi there ๐Ÿ‘‹ I'm hyuno Choi

  • ๐Ÿ”ญ Iโ€™m currently enrolled in Chungbuk National University
  • ๐ŸŒฑ Iโ€™m currently learning
  • ๐Ÿ’ฌ Ask me anything!
  • ๐Ÿ“ซ How to reach me: [email protected]

My major is psycologyฮจ and Brain-Cognitive Engineeringโš™๐Ÿง  I also interested in Programming! My first programming language is python. I'm currently learing FrontEnd stack๐Ÿ“š

Try my mobile Apps๐Ÿ“ฑ

Visite my...

Status Bar

HyunoChoi's state

Top Langs

Language&Framework

HTML CSS Javascript Typescript

python

React Redux

Node.js MongoDB Express

Laptop

MacBook_Pro

til's People

Contributors

soonitoon avatar

Stargazers

 avatar

Watchers

 avatar

til's Issues

Next.js + storybook์—์„œ static ํŒŒ์ผ ๋‹ค๋ฃจ๊ธฐ

๊ธฐ๋ณธ ์„ค์ •

  • ์Šคํ† ๋ฆฌ๋ถ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Next์™€ ๋…๋ฆฝ์ ์œผ๋กœ ํ˜ธ์ŠคํŒ…๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ •์  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋”ฐ๋ผ์„œ .storybook/main.js ํŒŒ์ผ์— ์ •์  ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.
module.exports = {
  ...,
  staticDir: ['../public']
};
  • ์ด์ œ ์Šคํ† ๋ฆฌ๋ถ์—์„œ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.
public/
โ”œโ”€ fonts/
โ”œโ”€ images/
โ”‚  โ”œโ”€ sample.png
  • public ํด๋”๊ฐ€ ์ด๋Ÿฐ ๊ตฌ์กฐ์ผ ๋•Œ sample.png ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ์Šคํ† ๋ฆฌ๋ถ ์ปดํฌ๋„ŒํŠธ์—์„œ images/sample.png ํ˜•ํƒœ๋กœ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

next/image ๋Œ€์‘

  • next/image ๋ชจ๋“ˆ์˜ <Image /> ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Next์˜ ์ตœ์ ํ™” ๊ธฐ๋Šฅ ๋•Œ๋ฌธ์— ์Šคํ† ๋ฆฌ๋ถ์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์Šคํ† ๋ฆฌ๋ถ์—์„œ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ๋„๋Š” ์„ค์ •์„ ํ•ด์•ผ ํ•œ๋‹ค.
  • .storybook/preview.js์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
import * as NextImage from 'next/image';

const OriginalNextImage = NextImage.default;

Object.defineProperty(NextImage, 'default', {
  configurable: true,
  value: (props) => <OriginalNextImage {...props} unoptimized />
});

Vim์—์„œ ํŠน์ • ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ํ•˜๊ธฐ(์ปค์„œ ์ด๋™ํ•˜๊ธฐ)

  • ํ˜„์žฌ ์ปค์„œ ์œ„์น˜์—์„œ ์•ž์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฒ€์ƒ‰: ๋…ธ๋ง ๋ชจ๋“œ์—์„œ / + ๊ฒ€์ƒ‰ํ•  ํ…์ŠคํŠธ
  • ํ˜„์žฌ ์ปค์„œ ์œ„์น˜์—์„œ ๋’ค์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฒ€์ƒ‰: ๋…ธ๋ง ๋ชจ๋“œ์—์„œ ? + ๊ฒ€์ƒ‰ํ•  ํ…์ŠคํŠธ
  • ๋‹ค์Œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ: n
  • ์ด์ „ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ: shift + n

Next.js middleware ์‚ฌ์šฉ์‹œ Unexpected token '<' ์˜ค๋ฅ˜

  • Next.js์—์„œ middleware๋กœ ์š”์ฒญ ์ฒ˜๋ฆฌ ์‹œ ์š”์ฒญ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ.
  • HTML์ด ์•„๋‹Œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์ฒญ์— ์ „๋ถ€ ํ•ด๋‹น ํŽ˜์ด์ง€์˜ HTML๋กœ ์‘๋‹ตํ•˜๊ธฐ ๋•Œ๋ฌธ.
  • ๋”ฐ๋ผ์„œ HTML์ด ์•„๋‹Œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์ฒญ์€ middleware๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
const PUBLIC_FILE = /\.(.*)$/;

const middleware = (request: NextRequest) => {
  const { pathname } = request.nextUrl;
  if (
    pathname.startsWith('/_next') ||
    pathname.startsWith('/api') ||
    pathname.startsWith('/static') ||
    pathname.includes('.') ||
    PUBLIC_FILE.test(pathname)
  ) {
    return NextResponse.next();
  }
// ๋ฏธ๋“ค์›จ์–ด ์ฝ”๋“œ
}

GitHub์—์„œ PR ๋จธ์ง€๋˜๋ฉด ์ž๋™์œผ๋กœ ์ด์Šˆ ๋‹ซ๊ธฐ

  • PR์„ ์ž‘์„ฑํ•  ๋•Œ ๋‹ค์Œ ๋‹จ์–ด ์ค‘ ํ•˜๋‚˜๋ฅผ ์ ๊ณ , ๋’ค์— #์ด์Šˆ๋ฒˆํ˜ธ๋ฅผ ์ ๋Š”๋‹ค.
close
closes
closed
fix
fixes
fixed
resolve
resolves
resolved
  • ์˜ˆ์‹œ: resolved #31
  • ๋‹จ, PR์ด default branch์— ๋จธ์ง€๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•œ๋‹ค.
  • ๋ ˆํผ๋Ÿฐ์Šค

storybook์—์„œ argType.defaultValue ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ

No longer inferring default values of args

  • ์Šคํ† ๋ฆฌ๋ถ 6.3 ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” argType.defaultValue๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ.
  • ๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ›๋Š” ๋Œ€์‹  ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” undefined ์ƒํƒœ๋กœ ๋‚จ๊ฒจ๋‘๊ณ , ์Šคํ† ๋ฆฌ๋ถ UI๋ฅผ ํ†ตํ•ด ๋ฐ›๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ.
  • ํ˜น์€ ์Šคํ† ๋ฆฌ๋ฅผ export ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Œ.
export const Primary: ComponentStory<typeof Label> = ({
  text = '๋ผ๋ฒจ',
  marginBottom
}) => <Label {...{ text, marginBottom }} />;

MVP ์ œํ’ˆ์ด๋ž€

  • Minimum Viable Product
  • ์ตœ์†Œํ•œ์˜ ํ•„์ˆ˜ ๊ธฐ๋Šฅ๋งŒ ๋‹ด์€ ์ œํ’ˆ์„ ๋งํ•จ.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์ ์€ ์ˆ˜์˜ ํ…Œ์Šคํ„ฐ์—๊ฒŒ ๋ฐฐํฌ๋˜๊ณ , ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ์šฉ๋„๋กœ ์ถœ์‹œํ•œ๋‹ค.

ref

Next.js ํ”„๋กœ์ ํŠธ์—์„œ env ์„ธํŒ…ํ•˜๊ธฐ

  • Next.js 9.4 ์ด์ƒ ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋ณ„๋„์˜ ์„ค์ • ์—†์ด env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  • ์—ฌ๋Ÿฌ env ํŒŒ์ผ์ด ํ•„์š”ํ•  ๋•Œ๋Š”
    • .env.local์— ๋น„๋ฐ€ํ‚ค ๋“ฑ์„ ์ €์žฅํ•˜๊ณ 
    • .env.development์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค์„ ์ €์žฅํ•˜๊ณ 
    • .env.production์— ๋ฐฐํฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค์„ ์ €์žฅํ•˜๋ฉด ๋จ.
  • $ next dev ๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ ์ž๋™์œผ๋กœ .env.development ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ ์šฉ๋จ.
  • $ next start ๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ ์ž๋™์œผ๋กœ .env.production ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ ์šฉ๋จ.
  • .env.local ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ์–ธ์ œ๋‚˜ ์ ์šฉ๋จ.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋…ธ๋“œ ํ™˜๊ฒฝ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋งŒ์•ฝ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ช… ์•ž์— NEXT_PUBLIC_ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ๋ถ™์—ฌ์•ผ ํ•จ.

ref

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด์ค‘ NOT ์—ฐ์‚ฐ์ž๋กœ ํ˜•๋ณ€ํ™˜ํ•˜๊ธฐ

์–ด๋–ค ๋ณ€์ˆ˜๊ฐ€ false๋กœ ํ˜•๋ณ€ํ™˜ ๋  ์ˆ˜ ์žˆ์œผ๋ฉด(null, undefined, "" ๋“ฑ) false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  true๋กœ ํ˜•๋ณ€ํ™˜ ๋  ์ˆ˜ ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ.

const isTrue = someVariable ? true : false;

์ด ์ฝ”๋“œ๋ฅผ ์ด์ค‘ NOT ์—ฐ์‚ฐ์ž๋กœ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Œ.

const isTrue = !!someVariable;

๊ธฐ๋ณธ์ ์œผ๋กœ ! ์—ฐ์‚ฐ์ž๋Š” ํ˜•๋ณ€ํ™˜๊ณผ ํ•จ๊ป˜ ๋ถˆ๋ฆฌ์–ธ์„ ๋ฐ˜๋Œ€๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๋Š”๋ฐ, ! ์—ฐ์‚ฐ์„ ํ•œ๋ฒˆ ๋” ํ•˜๊ฒŒ ๋˜๋ฉด ์›๋ž˜์˜ ์ž๋ฃŒํ˜•์„ ๋ถˆ๋ฆฌ์–ธ์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ.

z-index์˜ ํšจ๊ณผ ๋ฒ”์œ„

  • z-index๋Š” ๋ถ€๋ชจ ์š”์†Œ์˜ ์ œํ•œ์„ ๋ฐ›์œผ๋ฉฐ, ๊ฐ™์€ ํ˜•์ œ ํƒœ๊ทธ๋“ค ์‚ฌ์ด์—์„œ๋งŒ ์ฐจ์ด์— ์˜ํ•œ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.
  • ์ฆ‰, ๋ถ€๋ชจ ์š”์†Œ์˜ z-index ๊ฐ’์ด 0์ธ ํƒœ๊ทธ์˜ z-index๋ฅผ 9999๋กœ ์„ค์ •ํ•ด๋„, ๋ถ€๋ชจ ์š”์†Œ์˜ ํ˜•์ œ ์š”์†Œ๊ฐ€ ๋ถ€๋ชจ๋ณด๋‹ค z-index ๊ฐ’์ด 1๋งŒ ๋†’์•„๋„ ํ•ด๋‹น ํƒœ๊ทธ์— ์˜ํ•ด ๊ฐ€๋ ค์ง„๋‹ค.
  • ๋˜ํ•œ z-index๋Š” position์„ static(๊ธฐ๋ณธ๊ฐ’) ์ด์™ธ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์•ผ ์ž‘๋™๋œ๋‹ค.
 <div
      style="
        background-color: red;
        width: 100px;
        height: 100px;
        position: absolute;
        z-index: 0;
      "
    >
      <div
        style="
          background-color: green;
          width: 50px;
          height: 50px;
          position: absolute;
          z-index: 2;
        "
      ></div>
    </div>
    <div
      style="
        background-color: blue;
        width: 50px;
        height: 50px;
        position: absolute;
        top: 0;
        z-index: 1;
      "
    ></div>

image

์ดˆ๋ก ๋ฐ•์Šค์˜ z-index ๊ฐ’์ด ํŒŒ๋ž€ ๋ฐ•์Šค๋ณด๋‹ค ๋†’์Œ์—๋„ ๋ถ€๋ชจ ์š”์†Œ์˜ z-index๊ฐ€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ๋ž€ ๋ฐ•์Šค์— ๊ฐ€๋ ค์ง„๋‹ค.

time ํƒœ๊ทธ

  • ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‚ด์šฉ์„ ๋‹ด์„ ๋•Œ ์“ด๋‹ค.
  • ์ผ๋ฐ˜ ํ…์ŠคํŠธ์™€ ๋˜‘๊ฐ™์ด ๋ณด์ธ๋‹ค.
  • datetime ์†์„ฑ์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์บ˜๋ฆฐ๋” ๋“ฑ๋ก ์ถ”์ฒœ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
<p>Open from <time>10:00</time> to <time>21:00</time> every weekday.</p>
<p>I have a date on <time datetime="2008-02-14 20:00">Valentines day</time>.</p>

ref

JS์—์„œ ์ˆซ์ž ์†Œ์ˆ˜์  ๋ถ™์ด๊ธฐ

  • Number.prototype.toLocaleString() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋จ.
  • number ํƒ€์ž…์„ ํŠน์ • ๊ตญ๊ฐ€์˜ ์ˆซ์ž ์–‘์‹์— ๋งž๋Š” ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ.
  • ์•„๋ฌด ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฏธ๊ตญ ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™˜๋จ(์„ธ ์ž๋ฆฌ๋งˆ๋‹ค ์‰ผํ‘œ)
const number = 1000;

number.toLocaleString(); // '1,000'

next/link ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ๋งํ•˜๊ธฐ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ className๊ณผ style ํ”„๋กญ์„ ๋ฐ›์„ ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ์Šคํƒ€์ผ๋ง์ด ์•ˆ ๋จ.
  • ์›ํ•˜๋Š” ์Šคํƒ€์ผ์„ <a> ํƒœ๊ทธ์— ์ž…ํžˆ๊ณ , <a> ํƒœ๊ทธ๋ฅผ <Link>๋กœ ๊ฐ์‹ธ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ด๋•Œ href ์†์„ฑ์€ <Link> ์ปดํฌ๋„ŒํŠธ์— ์ฃผ๋˜, ๋ฐ˜๋“œ์‹œ passHref ์†์„ฑ์„ ํ•จ๊ป˜ ์ค˜์•ผํ•จ.
  • ๊ทธ๋Ÿฌ๋ฉด href๊ฐ€ ์ž์‹ <a> ํƒœ๊ทธ์— ์ „๋‹ฌ๋˜๊ณ , ์ ‘๊ทผ์„ฑ๊ณผ SEO๋ฅผ ๋‘˜ ๋‹ค ์ฑ™๊ธธ ์ˆ˜ ์žˆ์Œ.
<Link href="./togo" passHref>
  <a>Go</a>
</Link>

defer, async, ๋™์  ์Šคํฌ๋ฆฝํŠธ

์ผ๋ฐ˜ ์Šคํฌ๋ฆฝํŠธ(์•„๋ฌด ์†์„ฑ๋„ ์ฃผ์ง€ ์•Š์Œ)

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML์„ ํŒŒ์‹ฑํ•˜๋‹ค๊ฐ€ ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋‚˜๋ฉด ํŒŒ์‹ฑ์„ ๋ฉˆ์ถ”๊ณ  ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์‹คํ–‰๊นŒ์ง€ ํ•œ ํ›„์— ๋‹ค์‹œ ํŒŒ์‹ฑ์„ ์‹œ์ž‘ํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋”ฉ ๋ฐ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์ ‘์†์ž๋Š” ์Šคํฌ๋ฆฝํŠธ ์•„๋ž˜์ชฝ ์š”์†Œ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋‹ค.

defer ์Šคํฌ๋ฆฝํŠธ

  • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ HTML ํŒŒ์‹ฑ๊ณผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋œ๋‹ค.
  • ์–ธ์ œ๋‚˜ ๋ธŒ๋ผ์šฐ์ €์˜ HTML ํŒŒ์‹ฑ ์™„๋ฃŒ์™€ DOMContentLoaded ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‚ฌ์ด์— ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค.
  • ๋˜ํ•œ, ๋ฌธ์„œ ์ƒ์—์„œ ์œ„์— ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค.

async ์Šคํฌ๋ฆฝํŠธ

  • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ HTML ํŒŒ์‹ฑ๊ณผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋œ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์˜ HTML ํŒŒ์‹ฑ ์ „์— ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ํŒŒ์‹ฑ์„ ์ค‘๋‹จ์‹œํ‚ค๊ณ  ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
  • DOMContentLoaded ์ด๋ฒคํŠธ๋Š” async ์Šคํฌ๋ฆฝํŠธ ๋กœ๋”ฉ ๋ฐ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • async ์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋กœ ์ˆœ์„œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

๋™์  ์Šคํฌ๋ฆฝํŠธ

  • document.createElement('script'); ๋“ฑ์„ ํ†ตํ•ด์„œ ๋™์ ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ.
  • aysnc ์Šคํฌ๋ฆฝํŠธ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ๋™์  ์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋Š” ์„œ๋กœ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • ์—˜๋ฆฌ๋จผํŠธ์˜ async ์†์„ฑ์„ false๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์„œ์— ์ถ”๊ฐ€๋œ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋œ๋‹ค.

ref

[IOS 15 ๊ธฐ์ค€] ๋ชจ๋ฐ”์ผ ์‚ฌํŒŒ๋ฆฌ์—์„œ ๋ผ๋””์˜ค ํƒ€์ž… ์ธํ’‹ ์Šคํƒ€์ผ๋ง ํ•  ๋•Œ ์ฃผ์˜์ 

input ํƒœ๊ทธ์— appearance: none; ์†์„ฑ์„ ์ฃผ๋”๋ผ๋„ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด ์žˆ์—ˆ๋˜ ์ž๋ฆฌ๊ฐ€ ์—ฌ๋ฐฑ์œผ๋กœ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•จ.
width: 0; height: 0; ์†์„ฑ์œผ๋กœ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์„ ์—†์• ์ฃผ๋ฉด ๋จ.
์ฐธ๊ณ ๋กœ, ๋ชจ๋“  ํ”Œ๋žซํผ ๊ณตํ†ต์ ์œผ๋กœ ๋ผ๋””์˜ค ํƒ€์ž… ์ธํ’‹์—๋Š” margin: 0; ์†์„ฑ์„ ์ฃผ์–ด์•ผ ๋ฐ”๋ฅด๊ฒŒ ์Šคํƒ€์ผ๋ง ํ•  ์ˆ˜ ์žˆ์Œ.

Next ์•ฑ์—์„œ ๋กœ์ปฌ ํฐํŠธ ํŒŒ์ผ ์ ์šฉํ•˜๊ธฐ

src/fonts ๊ฒฝ๋กœ์— ํฐํŠธ ํŒŒ์ผ์„ ์ ์šฉํ•˜๋ฉด ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†๋‹ค.

  • ํ”„๋กœ์ ํŠธ ์ตœ์ƒ๋‹จ public/fonts ํด๋”์— ํฐํŠธ ํŒŒ์ผ์„ ๋„ฃ๋Š”๋‹ค.
  • _document ํŒŒ์ผ ํ—ค๋” ์•ˆ์—์„œ <link /> ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ํฐํŠธ ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
 <Html>
      <Head>
        <link
          rel="preload"
          href="/fonts/PretendardVariable.woff2"
          as="font"
          crossOrigin=""
        />
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  • ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ์— ํฐํŠธ ํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค.
@font-face {
    font-family: 'Pretendard Variable';
    font-weight: 45 920;
    font-style: normal;
    font-display: swap;
    src: local('Pretendard Variable'),
      url('/fonts/PretendardVariable.woff2') format('woff2-variations');
  }

Next.js Link ํƒœ๊ทธ์˜ ์ž์‹์ด string์ด ์•„๋‹ ๋•Œ

  • Next.js์˜ Link ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹์ด string์ด๋ฉด ์ž๋™์œผ๋กœ a ํƒœ๊ทธ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ string์ด ์•„๋‹ˆ๋ฉด a ํƒœ๊ทธ๊ฐ€ ์‚ฝ์ž…๋˜์ง€ ์•Š๊ณ , ๋งํฌ์˜ ๊ธฐ๋Šฅ๋„ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ Link ์ปดํฌ๋„ŒํŠธ์— string์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํƒœ๊ทธ๋ฅผ ์ž์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” aํƒœ๊ทธ๋กœ ์ž์‹์„ ๊ฐ์‹ธ์ค˜์•ผ ๋งํฌ์˜ ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
<Link>
  <a>
    <Child />
  <a>
</Link>

:first-child์™€ :first-of-type์˜ ์ฐจ์ด

  • :first-child: ๋ถ€๋ชจ ์š”์†Œ์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ํƒœ๊ทธ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • :first-of-type: ๋ถ€๋ชจ ์š”์†Œ ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ ํƒœ๊ทธ๋“ค์ด ์žˆ์„ ๋•Œ ๊ฐ ์ข…๋ฅ˜์˜ ํƒœ๊ทธ์—์„œ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ํƒœ๊ทธ๋ฅผ ๋ชจ๋‘ ์„ ํƒํ•œ๋‹ค.
<div>
  <div>1</div> <!-- div:first-child, div:first-of-type -->
  <div>2</div>
  <div>3</div>
</div>
<div>
  <span>1</span> <!-- span:first-child, span:first-of-type -->
  <div>2</div> <!-- div:nth-child(2), div:first-of-type -->
  <div>3</div>
</div>

funtion.prototype.bind๋Š” ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

๋‹ค๋ฅธ ๊ฐ์ฒด์—์„œ ๋ฉ”์†Œ๋“œ๋ฅผ ๋นŒ๋ ค ์‚ฌ์šฉํ•  ๋•Œ

const person = {
  firstName: "",
  lastName: "",
  getFullName: function() {
    return `${this.firstName} ${this.lastName}`;
  }
}

const Choi = {
  firstName: "Hyuno",
  lastName: "Choi",
}

let getFullNameOfChoi = person.getFullName.bind(Choi);
console.log(getFullNameOfChoi()); // Hyuno Choi
  • Choi ๊ฐ์ฒด๋Š” ์•„๋ฌด๋Ÿฐ ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์Œ.
  • ํ•˜์ง€๋งŒ person.getFullName ๋ฉ”์†Œ๋“œ์— Choi๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ Choi์˜ this ๋งฅ๋ฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

this ๋งฅ๋ฝ์„ ์œ ์ง€ํ•ด์•ผ ํ•  ๋•Œ

const Choi = {
  firstName: "Hyuno",
  lastName: "Choi",
  getFullName: function() {
    return `${this.firstName} ${this.lastName}`;
  }
}

setTimeout(Choi.getFullName, 1000); // undefined undefined
  • ์–ธ๋œป ์˜ˆ์ƒํ•˜๋ฉด Hyuno Choi๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ.
  • setTimeOut ํ•จ์ˆ˜์— Choi.getFullName ๋ฉ”์†Œ๋“œ๊ฐ€ ์ฝœ๋ฐฑ์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ์ˆœ๊ฐ„ ํ•ด๋‹น ๋ฉ”์†Œ๋“œ์˜ this ๋งฅ๋ฝ์ด ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ.
  • ์ด๋•Œ Choi.getFullName ๋ฉ”์†Œ๋“œ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋™์‹œ์— Choi ๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋ฉด this ๋งฅ๋ฝ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ.
setTimeout(Choi.getFullName.bind(Choi), 1000); // Hyuno Choi

Ref

๋„คํŠธ์›Œํฌ ์•ˆ ์ข‹์€ ํ™˜๊ฒฝ์—์„œ yarn add

There appears to be trouble with your network connection. Retrying...
  • ๋„คํŠธ์›Œํฌ๊ฐ€ ๋Š๋ฆฐ ํ™˜๊ฒฝ์—์„œ yarn add ์‹คํ–‰ ์‹œ ์œ„์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ๋œจ๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด,
  • yarn add --network-timeout 1000000 ์ฒ˜๋Ÿผ ํƒ€์ž„์•„์›ƒ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋จ.

git์—์„œ push, pull upstream ์„ธํŒ…ํ•˜๊ธฐ

$ git push --set-upstream origin dev

--set-upstream ์˜ต์…˜์„ pull/push ํ•  ๋•Œ ๋ถ™์ด๋ฉด ํ•ด๋‹น ๋ธŒ๋žœ์น˜์˜ ์—…์ŠคํŠธ๋ฆฝ์ด ์„ค์ •๋จ. ์ดํ›„์—๋Š” git pull๋งŒ ์จ์ค˜๋„ ๋จ.

CSS๋กœ ์Šคํƒ€์ผ์€ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด์„œ ๋ฒ„ํŠผ ํ„ฐ์น˜/ํด๋ฆญ ์˜์—ญ ๋„“ํžˆ๊ธฐ

๏ฟฝํŽ˜์ด์ง€ ๋‚ด์—์„œ ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฒ„ํŠผ์ด๋‚˜ ๋งํฌ๋ฅผ ์จ์•ผํ•  ๋•Œ ๋„“ํžˆ๊ณ  ์‹ถ์€ ํ„ฐ์น˜ ์˜์—ญ๋งŒํผ padding ๊ฐ’์„ ์ค€ ํ›„, margin์œผ๋กœ ๊ฐ™์€ ๊ฐ’์„ ์Œ์ˆ˜๋กœ ์ฃผ๋ฉด ์Šคํƒ€์ผ์„ ์œ ์ง€ํ•œ ์ƒํƒœ๋กœ ํ„ฐ์น˜ ์˜์—ญ๋งŒ ๋„“ํž ์ˆ˜ ์žˆ๋‹ค.

.button {
  padding: 10px;
  margin: -10px;
}

image

tabindex ์†์„ฑ

  • tabindex ์†์„ฑ์€ ํ•ด๋‹น ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํฌ์ปค์Šค ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๊ณผ, ํ‚ค๋ณด๋“œ์˜ tab ํ‚ค๋กœ ์ˆœํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • tabindex="-1": ์Œ์ˆ˜๊ฐ’์€ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํ‚ค๋ณด๋“œ๋กœ ํฌ์ปค์Šค๋  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ๋งˆ์šฐ์Šค ํด๋ฆญ์„ ํ†ตํ•ด์„œ๋งŒ ํฌ์ปค์Šค๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • tabindex="0": ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ํ‚ค๋ณด๋“œ๋กœ ํฌ์ปค์Šค๋  ์ˆ˜ ์žˆ๋‹ค. ์–‘์ˆ˜๊ฐ’ tabindex๋ฅผ ๊ฐ€์ง„ ์•จ๋ฆฌ๋จผํŠธ๊ฐ€ ์ˆœ์„œ์ƒ ๋จผ์ € ํฌ์ปค์Šค๋˜๊ณ , ๊ฐ™์€ 0๋ผ๋ฆฌ๋Š” HTML ์ƒ์˜ ์ˆœ์„œ์— ์˜ํ•ด ํฌ์ปค์Šค ์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.
  • ์–‘์ˆ˜๊ฐ’: ๊ฐ’์ด ๋‚ฎ์€ ์ˆœ์„œ๋Œ€๋กœ ๋จผ์ € ํฌ์ปค์Šค๋œ๋‹ค. ๊ฐ€์žฅ ๋†’์€ ๊ฐ’์€ 32767์ด๋ฉฐ, ์ด๋Š” ๊ณง 0๊ณผ ๊ฐ™์€ ์ˆœ์„œ์ด๋‹ค.

**์ฃผ์˜: ์ธ์œ„์ ์ธ tabindex๋Š” ๋ณด์กฐ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์„œ ์›นํŽ˜์ด์ง€๋ฅผ ๋ด์•ผ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ˜ผ๋ž€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํฌ์ปค์Šค ์ˆœ์„œ๋Š” ์ธ๋ฑ์Šค ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ HTML ์ƒ์˜ ์ˆœ์„œ๋กœ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค.

์›น์†Œ์ผ“ 8.0.0 ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ์˜ message ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

  • ์›น์†Œ์ผ“ 8.0.0 ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ŠคํŠธ๋ง์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์ง€ ์•Š๊ณ , Buffer๋กœ ๋ฐ›์Œ.
  • ๋”ฐ๋ผ์„œ toString() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์ŠคํŠธ๋ง์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•จ.
socket.on("message", (message) =>
  console.log(message.toString())
);

CSS display: contents

div {
  display: contents;
}
  • ์ด ์†์„ฑ์ด ์ ์šฉ๋œ ํƒœ๊ทธ๋Š” ๋ฐ•์Šค ๊ธฐ๋Šฅ์„ ์žƒ์–ด๋ฒ„๋ฆฌ๋ฉฐ, ์ž์‹ ํƒœ๊ทธ๋“ค์€ ์ƒ์œ„ ํƒœ๊ทธ display ์†์„ฑ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค(๋งˆ์น˜ ์ž์‹ ํƒœ๊ทธ๋งŒ ๋‚จ์•„ ์žˆ๋Š” ํšจ๊ณผ).
  • ๋”ฐ๋ผ์„œ ์ด ์†์„ฑ์ด ์ ์šฉ๋˜๋ฉด width, height, margin, padding ์†์„ฑ์„ ์“ธ ์ˆ˜ ์—†๋‹ค.
  • ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ display: contents ์†์„ฑ์ด ์ ์šฉ๋œ ํƒœ๊ทธ๋Š” ์ ‘๊ทผ์„ฑ ํŠธ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋˜๊ณ  ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ์ฝ์ง€ ์•Š๋Š”๋‹ค.
  • ์ด๋Š” display ์†์„ฑ์€ ์Šคํƒ€์ผ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ๋ฌธ์„œ์˜ ์˜๋ฏธ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค๋Š” CSS์˜ ์˜๋„์™€ ์–ด๊ธ‹๋‚œ๋‹ค.
  • ๋”ฐ๋ผ์„œ margin, padding ๋“ฑ์˜ ์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ์‹œ๋ฉ˜ํ‹ฑ ํƒœ๊ทธ์— display: contents์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

MDN

VSCode์—์„œ Restart TS server ๋ช…๋ น์–ด ์•ˆ ๋œฐ ๋•Œ

  • command + shigt + p๋กœ ๋ช…๋ น์„ ์ฐพ์„ ๋•Œ Restart TS server๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋ฉด,
  • ํ˜„์žฌ ํฌ์ปค์Šค๋œ ํŒŒ์ผ์ด TS ํŒŒ์ผ์ด ์•„๋‹ˆ์–ด์„œ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํผ.
  • TS ํŒŒ์ผ์— ํฌ์ปค์Šค๋ฅผ ๋‘” ์ฑ„๋กœ command + shift + p๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ณด์ธ๋‹ค.

YAGNI

  • "You Aren't Gonna Need It"
  • ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๋Š” ๋ฌด์กฐ๊ฑด ๊ตฌํ˜„ํ•ด์•ผ ํ•˜์ง€๋งŒ, ๋‹จ์ง€ ํ•„์š”ํ•ด๋ณด์ธ๋‹ค๋Š” ์ด์œ ๋กœ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜์ง€ ๋ง๋ผ.

next/image์—์„œ ์ด๋ฏธ์ง€์˜ ์›๋ณธ ๋น„์œจ ์œ ์ง€ํ•˜๋ฉฐ ๋ถ€๋ชจ ์š”์†Œ์— ๊ฝ‰ ์ฑ„์šฐ๊ธฐ

  • Image ์ปดํฌ๋„ŒํŠธ์˜ layout ์†์„ฑ์— fill์„ ์ฃผ๊ณ , objectFit ์†์„ฑ์— cover๋ฅผ ์ฃผ์–ด ์›๋ž˜ ๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉฐ ๋ถ€๋ชจ ์š”์†Œ์— ๊ฝ‰ ์ฐจ๊ฒŒ ๋งŒ๋“ ๋‹ค.
  • Image ์ปดํฌ๋„ŒํŠธ์˜ ๋ถ€๋ชจ ํƒœ๊ทธ ์Šคํƒ€์ผ์— position: relative ์†์„ฑ์„ ์ฃผ๊ณ , width์™€ height๋กœ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
<div>
        <Image
          src={DEMO_GROUP_IMAGE_URL}
          layout="fill"
          objectFit="cover"
          alt="๋ชจ์ž„ ํ”„๋กœํ•„"
        />
</div>
div {
  position: relative;
  width: 100px;
  height: 100px;
}

git ๋นˆ ์ปค๋ฐ‹ ๋‚ ๋ฆฌ๊ธฐ

GitHub action๋“ฑ CI/CD ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ปค๋ฐ‹์„ ํ‘ธ์‰ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•œ ๋ช…๋ น์–ด.

$ git commit --allow-empty -m "Empty-Commit"

<b> vs <strong> vs <em>

<b> vs <strong>

  • ๋‘ ํƒœ๊ทธ๋Š” ๋ชจ๋‘ ๋ณผ๋“œ์ฒด๋กœ ๋ณด์ด์ง€๋งŒ ์˜๋ฏธ๋Š” ์‚ด์ง ๋‹ค๋ฅด๋‹ค.
  • <strong>์€ ์ปจํ…์ธ ๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • <b>๋Š” ์ค‘์š”๋„์™€ ๊ด€๋ จ ์—†์ด ํ•ด๋‹น ํ…์ŠคํŠธ์— ์ฃผ์˜๋ฅผ ๋Œ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
  • ์˜๋ฏธ์™€ ์ƒ๊ด€ ์—†์ด ๋‹จ์ˆœํžˆ ๊ตต์€ ๊ธ€์”จ๋ฅผ ์›ํ•œ๋‹ค๋ฉด CSS์˜ font-weight ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

<em> vs <strong>

  • <em>์€ ๋ฌธ์žฅ์„ ์ฝ์„ ๋•Œ ๊ฐ•์„ธ๋ฅผ ๋‘๋Š” ๋ถ€๋ถ„์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๊ฐ•์„ธ๋ฅผ ์–ด๋””์— ๋‘๋Š๋ƒ์— ๋”ฐ๋ผ ๋ฌธ์žฅ์˜ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
  • <strong>์€ ๋ฌธ์žฅ์˜ ์ผ๋ถ€๋ถ„์— ์ค‘์š”ํ•˜๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

enabled, disabled ์ƒํƒœ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ์Šคํƒ€์ผ ์ง€์ •ํ•˜๊ธฐ

ํ™œ์„ฑ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ์„ ์ค„ ํ•„์š” ์—†์ด, CSS์˜ :enabled, :disabled ์„ ํƒ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

.button {
  width: 200px;
  height: 50px;

  &:enabled {
    color: red;
  }

  &:disabled {
    color: green;
  }
}

width ์ƒ๋Œ€ ํฌ๊ธฐ ํ‚ค์›Œ๋“œ ์ •๋ฆฌ

  • auto: ๋ถ€๋ชจ ์š”์†Œ์—์„œ ์ฐจ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์šฉ ๊ณต๊ฐ„์—์„œ margin์„ ์ œ์™ธํ•œ ๋„ˆ๋น„.
  • min-content: ์š”์†Œ ์† ์ปจํ…์ธ ๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์ธ ๋„ˆ๋น„. ํ…์ŠคํŠธ์—์„œ๋Š” ๋‹จ์–ด ๋‹จ์œ„๋กœ ์ค„๋ฐ”๊ฟˆ์„ ์ˆ˜ํ–‰ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๊ธด ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ width๊ฐ€ ๋จ.
  • max-content ์š”์†Œ ์† ์ปจํ…์ธ ๋ฅผ ์ตœ๋Œ€ํ•œ ๋Š˜๋ฆฐ ๋„ˆ๋น„. ํ…์ŠคํŠธ์—์„œ๋Š” ์ค„๋ฐ”๊ฟˆ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์žฅ ์ „์ฒด์˜ ๊ธธ์ด๋ฅผ width๋กœ ์‚ฌ์šฉํ•จ.
  • fit-content: auto์™€ max-content์˜ ์ค‘๊ฐ„. ๊ฐ€์šฉ ๊ณต๊ฐ„์ด ๋‚จ์„ ๋•Œ๋Š” max-content์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ณ , ๊ฐ€์šฉ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด auto์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์–ด๋–ค ๋ฌธ์ž์—ด์— ํŠน์ • ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ๊ฒ€์‚ฌํ•˜๊ธฐ

const myName = 'Hyuno Choi';
const subString1 = 'Choi';
const subString2 = 'Kim';

console.log(myName.includes(subString1)); // true
console.log(myName.includes(subString2)); // false
  • ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ํ•จ.
  • includes(searchValu, start) ํ˜•ํƒœ๋กœ, start ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ๋ฌธ์ž์—ด ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ.

Favicon

  • Favorite icon
  • ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ € ํƒญ ๋ฐ ์ฆ๊ฒจ์ฐพ๊ธฐ ์•„์ด์ฝ˜์œผ๋กœ ์“ฐ์ธ๋‹ค.
  • Favicon์ด ์ค€๋น„๊ฐ€ ์•ˆ ๋œ ์ƒํƒœ์—์„œ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์ฝ˜์†”์˜ 404 ์—๋Ÿฌ๋ฅผ ์—†์• ๊ณ  ์‹ถ๋‹ค๋ฉด, head ํƒœ๊ทธ ์•ˆ์— ๋ฐ‘์˜ link ํƒœ๊ทธ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ๋œ๋‹ค.
<link rel="icon" href="#" />

Vim์—์„œ ์Šคํฌ๋กคํ•˜๊ธฐ

  • ํ•œ ์ค„์”ฉ ์Šคํฌ๋กค
    • ์œ„๋กœ: Ctrl + y
    • ์•„๋ž˜๋กœ: Ctrl + e
  • ํŽ˜์ด์ง€ ์ ˆ๋ฐ˜๋งŒํผ ์Šคํฌ๋กค
    • ์œ„๋กœ: Ctrl + u
    • ์•„๋ž˜๋กœ: Ctrl + d
  • ํŽ˜์ด์ง€ ๋‹จ์œ„ ์Šคํฌ๋กค
    • ์œ„๋กœ: Ctrl + b
    • ์•„๋ž˜๋กœ: Ctrl + f

kakao-js-sdk ํƒ€์ž… ์ •๋ณด ์–ป๊ธฐ

  • JS์—์„œ๋Š” window ๊ฐ์ฒด์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  • TS์—์„œ๋Š” window์— ์นด์นด์˜ค sdk ํƒ€์ž… ์ •๋ณด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ.
  • ๋Œ€๋ถ€๋ถ„ window interface์— Kakao: any๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•จ.
  • ํ•˜์ง€๋งŒ @types/kakao-js-sdk ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ํƒ€์ž… ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ.
$ yarn add -D @types/kakao-js-sdk

DOMContentLoaded VS load

  • DOMContentLoaded ์ด๋ฒคํŠธ๋Š” ์ดˆ๊ธฐ HTML document๊ฐ€ ์™„์ „ํžˆ ๋กœ๋”ฉ ๋ฐ ํŒŒ์‹ฑ๋˜์—ˆ์„ ๋•Œ ์ž‘๋™๋˜๋Š” ์ด๋ฒคํŠธ๋‹ค. ์—ฌ๊ธฐ์„œ ๋กœ๋”ฉ์ด๋ž€ ์Šคํƒ€์ผ์‹œํŠธ, ์ด๋ฏธ์ง€, ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ œ์™ธํ•œ ์ˆœ์ˆ˜ํ•œ document ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๋งํ•œ๋‹ค.
  • load ์ด๋ฒคํŠธ๋Š” ์œ„์—์„œ ์ œ์™ธํ•œ ์Šคํƒ€์ผ์‹œํŠธ, ์ด๋ฏธ์ง€, ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ ๋กœ๋”ฉ ๋“ฑ์ด ๋ชจ๋‘ ๋๋‚œ ์‹œ์ ์—์„œ ์ž‘๋™๋˜๋Š” ์ด๋ฒคํŠธ๋‹ค.

:disabled ์ƒํƒœ์ธ ๋ฒ„ํŠผ์€ ๋™์‹œ์— :active ์ƒํƒœ๋„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

<button disabled>๋ฒ„ํŠผ</button>
  • ์œ„์ฒ˜๋Ÿผ disabled ์ƒํƒœ์ธ ๋ฒ„ํŠผ์€ ๋ˆŒ๋Ÿฌ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ, CSS์—์„œ :disabled ๊ฐ€์ƒ ์„ ํƒ์ž๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ฒ„ํŠผ์ด๋ผ๋„ :active ์ƒํƒœ๋Š” ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ์ ์šฉํ–ˆ๋‹ค๋ฉด ๋น„ํ™œ์„ฑํ™”๋œ ๋ฒ„ํŠผ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํด๋ฆญ ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค.
  • ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” :enabled:active์ฒ˜๋Ÿผ ํ™œ์„ฑ ์ƒํƒœ์ธ ๋ฒ„ํŠผ์—๋งŒ active ์ƒํƒœ์ผ ๋•Œ์˜ ์Šคํƒ€์ผ์„ ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
button:enabled:active {
  background-color: red;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.