Team Convention - Seoul-InterViewer/InterViewer GitHub Wiki

To Do

  • ๋ชจ๋“  PR์€ ํŒ€์›๋“ค๊ณผ ์‚ฌ์ „/์‚ฌํ›„ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํŒ€์›๋“ค ๊ฐ„ ์ด๊ฒฌ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์ˆ˜๊ฒฐ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์งˆ๋ฌธ์„ ๋ถ€๋‹ด์Šค๋Ÿฌ์›Œํ•˜์ง€ ์•Š๊ณ , ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์€ ์–ธ์ œ๋“  ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ž์˜ ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ์€ ์ •๊ธฐ์ ์œผ๋กœ ๊ณต์œ ํ•ด ํŒ€ ์ „์ฒด๊ฐ€ ๋งฅ๋ฝ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ์ •๊ธฐ์ ์œผ๋กœ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๋˜, ๋ฆฌ๋ทฐ๋Š” ์ผ๋ฐฉ์ ์ธ ํ”ผ๋“œ๋ฐฑ๋ณด๋‹ค โ€œ๋Œ€ํ™”โ€ ์ค‘์‹ฌ์œผ๋กœ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.
  • ๊ธฐํš, ๋””์ž์ธ, ๊ฐœ๋ฐœ ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ์•„์ด๋””์–ด๋Š” ๋ˆ„๊ตฌ๋“  ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฑด๊ฐ• ๋ฌธ์ œ ๋“ฑ ๋ถ€๋“์ดํ•œ ์ƒํ™ฉ ๋ฐœ์ƒ ์‹œ ์‚ฌ์ „์— ํŒ€์›๋“ค์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ณ  ์–‘ํ•ด๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • TASK/FEATURE ISSUE๊ฐ€ ์˜ฌ๋ผ์˜ค๋ฉด ์ž‘์—…ํ•˜๋˜๊ฑธ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  ISSUE ํ•ด๊ฒฐ๋ถ€ํ„ฐ ํ•ฉ๋‹ˆ๋‹ค.

Not To Do

  • ํŒ€์›๋“ค๊ณผ ๋…ผ์˜ ์—†์ด push๋‚˜ merge๋ฅผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ์•ฝ์†์„ ์ง€ํ‚ค๋ฉฐ, ๋ถ€๋“์ดํ•œ ๊ฒฝ์šฐ์—” ์‚ฌ์ „์— ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐœ์ธ์ ์ธ ๊ฐ์ •์ด ๋‹ด๊ธด ํ”ผ๋“œ๋ฐฑ์€ ์ง€์–‘ํ•˜๋ฉฐ, ์–ธ์ œ๋‚˜ ๊ฑด์„ค์ ์ธ ๋ฐฉํ–ฅ์œผ๋กœ ์˜๊ฒฌ์„ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ํŒ€์›์˜ ์ž‘์—…์„ ๋ฌด๋‹จ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ , ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋จผ์ € ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ๊ทœ์น™

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ง‘๋‹ˆ๋‹ค. ํ•œ ์ค„๋งŒ ์ž‘์„ฑํ•ด๋„ ์„ค๋ช…์ด ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ์ œ๋ชฉ๋งŒ์œผ๋กœ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š”์ง€ ๋งฅ๋ฝ๊ณผ ์„ค๋ช…์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ณธ๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ์„ ์ž‘์„ฑํ•˜๋Š” ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์•ž์— ๋ถ™์ด๋Š” "feat", "init" ๋“ฑ์˜ ์ ‘๋‘์‚ฌ๋ฅผ "์ปค๋ฐ‹ ํƒ€์ž…" ๋˜๋Š” "์ปค๋ฐ‹ ์ปจ๋ฒค์…˜(Commit Convention)" ๊ฐ–์ถ”๊ธฐ
  • ์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ์„ ํ•œ ์ค„ ๋„์›Œ ๋ถ„๋ฆฌํ•˜๊ธฐ
  • ์ œ๋ชฉ์€ 70์ž ์ด๋‚ด๋กœ ์ ๊ธฐ
  • ์ œ๋ชฉ ๋์— . ๋Š” ๊ธˆ์ง€
