Coder Social home page Coder Social logo

react-week's Introduction

๐Ÿ“ ํˆฌ๋‘ ๋ฆฌ์ŠคํŠธ

๐Ÿ“Œ ๊ณผ์ œ ๊ฐœ์š”

๋ชฉํ‘œ

  • ๋ ˆ๋ฒจ 4 ๊ณผ์ œ์— ์‚ด์„ ๋ถ™์—ฌ, ๋‚˜๋งŒ์˜ React App ์„ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค.
    • ์ฃผ์ œ๋Š” ๋ฐ˜๋“œ์‹œ Todo List๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ๊ณผ ๋Œ“๊ธ€์„ ๊ฐ€์ง„ ๊ตฌ์กฐ์˜ ์›น ์„œ๋น„์Šค๋ฉด OK!

๐Ÿ‘ Checklist : ๊ณผ์ œ ์ง„ํ–‰ ๊ฐ„ ๊ณ ๋ฏผํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„

  • ์ƒํƒœ๊ด€๋ฆฌ ( ์œ ์ง€ / ์ดˆ๊ธฐํ™” ) ๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋‚˜์š”?
  • ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๋‚˜์š”?
  • ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋ฏธํกํ•œ ๋ถ€๋ถ„์€ ์—†๋‚˜์š”?

โš™๏ธ features : ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ

  • (1) ๊ณตํ†ต
    • UI ๊ตฌํ˜„ํ•˜๊ธฐ
    • API ๋ช…์„ธ์„œ ์ž‘์„ฑํ•˜๊ธฐ
  • (2) ๋ณธ๋ฌธ (ex: ํ• ์ผ) CRUD ๊ตฌํ˜„
    • ๋ณธ๋ฌธ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ ํ•˜๊ธฐ
    • ๋ณธ๋ฌธ ์กฐํšŒ ํ•˜๊ธฐ
    • ๋ณธ๋ฌธ ์ถ”๊ฐ€ ํ•˜๊ธฐ
    • ๋ณธ๋ฌธ ์‚ญ์ œ ํ•˜๊ธฐ
    • ๋ณธ๋ฌธ ์ˆ˜์ • ํ•˜๊ธฐ
  • (3) ๋ฐฐํฌ
    • json-server ์„œ๋ฒ„ ๋ฐฐํฌ
    • ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ (S3, vercel ๋“ฑ ์ž์œ )

๐Ÿ“Œ Requirement : ๊ณผ์ œ์— ์š”๊ตฌ๋˜๋Š” ์‚ฌํ•ญ

  • (1) UI/UX
    • ์ฐฝ์˜์ ์ธ UI/UX๋กœ ๊ณผ์ œ๋ฅผ ๋งŒ๋“œ์„ธ์š”.
    • ์˜ˆ์‹œ์— ์—†์–ด๋„ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๋ฉด OK!
  • (2) ํ•„์ˆ˜ ์š”๊ตฌ ์‚ฌํ•ญ
    • ๋™์  ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
    • 1๊ฐœ ์ด์ƒ์˜ Custom Hook์„ ๊ตฌํ˜„ํ•˜์„ธ์š”.
    • Form์— ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜์„ธ์š”. ์œ ํšจ์„ฑ ๊ฒ€์ฆ์ด๋ž€, ์•„๋ž˜์˜ ์˜ˆ์‹œ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
      • ex: ์ œ๋ชฉ์„ 10๊ธ€์ž ์ด์ƒ ๊ธฐ์ž…ํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ธ€์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋„๋ก ์ œํ•œ โ†’ Alert ์œผ๋กœ ์•ˆ๋‚ด
      • ex: Form์—์„œ ๋ชจ๋“  input์— ๊ฐ’์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด, ๋ฒ„ํŠผ์ด ๋น„ํ™œ์„ฑํ™”
    • ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ 1๊ฐœ๋กœ ๋ชจ๋“  ๋ฒ„ํŠผ์„ ๊ตฌํ˜„ํ•˜์„ธ์š”. ๋ชจ๋“  ์Šคํƒ€์ผ๊ณผ ๊ธฐ๋Šฅ์„ ๋ฒ„ํŠผ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŒ๋Šฅ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
    • development ํ™˜๊ฒฝ์—์„œ๋งŒ redux devtool์ด ํ™œ์„ฑํ™” ๋˜๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฐํฌ๋œ ๊ฒฐ๊ณผ๋ฌผ์—์„œ๋Š” console.log() ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • .env ๋ฅผ ์ด์šฉํ•ด์„œ API ์„œ๋ฒ„์˜ URL ์ฝ”๋“œ์ƒ์—์„œ ์ˆจ๊ธฐ๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • (3) API ๋ช…์„ธ์„œ (ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ ํ›„ ์ž‘์„ฑ) ํ”„๋กœ์ ํŠธ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๊ฐ„์ด API ์„œ๋ฒ„์—์„œ ์–ด๋–ค API๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋Š”์ง€ ๋ช…์„ธ์„œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

