Skip to content

๐Ÿ† ๋‹น์‹  ๊ทผ์ฒ˜์˜, U:Near ( LGU+ ์œ ๋ ˆ์นด 2๊ธฐ ์ตœ์ข…์œตํ•ฉํ”„๋กœ์ ํŠธ ์ตœ์šฐ์ˆ˜์ƒ )

Notifications You must be signed in to change notification settings

khwww/unear-frontend

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

654 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Unear - ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋ฉค๋ฒ„์‹ญ ํ˜œํƒ ์„œ๋น„์Šค


๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” LG U+ ์—ฐ๊ณ„ ํŒ์—… ์Šคํ† ์–ด ์ค‘์‹ฌ์˜ ์ง€์—ญ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ฐธ์—ฌํ•˜๋ฉฐ, ์ธ๊ทผ ์ œํœด์ฒ˜(์†Œ์ƒ๊ณต์ธ ํฌํ•จ)๋ฅผ ์ถ”์ฒœ๋ฐ›๊ณ  ์ด๋ฒคํŠธ ๋งค์žฅ ๊ฒฐ์ œ๋ฅผ ํ†ตํ•ด ์Šคํƒฌํ”„๋ฅผ ์ ๋ฆฝํ•˜๋Š” ์ฐธ์—ฌํ˜• ํ˜œํƒ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ง€๋„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฃผ๋ณ€ ์ œํœด์ฒ˜์˜ ๋ฉค๋ฒ„์‹ญ ํ˜œํƒ ๋ฐ ํ• ์ธ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋ฉฐ, ์ด๋ฒคํŠธ ์ •๋ณด๋ฅผ ํ†ตํ•ด ๋ฉค๋ฒ„์‹ญ ๋ฐ”์ฝ”๋“œ ์ œ์ถœ ๋ฐ ๊ฒฐ์ œ ์ธ์ฆ์„ ํ†ตํ•ด ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’Ž ํ•ต์‹ฌ ๊ฐ€์น˜

  • ๐Ÿ—บ๏ธ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ด๋ฒคํŠธ ์ฐธ์—ฌ: LG U+ ํŒ์—… ์Šคํ† ์–ด์™€ ์—ฐ๊ณ„ํ•œ ์ง€์—ญ ๋งž์ถคํ˜• ์ด๋ฒคํŠธ ์ œ๊ณต
  • ๐Ÿ† ์Šคํƒฌํ”„ ์ ๋ฆฝ ์‹œ์Šคํ…œ: ๋ฐฉ๋ฌธ ์ธ์ฆ์„ ํ†ตํ•œ ์Šคํƒฌํ”„ ์ ๋ฆฝ ๋ฐ ๋ณด์ƒ ์‹œ์Šคํ…œ
  • ๐Ÿค ์†Œ์ƒ๊ณต์ธ ์ƒ์ƒ: ์ง€์—ญ ์†Œ์ƒ๊ณต์ธ ์ œํœด์ฒ˜ ์ถ”์ฒœ์„ ํ†ตํ•œ ์ƒ์ƒ ์ƒํƒœ๊ณ„ ๊ตฌ์ถ•
  • ๐Ÿ“ฑ ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์•Œ๋ฆผ: ์ œํœด์ฒ˜ ์ง„์ž… ์‹œ ์ž๋™ ํŒ์—…์„ ํ†ตํ•œ ์ด๋ฒคํŠธ ์•ˆ๋‚ด
  • ๐Ÿ’ณ ํ†ตํ•ฉ ๋ฉค๋ฒ„์‹ญ ๊ด€๋ฆฌ: ๋ฉค๋ฒ„์‹ญ ๋ฐ”์ฝ”๋“œ ์ œ์ถœ ๋ฐ ๊ฒฐ์ œ ์ธ์ฆ์„ ํ†ตํ•œ ๊ฐ„ํŽธํ•œ ํ˜œํƒ ์ด์šฉ

๐ŸŒŸ ์„œ๋น„์Šค ์†Œ๊ฐœ

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

โœจ ์ฃผ์š” ํŠน์ง•

