Skip to content

Commit

Permalink
๐Ÿ“ [#3] Collectors Retrospective ์•„ํ‹ฐํด๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค
Browse files Browse the repository at this point in the history
  • Loading branch information
hyoungqu23 committed Jan 29, 2024
1 parent 2b7dd50 commit 38b9ef9
Show file tree
Hide file tree
Showing 2 changed files with 244 additions and 0 deletions.
244 changes: 244 additions & 0 deletions contents/articles/collectors-retrospective.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
---
title: Collectorโ€™s ํ”„๋กœ์ ํŠธ ํšŒ๊ณ 
description: ์—˜๋ฆฌ์Šค SW ์—”์ง€๋‹ˆ์–ด ํŠธ๋ž™ 2๊ธฐ ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ Collectorโ€™s ํšŒ๊ณ 
createdAt: 2022-06-05
category: Retrospective
thumbnail: '/images/articles/Collectors-Retrospective/Collectors Logo.png'
tags:
- JavaScript
- Retrospective
---

## ์‹œ์ž‘

์—˜๋ฆฌ์Šค์—์„œ ์‚ฌ์‹ค์ƒ ์ฒซ ๋ฒˆ์งธ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋Š” ์ž์‹ ์˜ ์ผ์ •์— ๋งž๊ฒŒ ์œ ๋™์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ํŒ€ ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜๊ณ , ํ˜‘์—…ํ•˜๊ณ , ํ”ผ๋“œ๋ฐฑํ•˜๋Š” ์ง€๊ฐ€ ์ œ์ผ ๊ถ๊ธˆํ–ˆ๋‹ค.

๊ฐ€์žฅ ๊ฑฑ์ •์Šค๋Ÿฌ์› ๋˜ ์ ์€ Git์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜์–ด ํŒ€์— ๋ฏผํ๋ฅผ ๋ผ์น˜์ง„ ์•Š์„์ง€์˜€๋‹ค. ํŒ€์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์ฒ˜์Œ์ด๋ผ add, commit, push๋งŒ ํ™œ์šฉํ–ˆ๋˜ ์ด์ „๊ณผ ๋‹ฌ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ๋˜๋ฉด ์•ˆ๋  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ด ๋ฏธ๋ฆฌ ์œ ํŠœ๋ธŒ๋กœ Git ๊ด€๋ จ ์˜์ƒ์„ ์ฐพ์•„๋ณด๊ธฐ๋„ ํ–ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ Git์„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ์ •๋„๋กœ๋Š” ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ ์ค‘์— ํ•˜๋‚˜์ด๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” Vanilla JavaScript๋กœ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— JavaScript์— ํ•œ๊ฒฐ ์ต์ˆ™ํ•ด์ง€๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ์œผ๋ฉด ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ CSS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š๊ณ  Pure CSS๋กœ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ํ•œ ๋ฒˆ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด์„œ CSS๋ฅผ ์กฐ๊ธˆ ๋” ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.

---

## ํ”„๋กœ์ ํŠธ

ํ”„๋ก ํŠธ์—”๋“œ 2๋ช…, ๋ฐฑ์—”๋“œ 2๋ช…์œผ๋กœ ๊ตฌ์„ฑ๋œ ์šฐ๋ฆฌ ํŒ€์€ ์ฒซ ๋ฏธํŒ…๋•Œ๋ถ€ํ„ฐ ์•ฝ๊ฐ„ ์ปจ์…‰์„ ์ข‹์•„ํ–ˆ๋‹ค. (๋ฌด๋‚œํ•œ ์ฃผ์ œ๊ฐ€ ์šฐ๋ฆฌ ํŒ€์›๋“ค์„ ์ปจ์…‰๊ดด๋ฌผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค..)

์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์ œ๋Š” ์‡ผํ•‘๋ชฐ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๋ฌผ๋ก  ์ฃผ์ œ๊ฐ€ ์ •ํ•ด์ง„ ๊ฒƒ์ด ์–ด๋–ค ์ธก๋ฉด์—์„œ๋Š” ๊ธฐํšํ•  ์‹œ๊ฐ„์„ ์ค„์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŽธํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ํŒ€์›๋“ค๊ณผ ์ง์ ‘ ์–ด๋–ค ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ• ์ง€ ๊ธฐํšํ•˜๋Š” ์‹œ๊ฐ„์ด ์—†์–ด ๋งค์šฐ ์•„์‰ฌ์› ๋‹ค. (๊ดœํžˆ ๋ถ€ํŠธ์บ ํ”„ ์ด๋ ฅ์„œ๊ฐ€ ๋™์ผํ•œ๊ฒŒ ์•„๋‹Œ๋“ฏ;)

์•„๋ฌดํŠผ ์‡ผํ•‘๋ชฐ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์ƒํ’ˆ์„ ํŒ๋งคํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋ฉฐ ์ค‘์š” ์ปจ์…‰๊ณผ ๋””์ž์ธ ์‹œ์•ˆ์„ Notion๊ณผ Figma๋ฅผ ํ™œ์šฉํ•ด ์ •๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ตญ ๋„ท ๋ชจ๋‘ ์ปจ์…‰์„ ๋ฒ„๋ฆฌ์ง€ ๋ชปํ•˜๊ณ  ์ดˆ๋Šฅ๋ ฅ, ๋งˆ๋ฒ•๊ฐ™์€ ๋Šฅ๋ ฅ์„ ํŒ๋งคํ•˜๋Š” Collectorโ€™s ์‡ผํ•‘๋ชฐ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์˜จ์ „ํžˆ JavaScript๋กœ๋งŒ ๊ตฌํ˜„ํ•˜์—ฌ MPA ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์—ˆ๊ณ , Pure CSS๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ๊ธฐ์ˆ  ์Šคํƒ์€ GitHub์˜ `README.md`์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

### ํ”„๋กœ์ ํŠธ ์ฃผ์š” ๊ธฐ๋Šฅ

ํ”„๋กœ์ ํŠธ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๊ณ„์†์ ์œผ๋กœ ์ถ”๊ฐ€๋˜์–ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

> **์ „์ฒด ๊ธฐ๋Šฅ**
1. GNB(Global Navigation Bar)
2. ์‚ฌ์ด๋“œ ํ€ต ๋ฉ”๋‰ด์™€ TopScroll ๋ฒ„ํŠผ

---

> **์œ ์ € ๊ธฐ๋Šฅ**
1. ํšŒ์› ๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ
2. ์†Œ์…œ ๋กœ๊ทธ์ธ - ์นด์นด์˜ค, ๋„ค์ด๋ฒ„, ๊ตฌ๊ธ€
3. ๋กœ๊ทธ์•„์›ƒ ๋ฐ ํšŒ์› ํƒˆํ‡ด
4. ํ™ˆํŽ˜์ด์ง€ ๋ฉ”์ธ
- ๋งค์ง„ ์ž„๋ฐ• ์ƒํ’ˆ ์ถ”์ฒœ ์„น์…˜
- ์‹ ์ƒํ’ˆ ์„น์…˜
- 10,000์› ์ดํ•˜ ์ƒํ’ˆ ์„น์…˜
5. ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๊ธฐ๋Šฅ
6. ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€
- ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ƒํ’ˆ ์กฐํšŒ ๊ธฐ๋Šฅ
- ์ƒํ’ˆ๋ช…, ์ƒํ’ˆ ํƒœ๊ทธ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ
- ๋งค์ง„ ์ž„๋ฐ• ์Šคํ‹ฐ์ปค ๊ธฐ๋Šฅ

---

> **๊ณ„์ • ๊ด€๋ฆฌ ๊ธฐ๋Šฅ**
1. ํšŒ์› ์ •๋ณด ํ™•์ธ ๊ธฐ๋Šฅ
- ๊ตฌ๋งค ๋ˆ„์  ๊ธˆ์•ก์— ๋”ฐ๋ฅธ ํšŒ์› ๋“ฑ๊ธ‰์„ ํ†ตํ•ด ๊ตฌ๋งค ์œ ๋„
- ๊ตฌ๋งค ์ƒํ’ˆ ๋‚ด์—ญ์— ๋”ฐ๋ฅธ Stat ๋ถ€์—ฌ๋ฅผ ํ†ตํ•ด ๊ตฌ๋งค ์œ ๋„
2. ํšŒ์› ์ •๋ณด ์ˆ˜์ • ๊ธฐ๋Šฅ
- ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ธฐ๋Šฅ
3. ํšŒ์› ํƒˆํ‡ด ๊ธฐ๋Šฅ

> **์ฃผ๋ฌธ ๊ธฐ๋Šฅ**
1. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ
- ์ƒํ’ˆ ์ถ”๊ฐ€
- ์ˆ˜๋Ÿ‰ ์กฐ์ ˆ ๊ฐ€๋Šฅ
- ์ „์ฒด ์‚ญ์ œ, ์„ ํƒ ์‚ญ์ œ ๊ธฐ๋Šฅ
- ํ’ˆ์ ˆ ์ƒํ’ˆ ์ž๋™ ์ œ๊ฑฐ ๊ธฐ๋Šฅ
2. ์ฃผ๋ฌธํ•˜๊ธฐ ๊ธฐ๋Šฅ
- ๋ฐฐ์†ก์ง€ ์ •๋ณด ์ž…๋ ฅ - Daum api
- ์š”์ฒญ ์‚ฌํ•ญ ์„ ํƒ ๊ธฐ๋Šฅ - ์ง์ ‘ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
- ํšŒ์› ๋“ฑ๊ธ‰์— ๋”ฐ๋ฅธ ํ• ์ธ ํ˜œํƒ ๋ถ€์—ฌ
3. ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒ
- ์ฃผ๋ฌธ ์ทจ์†Œ ๊ธฐ๋Šฅ

---

> **๊ด€๋ฆฌ์ž ๊ธฐ๋Šฅ**
1. ์ƒํ’ˆ ๋“ฑ๋ก ๊ธฐ๋Šฅ
- ์ƒํ’ˆ ์ƒ์„ธ ์ •๋ณด ์ž…๋ ฅ ๊ธฐ๋Šฅ
- ์ƒํ’ˆ ์ด๋ฏธ์ง€ ์‚ฝ์ž…
- ์ƒํ’ˆ ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ ์„ค์ • ๊ธฐ๋Šฅ
2. ์ƒํ’ˆ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
- ์ƒํ’ˆ ์‚ญ์ œ ๊ธฐ๋Šฅ
3. ์ƒํ’ˆ ์ •๋ณด ์ˆ˜์ • ๊ธฐ๋Šฅ
- ์ƒํ’ˆ ์ƒ์„ธ ์ •๋ณด ์ˆ˜์ • ๊ธฐ๋Šฅ
- ์ƒํ’ˆ ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ ์ˆ˜์ • ๊ธฐ๋Šฅ
4. ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒ ๊ธฐ๋Šฅ
- ์ „ ํšŒ์› ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒ
- ๋ฐฐ์†ก ์ƒํƒœ ๋ณ€๊ฒฝ
- ์ฃผ๋ฌธ ์ทจ์†Œ

---

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

- **UI ์ž‘์—…**

- ํ™ˆํŽ˜์ด์ง€
- ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€
- ๊ณ„์ • ๊ด€๋ฆฌ ํŽ˜์ด์ง€
- ํšŒ์› ์ •๋ณด ํŽ˜์ด์ง€
- ํšŒ์› ์ •๋ณด ์ˆ˜์ • ํŽ˜์ด์ง€
- ํšŒ์› ํƒˆํ‡ด ํŽ˜์ด์ง€
- ์ฃผ๋ฌธ ์กฐํšŒ ํŽ˜์ด์ง€

- **๊ธฐ๋Šฅ ์ž‘์—…**
- ์œ ์ € CRUD
- ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๊ธฐ๋Šฅ
- Sticky ์‚ฌ์ด๋“œ ๋ฉ”๋‰ด๋ฐ”
- ๊ฒŒ์ด๋ฏธํ”ผ์ผ€์ด์…˜์„ ์œ„ํ•œ ์œ ์ € Stat ๊ธฐ๋Šฅ

UI ์ž‘์—…์€ ๊ทธ๋ ‡๋‹ค ์น˜๊ณ  ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๊ธฐ๋Šฅ๊ณผ ์œ ์ € Stat ๊ธฐ๋Šฅ์€ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•  ๋•Œ ๊ธฐํšํ•  ๋•Œ๋ถ€ํ„ฐ ์• ๋ฅผ ๋จน์—ˆ๊ณ , ์‹œ๊ฐ„๋„ ๋ถ€์กฑํ•ด์„œ ๋งˆ๊ฐ ๋งˆ์ง€๋ง‰ 3์ผ๋™์•ˆ์€ ๊ฑฐ์˜ 4์‹œ๊ฐ„์”ฉ๋งŒ ์ž๋ฉด์„œ ์ž‘์—…์„ ํ•œ ๊ฒƒ๊ฐ™๋‹ค.

---

## ํ˜‘์—…๊ณผ ํ”ผ๋“œ๋ฐฑ

๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜‘์—…์€ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด ์ง„ํ–‰ํ–ˆ๋‹ค.

- **๋ฌธ์„œ**: [Notion ํŽ˜์ด์ง€](https://www.notion.so/20-1335219f96a64e678f66152f45666389?pvs=21)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง„ํ–‰.
- **์†Œํ†ต**: Discord, ๊ฒŒ๋”ํƒ€์šด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง„ํ–‰.

์ฒ˜์Œ ํ˜‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด์–ด์„œ ์ตœ๋Œ€ํ•œ ๋™๊ธฐ์ ์œผ๋กœ ์†Œํ†ตํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋Š”๋ฐ, ์–ด๋–ค [์•„ํ‹ฐํด](https://www.imhr.work/brand/remote-async-commnuication/)์—์„œ ๊ฐœ๋ฐœ์ž๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ํ˜‘์—…ํ•˜๋Š” ๊ฒƒ๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ์ฝ์—ˆ๋‹ค. ๋น„๋™๊ธฐ์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด๋ž€ ์ฆ‰์‹œ ๋‹ต์žฅ์ด ์˜ค์ง€ ์•Š์„ ๊ฒƒ์ด ์ „์ œ๋œ ์ƒํƒœ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ฐฉ์‹์œผ๋กœ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋‹ต์žฅ์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž์‹ ์˜ ์—…๋ฌด๋ฅผ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ๋‹ต์žฅํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

์•„๋ฌดํŠผ ๋‘ ๋ฐฉ์‹์„ ์ ์ ˆํžˆ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค. ์ฃผ๊ฐ„์— ๋ชจ๋‘๊ฐ€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ์‹œ๊ฐ„์—๋Š” ์ตœ๋Œ€ํ•œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋‹ต์žฅ์ด ์˜ค์ง€ ์•Š์„ ๊ฒƒ์ž„์„ ์˜ˆ์ธกํ•˜๊ณ  ์งˆ๋ฌธ์ด๋‚˜ ๋…ผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ž์„ธํžˆ ์ž‘์„ฑํ•˜์—ฌ ์˜ฌ๋ ค๋‘๊ณ , ์ €๋… ์ดํ›„์—๋Š” ์ง์ ‘ ์ผ๋Œ€์ผ ๋Œ€ํ™”๋กœ ํ’€์–ด๋‚˜๊ฐ”๋‹ค.

๊ฐ€์žฅ ์šฐ๋ ค๋๋˜ ์ ์€ ์ž ์„ ๋‚จ๋“ค๋ณด๋‹ค ์ ๊ฒŒ ์ž๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋žœ ์‹œ๊ฐ„ ์ž‘์—…์„ ํ•˜๋Š”๋ฐ, ๋‹ค๋ฅธ ํŒ€์›๋“ค์ด ๊ฐ™์ด ๋ฌด๋ฆฌํ• ๊นŒ๋ด ๊ฑฑ์ •๋๋Š”๋ฐ, ์„œ๋กœ ์ผ์ •๊ณผ ์‹œ๊ฐ„์„ ๊ณต์œ ํ•˜์—ฌ ๋ชจ๋‘๊ฐ€ ์ ์ ˆํžˆ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

---

## ์˜ค!! ์ด๊ฑด ์ข€ ์ž˜ํ•œ ๊ฒƒ ๊ฐ™์•„!

### ๋น„๋™๊ธฐ์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ๋™๊ธฐ์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ์กฐํ™”

๋ฌผ๋ก  ์ฃผ๊ฐ„์—๋„ ๋™๊ธฐ์ ์œผ๋กœ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๋ชจ๋‘๊ฐ€ ๊ฐ์ž์˜ ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋ชจ์—ฌ์„œ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๊ธฐ๋ž€ ๊ท€์ฐฎ๊ธฐ๋„ ํ•˜๊ณ  ์ž‘์—… ํ๋ฆ„์ด ๋Š๊ธฐ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์„œ ์ œ์•ˆํ•œ ๋ฐฉ์‹์ด๋‹ค.

์ฃผ๊ฐ„์—๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์ง„ํ–‰ํ•˜์—ฌ ๋…ผ์˜ ์‚ฌํ•ญ์ด๋‚˜ ์งˆ๋ฌธ ์‚ฌํ•ญ์„ ์ž์„ธํžˆ ๋‚จ๊ฒจ ๋‘๋ฉด, ์‹œ๊ฐ„์ด ๋˜๋Š” ์‚ฌ๋žŒ์ด ํ™•์ธํ•˜๋Š” ๋Œ€๋กœ ๋‹ต์„ ํ•˜๊ธฐ๋กœ ์•ฝ์†ํ•˜๊ณ , ๋น„๋™๊ธฐ์ ์ธ ํ˜‘์—… ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด ์ž‘์—… ํ๋ฆ„์ด ๋Š๊ธฐ์ง€ ์•Š๊ณ  ์ด์–ด์ ธ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค!

### ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„  ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ์ƒํ’ˆ์˜ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ง„์ž…ํ•˜๋ฉด, URL์˜ parameter๋ฅผ ํ†ตํ•ด ์ƒํ’ˆ์˜ `id` ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ , ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์—๋Š” ๋งŒ๋ฃŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ๋งŒ๋ฃŒ ๊ธฐํ•œ์„ ์„ค์ •ํ•ด ๋งŒ๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ ์ œ๊ฑฐํ•ด์ฃผ์—ˆ๋‹ค.

```jsx
// ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ์ถ”๊ฐ€ ๋กœ์ง

function addRecentItem(itemId, itemName, imgUrl) {
// ๋งŒ๋ฃŒ ๊ธฐํ•œ ์„ค์ •
const expireDate = 1000 * 10;
//1000 * 60 * 60 * 24; // 24์‹œ๊ฐ„

// ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
const recentData = {
itemId,
itemName,
imgUrl,
expire: new Date().getTime() + expireDate,
};

// ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
let recentItemList = JSON.parse(localStorage.getItem('recentItem'));

// ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ
if (!recentItemList) recentItemList = [];

// ๋™์ผํ•œ ์ƒํ’ˆ์ด ์žˆ์œผ๋ฉด ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Œ
let isItemExist = false;

isItemExist = recentItemList.some((item) => {
return item.itemId == itemId;
});

if (!isItemExist) {
// 3๊ฐœ ์ด์ƒ์ด๋ฉด ์ฒซ ๋ฒˆ์งธ ์•„์ดํ…œ ์‚ญ์ œ
if (recentItemList.length === 3) recentItemList.shift();

// ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ์ถ”๊ฐ€
recentItemList.push(recentData);

// ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ถ”๊ฐ€
localStorage.setItem('recentItem', JSON.stringify(recentItemList));

isItemExist = false;
}
}
```

```jsx
// UI ๋ Œ๋”๋ง

const addQuickMenuElement = (_quickMenu) => {
_quickMenu.innerHTML = quickMenu;

addRecentItem();

// ์ตœ๊ทผ ๋ณธ ์ƒํ’ˆ ์ถ”๊ฐ€ํ•˜๊ธฐ
function addRecentItem() {
const quickItems = selectElement('.quick-items');
let recentItems = JSON.parse(localStorage.getItem('recentItem')) || [];

if (!recentItems) return;

// ์ถ”๊ฐ€ํ•˜๊ธฐ
recentItems.forEach(({ itemId, itemName, imgUrl }) => {
const recentItemList = `
<li class="recent-item">
<a href="/item/?id=${itemId}">
<img src="${imgUrl}" alt="${itemName}">
<p>${itemName}</p>
</a>
</li>
`;

quickItems.insertAdjacentHTML('beforeend', recentItemList);
});
}
};
```

---

## ์•„.. ์ด๊ฑด ์ข€ ์•„์‰ฌ์šด ๊ฒƒ ๊ฐ™์•„..

๋‹ค๋งŒ, JavaScript๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ชจ๋“ˆํ™”๋‚˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ถ€์กฑํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹จ์ˆœํžˆ MPA๋กœ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์ „์ฒด ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ๊ณ ์นจ๋˜๋Š” ๋ถ€๋ถ„์ด๋‚˜ ๊ฐ๊ฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋‹ฌ๋ผ UI๊ฐ€ ๊ฐ๊ฐ ๋ Œ๋”๋ง ๋˜๋Š” ๋ถ€๋ถ„๋„ ์•„์‰ฌ์› ๋‹ค. ํŠนํžˆ ์ƒ์„ธ ํŽ˜์ด์ง€์— ์ง„์ž…ํ•  ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ์ œ์™ธํ•œ UI๊ฐ€ ๋จผ์ € ๋ Œ๋”๋ง๋˜๋Š” ๋ถ€๋ถ„์€ ๊ฐœ์„ ์ด ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด React๋ฅผ ํ™œ์šฉํ•˜๋ฏ€๋กœ, React๋ฅผ ๋ฐฐ์šด ๋’ค์— React๋กœ ์‡ผํ•‘๋ชฐ์„ ์ƒˆ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด์•„๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค!

---

## ๋งˆ๋ฌด๋ฆฌ

๋ถ€์กฑํ•œ ์ ์ด ๋งŽ์•˜๋˜ ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ์˜€๊ณ , ์•„์‰ฌ์šด ์ ์ด ์—†๋‹ค๊ณ  ๋งํ•  ์ˆ˜๋Š” ์—†๊ฒ ์ง€๋งŒ ์ตœ์„ ์„ ๋‹คํ–ˆ๊ธฐ์— ์ข‹์€ ๊ฒฝํ—˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 2์ฃผ๊ฐ„ 744๊ฐœ์˜ Commit์„ ํ•จ๊ป˜ํ•˜๋ฉด์„œ ์žฌ๋ฐŒ๊ณ  ์ฆ๊ฒ๊ฒŒ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒƒ ๊ฐ™์•„์„œ ์ •๋ง ์ข‹์•˜๊ณ , ํŒ€์›๋“ค๊ณผ๋„ ์นœํ•ด์ ธ์„œ ๊ณ„์† ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋์œผ๋ฉด ์ข‹๊ฒ ๋‹ค..!

ํ”„๋กœ์ ํŠธ ํšŒ๊ณ  ๋!๐Ÿ‘
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 38b9ef9

Please sign in to comment.