์ฃผ์š” ์ปค๋ฐ‹ ํƒ€์ž… ์˜ˆ์‹œ:

feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix: ๋ฒ„๊ทธ ์ˆ˜์ •
docs: ๋ฌธ์„œ ๋ณ€๊ฒฝ
merge: ๋ธŒ๋žœ์น˜ ๋ณ‘ํ•ฉ
style: ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ(์ฝ”๋“œ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ)
refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •
chore: ํ”„๋กœ์ ํŠธ์˜ ํ™˜๊ฒฝ ์„ค์ •/๊ตฌ์ถ•, ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋‚˜ ๋ณด์กฐ ๋„๊ตฌ ๋ณ€๊ฒฝ
init: ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐํ™”
build: ๋นŒ๋“œ ๊ด€๋ จ ๋ณ€๊ฒฝ์‚ฌํ•ญ
ci: CI ์„ค์ • ํŒŒ์ผ ๋ณ€๊ฒฝ
schema: db ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ
migration: db ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ sqlํŒŒ์ผ๋กœ ์ €์žฅ
release: ๋ฒ„์ „ ๋ฐฐํฌ

์ค‘์š”: release๋Š” ๋ฐ˜๋“œ์‹œ ์ปค๋ฐ‹๋ฉ”์‹œ์ง€์— ๋ฒ„์ „(0.0.0 ํ˜•์‹)์„ ์ž‘์„ฑํ•ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, release์ปค๋ฐ‹ ํƒ€์ž…์€ main๋ธŒ๋žœ์น˜์— PR์„ ์˜ฌ๋ฆฌ๊ธฐ ์ „ ์ตœ์ข… ์ปค๋ฐ‹์—๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

release: v1.2.4 ๋ฒ„์ „ ๋ฐฐํฌ

- ๋ฐ”๋€๋‚ด์šฉ
- ๋ฐ”๋€๋‚ด์šฉ2
์‹ค์ œ ์ปค๋ฐ‹ ์ž‘์„ฑ ์˜ˆ์‹œ:

feat: ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๋กœ๊ทธ์ธ ํผ ๊ตฌํ˜„
- ์Šคํƒ€์ผ ์ˆ˜์ •

PR ๊ทœ์น™

PR์€ ์ง„์งœ ๊ธ‰ํ•œ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ ๋ณธ์ธ ์ œ์™ธ ์ตœ์†Œ ํ•œ๋ช…์˜ Approve ๋ฆฌ๋ทฐ๊ฐ€ ๋ ์–ด์•ผ ๋ณ‘ํ•ฉํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Comment X

Comment๋Š” ์ฝ”๋“œ ์ด์™ธ์˜ ๋ฆฌ๋ทฐ (ํ•ด๋‹น ์ฝ”๋“œ ์ž‘๋™ ํ™•์ธ๋ฉ”์‹œ์ง€, ๋งํฌ ์ฒดํฌ, ๋””์ž์ธ์ œ์•ˆ)์„ ํ• ๋•Œ ์‚ฌ์šฉ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์ „๋ถ€ review๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

start a reviewํ•˜๋ฉด ์ฝ”๋“œ์—๋‹ค ๋‹ค๋Š” ์ฝ”๋ฉ˜ํŠธ๋“ค์ด ์ž„์‹œ์ €์žฅ๋ผ์„œ, ๋งˆ์ง€๋ง‰์— submit์„ ํ•˜๋ฉด ๊น”๋”ํ•˜๊ฒŒ ํ•˜๋‚˜์˜ ๋ฆฌ๋ทฐ๋กœ ๋‚จ๊ฒจ์ง‘๋‹ˆ๋‹ค.

PR ํ˜•์‹

๐Ÿ“ PR ์ œ๋ชฉ

  • feat / ๋ธŒ๋žœ์น˜๋ช… - ๊ฐ„๋‹จํ•œ ์ž‘์—…๋‚ด์šฉ

๐Ÿ“ PR ๋ณธ๋ฌธ