๊ธฐ๋Šฅ ์„ค๋ช…
๐Ÿช LG U+ ํŒ์—… ์Šคํ† ์–ด ์—ฐ๊ณ„ LG U+ ํŒ์—… ์Šคํ† ์–ด ์ค‘์‹ฌ์˜ ์ง€์—ญ ์ด๋ฒคํŠธ ์ฐธ์—ฌ
๐Ÿ“ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์•Œ๋ฆผ ์ œํœด์ฒ˜ ์ง„์ž… ์‹œ ์ž๋™ ํŒ์—…์„ ํ†ตํ•œ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์•ˆ๋‚ด
โญ ์Šคํƒฌํ”„ ์ ๋ฆฝ ์‹œ์Šคํ…œ ๋ฐฉ๋ฌธ ์ธ์ฆ ๋ฐ ๊ฒฐ์ œ ์ธ์ฆ์„ ํ†ตํ•œ ์Šคํƒฌํ”„ ์ ๋ฆฝ ๋ฐ ๋ณด์ƒ
๐Ÿฌ ์†Œ์ƒ๊ณต์ธ ์ œํœด ์ง€์—ญ ์†Œ์ƒ๊ณต์ธ ๋งค์žฅ ์ถ”์ฒœ ๋ฐ ์ƒ์ƒ ํ˜œํƒ ์ œ๊ณต
๐Ÿ“ฑ ๋ฉค๋ฒ„์‹ญ ๋ฐ”์ฝ”๋“œ ํ†ตํ•ฉ ๊ฐ„ํŽธํ•œ ๋ฐ”์ฝ”๋“œ ์ œ์ถœ์„ ํ†ตํ•œ ํ˜œํƒ ์ด์šฉ
๐Ÿ” ์†Œ์…œ ๋กœ๊ทธ์ธ Google, Kakao, Naver ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ์ง€์›

๐Ÿ”— Unear ๊ด€๋ จ ๋งํฌ

์„œ๋น„์Šค ๋งํฌ
๐Ÿ–ฅ๏ธ Frontend ํ”„๋ก ํŠธ์—”๋“œ ์ €์žฅ์†Œ
๐Ÿ”ง Backend ๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ
๐ŸŽจ Design Figma ๋””์ž์ธ
๐Ÿ“ท Video Link ์‹œ์—ฐ์˜์ƒ ๋งํฌ

๐Ÿ“ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ

๐Ÿ“‚ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ณด๊ธฐ
unear-frontend/
โ”œโ”€โ”€ ๐Ÿ“ public/                          # ์ •์  ํŒŒ์ผ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ images/                     # ์ด๋ฏธ์ง€ ํŒŒ์ผ
โ”‚   โ””โ”€โ”€ ๐Ÿ“ icons/                      # ์•„์ด์ฝ˜ ํŒŒ์ผ
โ”œโ”€โ”€ ๐Ÿ“ src/
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ apis/                       # API ํ˜ธ์ถœ ๊ด€๋ จ ํŒŒ์ผ
โ”‚   โ”‚   โ”œโ”€โ”€ โš™๏ธ axiosInstance.ts        # Axios ์ธ์Šคํ„ด์Šค ์„ค์ •
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ” auth.ts                # ์ธ์ฆ ๊ด€๋ จ API
โ”‚   โ”‚   โ”œโ”€โ”€ ๐ŸŽซ getUserCoupons.ts      # ์ฟ ํฐ ๊ด€๋ จ API
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ getPlaces.ts          # ์žฅ์†Œ ๊ด€๋ จ API
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“„ ...                    # ๊ธฐํƒ€ API ํŒŒ์ผ๋“ค
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ assets/                     # ์ •์  ์ž์›
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ common/                # ๊ณตํ†ต ์•„์ด์ฝ˜/์ด๋ฏธ์ง€
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ main/                  # ๋ฉ”์ธ ํŽ˜์ด์ง€ ์ž์›
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ map/                   # ์ง€๋„ ๊ด€๋ จ ์ž์›
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ story/                 # ์Šคํ† ๋ฆฌ ๊ด€๋ จ ์ž์›
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ my/                    # ๋งˆ์ดํŽ˜์ด์ง€ ์ž์›
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ components/                 # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ common/                # ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ”˜ ActionButton.tsx   # ์•ก์…˜ ๋ฒ„ํŠผ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ฑ BottomNavigator.tsx # ํ•˜๋‹จ ๋„ค๋น„๊ฒŒ์ด์…˜
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ๐ŸŽซ CouponCard.tsx     # ์ฟ ํฐ ์นด๋“œ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“‹ Header.tsx         # ํ—ค๋”
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“„ ...               # ๊ธฐํƒ€ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋“ค
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ junior/               # ์ฃผ๋‹ˆ์–ด ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ map/                  # ์ง€๋„ ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ my/                   # ๋งˆ์ดํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ story/                # ์Šคํ† ๋ฆฌ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ hooks/                      # ์ปค์Šคํ…€ ํ›…
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ my/                    # ๋งˆ์ดํŽ˜์ด์ง€ ๊ด€๋ จ ํ›…