๐Ÿƒ Challenge: ๋„์ „ํ•ด๋ณผ๋งŒํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๊ฐ ํ‚ค์›Œ๋“œ๋“ค์ด ์–ด๋–ค ๊ธฐ๋Šฅ์ธ์ง€ ์ฐพ์•„๋ณด๊ณ  ๋„์ „ํ•ด๋ณด์„ธ์š”. (ํ•„์ˆ˜ โŒ)

  • Infinite Scroll ๋˜๋Š” Pagination
    • ํ• ์ผ ๋˜๋Š” ๋Œ“๊ธ€์ด ์–‘์ด ๋งŽ์„ ๋•Œ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์Šคํฌ๋กค์ด ๊ฐ€์žฅ ์•„๋ž˜์— ๋„๋‹ฌํ• ๋•Œ๋งˆ๋‹ค ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ Fetching ํ•˜๋„๋ก ๊ตฌํ˜„ํ•ด๋ด…๋‹ˆ๋‹ค.
  • Form Help Text
    • Form์˜ ์œ ํšจ์„ฑ์„ ์ฒดํฌํ•˜๊ณ , ์œ ํšจ์„ฑ์„ ์ฒดํฌ ํ•˜์ง€ ๋ชปํ–ˆ์„ ๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ํšจ์„ฑ์„ ์ฒดํฌ ํ•˜์ง€ ๋ชปํ•œ ์ด์œ ์— ๋Œ€ํ•ด์„œ ์•ˆ๋‚ดํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ด…๋‹ˆ๋‹ค.

๐Ÿ“ ๊ตฌํ˜„ ๋ฐฉ์‹

์‚ฌ์šฉ์ž ์ธ์ฆ/์ธ๊ฐ€ (JWT ๊ด€๋ฆฌ: LocalStorage => Cookie๋กœ ๋ณ€๊ฒฝ)

1. TodoList/Comments data

  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ:
    • axios
    • json-server
    • TanStackQuery

2. User data

  • ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์—์„œ ๊ด€๋ฆฌ:
    • axios
    • https://moneyfulpublicpolicy.co.kr api
    • Local Storage
    • Redux Tool Kit

3. ์ธ์ฆ์„ ์œ„ํ•œ JWT ํ† ํฐ (accessToken๋งŒ ์žˆ์Œ)

  • ์ฟ ํ‚ค์—์„œ ๊ด€๋ฆฌ:
    • axios
    • https://moneyfulpublicpolicy.co.kr api
    • cookie

4. ๋ฐฐํฌ

  • json-server => ๋ฌด๋ฃŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์„œ glitch๋กœ json ๋ฐฐํฌ
  • vercel ๋ฐฐํฌ

5. ๊ตฌํ˜„

  • ํˆฌ๋‘ CRUD
  • ํˆฌ๋‘ ๋ณ„ ์ƒ์„ธํŽ˜์ด์ง€ ๋Œ“๊ธ€ CRUD

6. API ์„ค๊ณ„

  • api = ๋ฐฐํฌํ•œ json ์„œ๋ฒ„
  • authApi = https://moneyfulpublicpolicy.co.kr
๊ตฌ๋ถ„ ๊ธฐ๋Šฅ URL Method request response
Auth ํšŒ์›๊ฐ€์ž… authApi/register POST {
"id": "์œ ์ € ์•„์ด๋””",
"password": "์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ",
"nickname": "์œ ์ € ๋‹‰๋„ค์ž„"
}
status: 201 Created
{
"message": "ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ",
"success": true
}

status: 401 Unauthorized
{
"message": "์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋‹‰๋„ค์ž„์€ ํ•„์ˆ˜๊ฐ’์ž…๋‹ˆ๋‹ค."
}