๋ฐ˜์˜ ๋ธŒ๋žœ์น˜

  • ex) INTER-01-Button -> dev

PR ํƒ€์ž…(ํ•˜๋‚˜ ์ด์ƒ์˜ PR ํƒ€์ž…์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”)

  • ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ๊ธฐ๋Šฅ ์‚ญ์ œ
  • ๋ฒ„๊ทธ ์ˆ˜์ •
  • ์˜์กด์„ฑ, ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๋นŒ๋“œ ๊ด€๋ จ ์ฝ”๋“œ ์—…๋ฐ์ดํŠธ

์ž‘์—… ๋‚ด์šฉ

  • ์ด๋ฒˆ PR์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”(์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ๊ฐ€๋Šฅ)

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ (์„ ํƒ)

  • ex) ๋ฒ ์ด์Šค ๋ธŒ๋žœ์น˜์— ํฌํ•จ๋˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋ฌผ์— ๋Œ€ํ•œ ์Šคํฌ๋ฆฐ์ƒท, GIF, ํ˜น์€ ๋ผ์ด๋ธŒ ๋ฐ๋ชจ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ƒ˜ํ”ŒAPI๋ฅผ ์ฒจ๋ถ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท (์„ ํƒ)

๋ฆฌ๋ทฐ ์š”๊ตฌ์‚ฌํ•ญ(์„ ํƒ)

  • ๋ฆฌ๋ทฐ์–ด๊ฐ€ ํŠน๋ณ„ํžˆ ๋ด์ฃผ์—ˆ์œผ๋ฉด ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”
  • ex) ๋ฉ”์„œ๋“œ XXX์˜ ์ด๋ฆ„์„ ๋” ์ž˜ ์ง“๊ณ  ์‹ถ์€๋ฐ ํ˜น์‹œ ์ข‹์€ ๋ช…์นญ์ด ์žˆ์„๊นŒ์š”?

๋ธŒ๋žœ์น˜ ์ด๋ฆ„ ํ˜•์‹

์ข…๋ฅ˜ ์‚ฌ์šฉํŒจํ„ด ํŠน์ง•
main main ํ”„๋กœ๋•์…˜ ์Šค๋ƒ…์ƒท ๊ฐ€์žฅ ์ตœ์‹ ์˜ ๋ฐฐํฌ๋œ ๋ฒ„์ „
develop dev ๋ฆด๋ฆฌ์ฆˆ ๊ณ„ํš์— ๋”ฐ๋ผ์„œ Github์—์„œ ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜๋กœ ์ง€์ •
feature INTER-00(์ง€๋ผ ์ด์Šˆ๋ฒˆํ˜ธ)-๊ธฐ๋Šฅ๋ช…(ํ•œ๋‹จ์–ด, PascalCase) / INTER-00-ListComponent develop์— ๋ณ‘ํ•ฉ
issue ISSUE-00(์ด์Šˆ๋ฒˆํ˜ธ)-์ด์Šˆ๋ช…(ํ•œ๋‹จ์–ด, PascalCase) / ISSUE-11-FixTailwindClasses develop์— ๋ณ‘ํ•ฉ
hotfix HOTFIX-00(์ด์Šˆ๋ฒˆํ˜ธ)-hotfix๋ช…(ํ•œ๋‹จ์–ด, PascalCase) / HOTFIX-911-OptimizeStateTransfer main์— ๋ณ‘ํ•ฉ

Lint ๊ทœ์น™

์ฃผ์š” ๊ทœ์น™

  • var ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋” ๋งŽ์€ ์ •๋ณด๋Š” https://standardjs.com/rules.html ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

  • ์œ„ ๋งํฌ์˜ ๋ฃฐ์—์„œ ์˜ˆ์™ธ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

    • ์„ธ๋ฏธ ์ฝœ๋ก  ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • Double Quote("") ์‚ฌ์šฉ๋งŒ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์ด๋ฆ„

  • ํด๋ž˜์Šค, ์ปดํฌ๋„ŒํŠธ, ์ธํ„ฐํŽ˜์ด์Šค, ํƒ€์ž…: PascalCase
  • ํ›… ํ•จ์ˆ˜: use๋ฅผ ์ ‘๋‘์–ด๋กœ ์‚ฌ์šฉํ•˜๋Š” camelCase (useAuth.ts)
  • others: camelCase