โ”‚   โ”‚   โ””โ”€โ”€ โฌ†๏ธ useScrollToTop.ts      # ์Šคํฌ๋กค ์ œ์–ด ํ›…
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ pages/                      # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ auth/                  # ์ธ์ฆ ๊ด€๋ จ ํŽ˜์ด์ง€
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ  MainPage.tsx           # ๋ฉ”์ธ ํŽ˜์ด์ง€
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ—บ๏ธ MapPage.tsx            # ์ง€๋„ ํŽ˜์ด์ง€
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“– StoryPage.tsx          # ์Šคํ† ๋ฆฌ ํŽ˜์ด์ง€
โ”‚   โ”‚   โ”œโ”€โ”€ ๐ŸŽฏ JuniorPage.tsx         # ์ฃผ๋‹ˆ์–ด ํŽ˜์ด์ง€
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ‘ค MyPage.tsx             # ๋งˆ์ดํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ providers/                  # Context Provider
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ” AuthProvider.tsx       # ์ธ์ฆ Provider
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ router/                     # ๋ผ์šฐํŒ… ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ›ฃ๏ธ index.tsx              # ๋ผ์šฐํ„ฐ ์„ค์ •
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ store/                      # ์ƒํƒœ ๊ด€๋ฆฌ (Zustand)
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ” auth.ts                # ์ธ์ฆ ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ types/                      # TypeScript ํƒ€์ž… ์ •์˜
โ”‚   โ”‚   โ”œโ”€โ”€ ๐ŸŽซ coupon.ts              # ์ฟ ํฐ ํƒ€์ž…
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ—บ๏ธ map.ts                 # ์ง€๋„ ํƒ€์ž…
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿช store.ts               # ๋งค์žฅ ํƒ€์ž…
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“„ ...                    # ๊ธฐํƒ€ ํƒ€์ž…๋“ค
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ utils/                      # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“… formatDate.ts          # ๋‚ ์งœ ํฌ๋งทํŒ…
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿž toast.ts               # ํ† ์ŠคํŠธ ์•Œ๋ฆผ
โ”‚   โ”‚   โ””โ”€โ”€ ๐ŸŽซ tokenUtils.ts          # ํ† ํฐ ๊ด€๋ จ ์œ ํ‹ธ
โ”‚   โ”œโ”€โ”€ ๐ŸŽจ index.css                   # ์ „์—ญ ์Šคํƒ€์ผ
โ”‚   โ”œโ”€โ”€ ๐Ÿš€ main.tsx                    # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ง„์ž…์ 
โ”‚   โ””โ”€โ”€ ๐Ÿ“ฑ default.tsx                 # ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ
โ”œโ”€โ”€ ๐Ÿ”ง .env                            # ํ™˜๊ฒฝ ๋ณ€์ˆ˜
โ”œโ”€โ”€ ๐Ÿ“ฆ package.json                    # ์˜์กด์„ฑ ๊ด€๋ฆฌ
โ”œโ”€โ”€ ๐ŸŽจ tailwind.config.js              # Tailwind CSS ์„ค์ •
โ”œโ”€โ”€ โš™๏ธ tsconfig.json                   # TypeScript ์„ค์ •
โ”œโ”€โ”€ โšก vite.config.ts                  # Vite ๋นŒ๋“œ ๋„๊ตฌ ์„ค์ •
โ””โ”€โ”€ ๐Ÿ“– README.md                       # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ

๐Ÿš€ ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐฉ๋ฒ•

๐Ÿ“‹ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

๋‹จ๊ณ„ ๋ช…๋ น์–ด / ํŒŒ์ผ ์„ค๋ช…
1๏ธโƒฃ Node.js ๋ฒ„์ „ ํ™•์ธ node --version Node.js 18.0.0 ์ด์ƒ ํ•„์š”
2๏ธโƒฃ ์˜์กด์„ฑ ์„ค์น˜ npm install ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ ์„ค์น˜
3๏ธโƒฃ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • .env ํŒŒ์ผ ์ƒ์„ฑ ํ›„ ์•„๋ž˜ ๋‚ด์šฉ ์ถ”๊ฐ€