status: 409 Conflict
{
"message": "์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์œ ์ € id์ž…๋‹ˆ๋‹ค."
}
Auth ๋กœ๊ทธ์ธ authApi/login POST {
"id": "์œ ์ € ์•„์ด๋””",
"password": "์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ"
}
status: 200 OK
{
"accessToken": "์–ต์„ธ์Šค ํ† ํฐ",
"userId": "์œ ์ € ์•„์ด๋””",
"success": true,
"avatar": null,
"nickname": "๋‹‰๋„ค์ž„"(๊ธฐ๋ณธ๊ฐ’ "์ต๋ช…"์œผ๋กœ ์„ค์ •)
}

status: 401 Unauthorized
{
"message": "id๋Š” 4๊ธ€์ž ์ด์ƒ์˜ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."
}

status: 401 Unauthorized
{
"message": "์กด์žฌํ•˜์ง€ ์•Š๋Š” ์œ ์ €์ž…๋‹ˆ๋‹ค."
}

status: 401 Unauthorized
{
"message": "password๋Š” 4๊ธ€์ž ์ด์ƒ์˜ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."
}

status: 401 Unauthorized
{
"message": "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
}
Auth ์œ ์ € ์กฐํšŒ authApi/user GET {Authorization: Bearer ์–ต์„ธ์Šคํ† ํฐ} status: 200 OK
{
"id": "์œ ์ € ์•„์ด๋””",
"nickname": "๋‹‰๋„ค์ž„"
"avatar": null,
"success": true,}