ํŒŒ์ผ ์ด๋ฆ„

  • ์ปดํฌ๋„ŒํŠธ, DTO, Entity ํŒŒ์ผ : PascalCase
  • ์ด๋ฏธ์ง€, ์˜์ƒ ๋“ฑ ์ •์  ํŒŒ์ผ, ๋ผ์šฐํŒ… ํด๋”: kebab-case
  • [slug]์™€ ๊ฐ™์€ ๋™์  ๋ผ์šฐํŒ… ํด๋”: camelCase
  • others: camelCase
  • ๊ธด ํŒŒ์ผ๋ช…์€ ์—ญํ• ๊ณผ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด dot notation์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ํ•œ๋‹ค.

ex) createTodo.usecase.ts ex2) todo.test.ts ex3) CreateTodo.dto.ts

html์˜ ํด๋ž˜์Šค & ์•„์ด๋”” ์ด๋ฆ„

  • snake_case

์Šคํƒ€์ผ์‹œํŠธ

  • ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ, globals.css, variables.css ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„

  • ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜์‹œ์—๋Š” ์•ž์— I๋ฅผ ๋ถ™์ธ ํ˜•ํƒœ์˜ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ: interface IFormRepository {}
  • ์ด๋Š” Domain๊ณ„์ธต์˜ repositories ํด๋”๋‚ด์˜ ํŒŒ์ผ๋ช… ์ž‘๋ช…๊ทœ์น™์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. (infra์˜ repositoriesํŒŒ์ผ๊ณผ ํ˜ผ๋ˆ์ด ์—†๊ธฐ์œ„ํ•จ.) ์˜ˆ์‹œ: ISupabase.repository.ts

ํ•จ์ˆ˜ ํƒ€์ž…

  • ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ, ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ๋Š” ์ „๋ถ€ function ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (Next.js์˜ ๊ณต์‹ ์ปจ๋ฒค์…˜)
  • others: ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ

ex) export default function RootLayout() {} ex2) const Modal = () => {}

Import & Export ๊ทœ์น™

  • ์ปดํฌ๋„ŒํŠธ ํด๋”์—์„œ๋Š” index.ts๋ฅผ ํ†ตํ•œ ์žฌ export๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. (์ผ๊ด€์„ฑ์„ ์œ„ํ•จ)
//index.ts
export * from "./Input";
export * from "./input.type";
export * from "./input.variants";

๋˜ํ•œ 1๋ށ์Šค(../)๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ์š”์†Œ๋ฅผ importํ• ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ @ alias๋ฅผ ํ†ตํ•ด import ํ•ฉ๋‹ˆ๋‹ค.

import { Input } from "@/app/components/input"; import { Input } from "./Input";

๊ฐœ๋ณ„ ํŒŒ์ผ์—์„œ export default๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  export const ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ export๋ฅผ ํ•˜์…”์•ผ index.ts์—์„œ ์œ ํšจํ•˜๊ฒŒ ์žฌ export๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

node & npm ๋ฒ„์ „ ํ†ต์ผ

  • node : v22.15.1
  • pnpm : v10.11.0

์‹œ๋งจํ‹ฑ ํƒœ๊ทธ

  • ๊ฐ ํŽ˜์ด์ง€์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ๋Š” ๋ฐ˜๋“œ์‹œ mainํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • sectionํƒœ๊ทธ๋กœ ํ•ญ๋ชฉ์„ ๊ตฌ๋ถ„ํ•˜๊ณ  section ํƒœ๊ทธ๋‚ด์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜๋ผ๋„ ์ œ๋ชฉํƒœ๊ทธ๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ํ—ค๋”์˜ ๋ฉ”์ธ๋กœ๊ณ ๋Š” h1๊ณผ a๋กœ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.