VITE_API_BASE_URL=๋ฐฑ์—”๋“œ ์„œ๋ฒ„ URL
VITE_KAKAO_MAP_API_KEY=์นด์นด์˜ค ์ง€๋„ API ํ‚ค
VITE_GOOGLE_CLIENT_ID=๊ตฌ๊ธ€ ํด๋ผ์ด์–ธํŠธ ID
ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ๋ก
4๏ธโƒฃ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ npm run dev ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
๐ŸŒ http://localhost:4000
5๏ธโƒฃ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ npm run build ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์ƒ์„ฑ
6๏ธโƒฃ ๋นŒ๋“œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ npm run preview ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
7๏ธโƒฃ ์ฝ”๋“œ ํฌ๋งทํŒ… npm run format ์ฝ”๋“œ ํฌ๋งทํŒ…
8๏ธโƒฃ ์ฝ”๋“œ ๊ฒ€์‚ฌ npm run lint ์ฝ”๋“œ ๋ฆฐํŠธ(๊ฒ€์‚ฌ)

๐Ÿ› ๏ธ ์ถ”๊ฐ€ ๋ช…๋ น์–ด

๋ช…๋ น์–ด ์„ค๋ช…
npm run build ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run preview ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm run format ์ฝ”๋“œ ํฌ๋งทํŒ…
npm run lint ์ฝ”๋“œ ๊ฒ€์‚ฌ

๐ŸŽฏ ์ฃผ์š” ๊ธฐ๋Šฅ ์†Œ๊ฐœ

๐Ÿ  1. ๋ฉ”์ธ ํŽ˜์ด์ง€ (MainPage)

์œ ๋‹ˆ์–ด_๋ฉ”์ธํ™”๋ฉด

๐Ÿ“Š ์ฃผ์š” ๊ธฐ๋Šฅ: ๊ฐœ์ธํ™”๋œ ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์ถ”์ฒœ ํ˜œํƒ ํ‘œ์‹œ

๐Ÿ”ง ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ:

  • ๐ŸŽฏ ๋ฉค๋ฒ„์‹ญ ํ˜œํƒ ๋ฐฐ๋„ˆ
  • ๐Ÿช ์ถ”์ฒœ ๋งค์žฅ ๋ฆฌ์ŠคํŠธ
  • ๐Ÿ“ˆ ๊ฐœ์ธ ํ†ต๊ณ„ ์š”์•ฝ
  • ๐Ÿ“– ์Šคํ† ๋ฆฌ ์ถ”์ฒœ ์„น์…˜

โœจ ํŠน์ง•: ๊ฐœ์ธํ™”๋œ ์ฝ˜ํ…์ธ , ๋ฐ˜์‘ํ˜• ๋””์ž์ธ, ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ


๐Ÿ—บ๏ธ 2. ์ง€๋„ ๊ธฐ๋ฐ˜ ๋งค์žฅ ๊ฒ€์ƒ‰ (MapPage)

์ง€๋„_ํŽ˜์ด์ง€_1 ์ง€๋„_ํŽ˜์ด์ง€_2

๐Ÿ“ ์ฃผ์š” ๊ธฐ๋Šฅ: ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ œํœด์ฒ˜ ๊ฒ€์ƒ‰ ๋ฐ LG U+ ํŒ์—… ์Šคํ† ์–ด ์ •๋ณด ํ‘œ์‹œ

๐Ÿ”ง ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ:

  • MapContainer.tsx: ์นด์นด์˜ค๋งต ํ†ตํ•ฉ ์ปดํฌ๋„ŒํŠธ
  • BottomSheetLocationDetail.tsx: ์ œํœด์ฒ˜ ์ƒ์„ธ ์ •๋ณด ๋ฐ”ํ…€์‹œํŠธ
  • MapActionButtons.tsx: ์ง€๋„ ์•ก์…˜ ๋ฒ„ํŠผ๋“ค
  • BottomSheetFilter.tsx: ํ•„ํ„ฐ๋ง ๋ฐ”ํ…€์‹œํŠธ

โœจ ํŠน์ง•: ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ถ”์ , ์ œํœด์ฒ˜ ์ง„์ž… ์‹œ ์ž๋™ ํŒ์—… ์•Œ๋ฆผ, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ•„ํ„ฐ๋ง, ์ฆ๊ฒจ์ฐพ๊ธฐ ๊ธฐ๋Šฅ