status: 401 Unauthorized(ํ† ํฐ ์—†๋Š” ๊ฒฝ์šฐ)
{
"message": "ํ—ค๋”์— authorization ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."
}
Todo ์ „์ฒด ํˆฌ๋‘ ์กฐํšŒ /api/todoList GET - {
"todoList": [
{
"id": "ํˆฌ๋‘ ์•„์ด๋””",
"userId": "์œ ์ € ์•„์ด๋””",
"title": "์ œ๋ชฉ",
"content": "๋‚ด์šฉ",
"isDone": ๋ถˆ๋ฆฌ์–ธ ๊ฐ’
},
{
"id": "ํˆฌ๋‘ ์•„์ด๋””",
"userId": "์œ ์ € ์•„์ด๋””",
"title": "์ œ๋ชฉ",
"content": "๋‚ด์šฉ",
"isDone": ๋ถˆ๋ฆฌ์–ธ ๊ฐ’
},
...
]
Todo ํˆฌ๋‘ ์ƒ์„ธ ์กฐํšŒ /api/todoList/:id GET {id: id} {
"id": "ํˆฌ๋‘ ์•„์ด๋””",
"userId": "์œ ์ € ์•„์ด๋””",
"title": "์ œ๋ชฉ",
"content": "๋‚ด์šฉ",
"isDone": ๋ถˆ๋ฆฌ์–ธ ๊ฐ’
}
Todo ํˆฌ๋‘ ์ƒ์„ฑ /api/todoList/:id POST {
"id": "ํˆฌ๋‘ ์•„์ด๋””"(์ž๋™ ์ƒ์„ฑ),
"userId": "์œ ์ € ์•„์ด๋””",
"title": "์ œ๋ชฉ",
"content": "๋‚ด์šฉ",
"isDone": false (์ดˆ๊ธฐ๊ฐ’ false)
}
Todo ํˆฌ๋‘ ์‚ญ์ œ /api/todoList/:id DELETE {id: id}
Todo ํˆฌ๋‘ ์ˆ˜์ • /api/todoList/:id PATCH {
...currentTodo,
"title": "์ˆ˜์ •ํ•œ ์ œ๋ชฉ",
"content": "์ˆ˜์ •ํ•œ ๋‚ด์šฉ",
}
Todo ํˆฌ๋‘ ์ˆ˜์ •(isDone ํ† ๊ธ€) /api/todoList/:id PATCH {
...currentTodo,
"isDone": !currentTodo.isDone
}
Comment ํˆฌ๋‘ ๋ณ„ ๋Œ“๊ธ€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ /api/comments?todoId=:id GET {id: id} [
{
"id": "๋Œ“๊ธ€ ์•„์ด๋””",
"userId": "์œ ์ € ์•„์ด๋””",
"todoId": "๋™์ผํ•œ ํˆฌ๋‘ ์•„์ด๋””",
"comment": "๋Œ“๊ธ€"
},
{
"id": "๋Œ“๊ธ€ ์•„์ด๋””",
"userId": "์œ ์ € ์•„์ด๋””",
"todoId": "๋™์ผํ•œ ํˆฌ๋‘ ์•„์ด๋””",
"comment": "๋Œ“๊ธ€"
},
]
Comment ๋Œ“๊ธ€ ์ƒ์„ฑ /api/comments POST {
"id": "๋Œ“๊ธ€ ์•„์ด๋””"(์ž๋™ ์ƒ์„ฑ),
"userId": "์œ ์ € ์•„์ด๋””",
"todoId": "ํˆฌ๋‘ ์•„์ด๋””",
"comment": "๋Œ“๊ธ€"
}
Comment ๋Œ“๊ธ€ ์‚ญ์ œ /api/comments/:id DELETE {id: id}
Comment ๋Œ“๊ธ€ ์ˆ˜์ • /api/comments/:id PATCH {
...currentComment,
"comment": "์ˆ˜์ •ํ•œ ๋Œ“๊ธ€"
}

โœ๏ธ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€

1. Custom Hook์„ ๊ตฌํ˜„ํ•˜์‹ค ๋•Œ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์…จ๋‚˜์š”? ๋˜ํ•œ Custom Hook์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ด๋–ค ์ด์ ์„ ์–ป์œผ์…จ๋‚˜์š”?

  1. ๋ฆฌ์•กํŠธ ํฌํƒˆ ์‚ฌ์šฉ์„ ์œ„ํ•œ modal ํ›… ์ƒ์„ฑ
  • ์ด์ : ํ•„์š”ํ•œ ๊ณณ์—์„œ ๋น ๋ฅด๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด mutate, query ํ›… ์ƒ์„ฑ
  • ์ด์ : ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€ ๋กœ์ง ๋ณต์žก์„ฑ ๊ฐ์†Œ ๋ฐ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ
  • ๋‹จ์ : ํŒŒ์ผ์–‘ ์ฆ๊ฐ€

2. API ์„œ๋ฒ„์˜ URL์„ .env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆจ๊ธฐ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

  • ๋ณด์•ˆ

3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๊ฐ’๋“ค์„ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ณต์œ ํ•˜์…จ๋‚˜์š”?

  • ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ: ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜ค๋Š” TodoList, Comments์˜ ๊ฒฝ์šฐ TanStackQuery์œผ๋กœ ๊ด€๋ฆฌ
  • ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๊ด€๋ฆฌ: Error, Modal ๋“ฑ์€ useState ๋ฐ ๋ฆฌ๋•์Šค ํˆดํ‚ท์œผ๋กœ ๊ด€๋ฆฌ

react-week's People

Contributors

summereuna avatar dependabot[bot] avatar

Watchers

 avatar

react-week's Issues

[์ฝ”๋“œ ๋ฆฌ๋ทฐ] :Lv1

1. ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ

์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์‹œ๊ณ  ๋ถ€๋ถ„ ์ฃผ์„ ๋•๋ถ„์— ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ์Šต๋‹ˆ๋‹ค.


2. ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ

button๊ณผ input, layout, card๋ถ€๋ถ„์„ ๋‚˜๋ˆ„์–ด์„œ ํ™œ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • layout ๋ถ€๋ถ„์— header๋ฅผ ๋„ฃ์–ด์„œ ๊ด€๋ฆฌํ•˜์—ฌ layout์œผ๋กœ ๊ฐ์‹ผ๋‹ค๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€์— header๊ฐ€ ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ • ๐Ÿ‘
  • Button ์ปดํฌ๋„ŒํŠธ์— type์ด๋ผ๋Š” ๊ฐ’์„ ๋ฐ›์•„์„œ ์Šคํƒ€์ผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

3. card ์ถ”๊ฐ€ ์‹œ id ๊ฒ€์ฆ ๋ถ€๋ถ„

์กฐ๊ฑด๋ฌธ์œผ๋กœ ์ค‘๋ณต ์•„์ด๋””๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ๊ฒ€์ฆํ•˜๋Š” ๋ถ€๋ถ„ ๋ฐฐ์›Œ๊ฐ‘๋‹ˆ๋‹ค. ๐Ÿ‘€๐Ÿ‘€


4. import

tsconfig.json์œผ๋กœ ๋”ฐ๋กœ ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ €๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹๊ณ  ๋ณด๊ธฐ๋„ ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์š”!


์ œ์•ˆ ๐Ÿ™‹โ€โ™‚๏ธ

  1. id ๊ฒ€์ฆ๋ถ€๋ถ„์ฒ˜๋Ÿผ input๋„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  2. css๋ถ€๋ถ„ ๊น”๋”ํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ ๋ณ„๋กœ ๊ด€๋ฆฌํ•ด๋ณด์‹œ๋Š” ๊ฑด ์–ด๋–ค๊ฐ€์š”?

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.