๐Ÿ“– 3. ๊ฐœ์ธํ™”๋œ ์Šคํ† ๋ฆฌ (StoryPage)

์Šคํ† ๋ฆฌํŽ˜์ด์ง€

๐ŸŽจ ์ฃผ์š” ๊ธฐ๋Šฅ: ๊ฐœ์ธ ๋งž์ถคํ˜• ํ• ์ธ ํ˜œํƒ ์Šคํ† ๋ฆฌ ์ œ๊ณต

๐Ÿ”ง ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ:

  • StoryCard.tsx: ์Šคํ† ๋ฆฌ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ
  • StoryLayout.tsx: ์Šคํ† ๋ฆฌ ๋ ˆ์ด์•„์›ƒ
  • StoryDetailLayout.tsx: ์Šคํ† ๋ฆฌ ์ƒ์„ธ ๋ ˆ์ด์•„์›ƒ

โœจ ํŠน์ง•: ์›”๋ณ„ ๊ฐœ์ธํ™” ์Šคํ† ๋ฆฌ, AI ๊ธฐ๋ฐ˜ ์ถ”์ฒœ, ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์นด๋“œ, ์ง„๋‹จ ์‹œ์Šคํ…œ ์—ฐ๊ณ„


๐ŸŽฏ 4. ์ฃผ๋‹ˆ์–ด ์Šคํƒฌํ”„ ์ด๋ฒคํŠธ (JuniorPage)

์ด๋ฒˆ์ฃผ๋‹ˆ์–ด

๐ŸŽฒ ์ฃผ์š” ๊ธฐ๋Šฅ: ๋ฐฉ๋ฌธ ์ธ์ฆ์„ ํ†ตํ•œ ์Šคํƒฌํ”„ ์ ๋ฆฝ ๋ฐ ๋ฃฐ๋ › ์ด๋ฒคํŠธ ์‹œ์Šคํ…œ

๐Ÿ”ง ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ:

  • Roulette.tsx: ๋ฃฐ๋ › ๊ฒŒ์ž„ ์ปดํฌ๋„ŒํŠธ
  • ProbabilityRoulette.tsx: ํ™•๋ฅ  ๊ธฐ๋ฐ˜ ๋ฃฐ๋ ›
  • StampRouletteCard.tsx: ์Šคํƒฌํ”„ ๋ฃฐ๋ › ์นด๋“œ
  • TodayCouponSection.tsx: ์˜ค๋Š˜์˜ ์ฟ ํฐ ์„น์…˜

โœจ ํŠน์ง•: ๋ฐฉ๋ฌธ ์ธ์ฆ ์Šคํƒฌํ”„ ์‹œ์Šคํ…œ, ํ™•๋ฅ  ๊ธฐ๋ฐ˜ ๋ณด์ƒ, ์ผ์ผ ํ•œ์ • ์ด๋ฒคํŠธ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ


๐Ÿ‘ค 5. ๋งˆ์ดํŽ˜์ด์ง€ (MyPage)

๋งˆ์ดํŽ˜์ด์ง€1 ๋งˆ์ดํŽ˜์ด์ง€2

โš™๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ: ๊ฐœ์ธ์ •๋ณด ๊ด€๋ฆฌ, ์ฟ ํฐ/๋ถ๋งˆํฌ ๊ด€๋ฆฌ, ํ†ต๊ณ„ ํ™•์ธ

๐Ÿ”ง ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ:

  • UserProfileSection.tsx: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์„น์…˜
  • StatisticsSection.tsx: ํ†ต๊ณ„ ์š”์•ฝ ์„น์…˜
  • MembershipBenefitSection.tsx: ๋ฉค๋ฒ„์‹ญ ํ˜œํƒ ์„น์…˜
  • RecentUsageSection.tsx: ์ตœ๊ทผ ์ด์šฉ ๋‚ด์—ญ ์„น์…˜

๐Ÿ“‹ ํ•˜์œ„ ํŽ˜์ด์ง€:

  • ๐ŸŽซ ์ฟ ํฐ ๊ด€๋ฆฌ (/my/coupons)
  • โญ ๋ถ๋งˆํฌ ๊ด€๋ฆฌ (/my/bookmarks)
  • ๐Ÿ“Š ํ†ต๊ณ„ ์ƒ์„ธ (/my/statistics)
  • ๐Ÿ“ ์ด์šฉ ๋‚ด์—ญ (/my/usage-history)

โœจ ํŠน์ง•: ์‹ค์‹œ๊ฐ„ ํ†ต๊ณ„ ์ฐจํŠธ, ์ฟ ํฐ ์ƒํƒœ ๊ด€๋ฆฌ, ์ฆ๊ฒจ์ฐพ๊ธฐ ๋งค์žฅ ๊ด€๋ฆฌ


๐Ÿ’ณ 6. ๋ฉค๋ฒ„์‹ญ ์‹œ์Šคํ…œ (MembershipPage)

์œ ๋‹ˆ์–ด_๋งด๋ฒ„์‹ญํ˜œํƒ

๐Ÿช ์ฃผ์š” ๊ธฐ๋Šฅ: ๋ธŒ๋žœ๋“œ๋ณ„ ๋ฉค๋ฒ„์‹ญ ํ˜œํƒ ์กฐํšŒ ๋ฐ ๊ด€๋ฆฌ

โœจ ํŠน์ง•: ๋ธŒ๋žœ๋“œ๋ณ„ ํ• ์ธ์œจ ์ •๋ณด, ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ๋ง, ํ˜œํƒ ์ƒ์„ธ ์ •๋ณด


๐Ÿ” 7. ์ธ์ฆ ์‹œ์Šคํ…œ (Auth)

๋กœ๊ทธ์ธ ํŽ˜์ด์ง€

๐Ÿ”‘ ์ฃผ์š” ๊ธฐ๋Šฅ: ์†Œ์…œ ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์› ๊ด€๋ฆฌ, ๋ฐฉ๋ฌธ/๊ฒฐ์ œ ์ธ์ฆ ์‹œ์Šคํ…œ

๐ŸŒ ์ง€์› ํ”Œ๋žซํผ: Kakao, Google, Naver

โœจ ํŠน์ง•: JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ, ๋ณดํ˜ธ๋œ ๋ผ์šฐํŠธ ๊ด€๋ฆฌ, ๋ฉค๋ฒ„์‹ญ ๋ฐ”์ฝ”๋“œ ํ†ตํ•ฉ ๊ด€๋ฆฌ


๐Ÿงฉ 8. ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ (components/common)

์ปดํฌ๋„ŒํŠธ ์„ค๋ช…
BottomNavigator.tsx ํ•˜๋‹จ ํƒญ ๋„ค๋น„๊ฒŒ์ด์…˜
Header.tsx ํŽ˜์ด์ง€๋ณ„ ํ—ค๋”
CouponCard.tsx ์ฟ ํฐ ์นด๋“œ ์ปดํฌ๋„ŒํŠธ
LoadingSpinner.tsx ๋กœ๋”ฉ ํ‘œ์‹œ

โœจ ํŠน์ง•: ์ผ๊ด€๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ, ์ ‘๊ทผ์„ฑ ๋ฐ ๋ฐ˜์‘ํ˜• ์ง€์›


๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Frontend Framework & Language

React TypeScript

Build Tools & Development

Vite ESLint Prettier

UI & Styling

Tailwind CSS Framer Motion

State Management & Routing

React Router Zustand

Communication & API

Axios

UI Components & Libraries

MUI React Icons

Map & Location Services

Kakao Map

Development Tools

Storybook Vitest

Deployment

Docker


๐Ÿ‘ฅ ํŒ€์› ์†Œ๊ฐœ

@1seyoung @lbk00 @tjdqls3607 @khwww @KimJunSeo289 @alex8396 @Hongjunior
ํ•œ์„ธ์˜ ์ด๋ณธ๊ทœ ์ •์„ฑ๋นˆ ๊น€ํ˜„์šฐ ๊น€์ค€์„œ ์ž„์žฌ์ฐฌ ํ™์„์ค€
@1seyoung @lbk00 @tjdqls3607 @khwww @KimJunSeo289 @alex8396 @Hongjunior
BE ํŒ€์žฅ ํ…Œํฌ๋ฆฌ๋” Backend FE ํŒ€์žฅ Frontend Frontend Frontend

๐ŸŽฏ ์—ญํ•  ๋ถ„๋‹ด

ํŒ€ ์ด๋ฆ„ ์—ญํ•  ๋‹ด๋‹น ์—…๋ฌด
๐Ÿ”ง Backend ํ•œ์„ธ์˜ (BE ํŒ€์žฅ) DevOps & Backend Lead โ€ข DevOps, ํฌ์Šค๊ธฐ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
โ€ข ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ตฌ์ถ•, Airflow
โ€ข ํฌ์Šค๊ธฐ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ, ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ๋ง
โ€ข RAG ์ถ”์ฒœ
๐Ÿ”ง Backend ์ด๋ณธ๊ทœ (ํ…Œํฌ๋ฆฌ๋”) Tech Lead & Database โ€ข ERD ์„ค๊ณ„, DB ๊ด€๋ฆฌ
โ€ข OAuth ์—ฐ๋™, ์œ ์ € ์„œ๋ฒ„ ๊ฐœ๋ฐœ
โ€ข Log-consumer ๊ตฌ์ถ•, Airflow ์„ค๊ณ„
โ€ข ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ ์‹œ๊ฐํ™”
๐Ÿ”ง Backend ์ •์„ฑ๋นˆ QA & API Development โ€ข QA ๋‹ด๋‹น, ์–ด๋“œ๋ฏผ ์„œ๋ฒ„ ๊ฐœ๋ฐœ
โ€ข ์ด๋ฒˆ์ฃผ๋‹ˆ์–ด API ๊ฐœ๋ฐœ
โ€ข ๋Œ€์‹œ๋ณด๋“œ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ, ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜
โ€ข ์†Œ๋น„์Šคํ† ๋ฆฌ ๋ฐ ์ œํœด์ฒ˜ ์ถ”์ฒœ API ๊ฐœ๋ฐœ
๐Ÿ’ป Frontend ๊น€ํ˜„์šฐ (FE ํŒ€์žฅ) Frontend Lead & Architecture โ€ข ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ
โ€ข ์ง€๋„ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
โ€ข PWA ๊ตฌ์ถ•, ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”
๐Ÿ’ป Frontend ๊น€์ค€์„œ Frontend Developer โ€ข ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ
โ€ข ๋ฉ”์ธ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ, ๋งˆ์ด ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
โ€ข ์•Œ๋ฆผ ์‹œ์Šคํ…œ ์—ฐ๋™
๐Ÿ’ป Frontend ์ž„์žฌ์ฐฌ Frontend Developer โ€ข ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ
โ€ข ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
โ€ข ์ด๋ฒˆ์ฃผ๋‹ˆ์–ด ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
๐Ÿ’ป Frontend ํ™์„์ค€ Frontend Developer โ€ข ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ
โ€ข ์Šคํ† ๋ฆฌ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
โ€ข ์˜จ๋ณด๋”ฉ/ํ˜œํƒ ์•ˆ๋‚ด ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ

โœจ ํ”„๋กœ์ ํŠธ ํŠน์ง•

ํŠน์ง• ์„ค๋ช…
๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๋ชจ๋ฐ”์ผ ํผ์ŠคํŠธ ์ ‘๊ทผ ๋ฐฉ์‹ (์ตœ๋Œ€ ๋„ˆ๋น„ 600px), ์‚ฌ์šฉ์ž ์นœํ™”์  UI/UX ์„ค๊ณ„
๐ŸŽฏ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค, ํฐ ๋ฒ„ํŠผ๊ณผ ๋ช…ํ™•ํ•œ ํ…์ŠคํŠธ๋กœ ์ ‘๊ทผ์„ฑ ํ–ฅ์ƒ
โšก ์„ฑ๋Šฅ ์ตœ์ ํ™” Vite ๊ธฐ๋ฐ˜ ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
๐Ÿ”ง ๊ฐœ๋ฐœ ํ™˜๊ฒฝ TypeScript๋กœ ํƒ€์ž… ์•ˆ์ „์„ฑ ํ™•๋ณด, ESLint + Prettier ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ
๐Ÿ” ๋ณด์•ˆ & ์ธ์ฆ JWT ๊ธฐ๋ฐ˜ ํ† ํฐ ์ธ์ฆ, ์†Œ์…œ ๋กœ๊ทธ์ธ ์ง€์›, ๋ณดํ˜ธ๋œ ๋ผ์šฐํŠธ ๊ด€๋ฆฌ

About

๐Ÿ† ๋‹น์‹  ๊ทผ์ฒ˜์˜, U:Near ( LGU+ ์œ ๋ ˆ์นด 2๊ธฐ ์ตœ์ข…์œตํ•ฉํ”„๋กœ์ ํŠธ ์ตœ์šฐ์ˆ˜์ƒ )

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 98.5%
  • Other 1.5%