Skip to content

๐Ÿ’Œ ์ผ์ •๊ด€๋ฆฌ์™€ ๊ทธ๋ฃน ํ”Œ๋ž˜๋„ˆ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ณ„ํšํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ํ”Œ๋žซํผ, PlanDing์ž…๋‹ˆ๋‹ค.

Notifications You must be signed in to change notification settings

2024-Hanium-PlanDing/PlanDing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“– ์†์‰ฌ์šด ์ผ์ • ๊ด€๋ฆฌ์™€ ํ”Œ๋ž˜๋„ˆ ๊ณต์œ  ํ”Œ๋žซํผ PlanDing

PlanDing


๐Ÿ“ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

"๊ฐœ์ธ๊ณผ ํŒ€์˜ ์กฐํ™”๋ฅผ ์œ„ํ•œ ์Šค๋งˆํŠธํ•œ ์Šค์ผ€์ค„๋ง"

PlanDing์€ ๊ฐœ์ธ์˜ ์ผ์ • ๊ด€๋ฆฌ์™€ ํŒ€ ํ”„๋กœ์ ํŠธ์˜ ํ˜‘์—…์„ ํ•œ๊ณณ์—์„œ ์—ฐ๊ฒฐํ•˜์—ฌ ํšจ์œจ์ ์ธ ์†Œํ†ต์„ ๋•๋Š” ์‹ค์‹œ๊ฐ„ ์ผ์ • ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ์ฒด๊ณ„์ ์ธ ํ”Œ๋ž˜๋„ˆ๋กœ, ํŒ€์œผ๋กœ๋Š” ๊ฐ•๋ ฅํ•œ ํ˜‘์—… ๋„๊ตฌ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ›  Tech Stack

Category Technologies
Frontend React, Redux, TailwindCSS
State Redux Toolkit
Communication Axios, StompJS, EventSource-Polyfill (SSE)
Utils Day.js, Eslint, Prettier

โœจ Key Features

๐Ÿ“… ์‹œ๊ฐํ™”๋œ ์ผ์ • ๊ด€๋ฆฌ

  • ์ฃผ๊ฐ„ยท์ผ๊ฐ„ ํƒ€์ž„ํ…Œ์ด๋ธ”: ํ•˜๋ฃจ ์ผ์ •์„ ์ง๊ด€์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์œผ๋กœ ์†์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ๊ณต์œ : ์ž‘์„ฑํ•œ ์ผ์ •์„ ํŒ€์›๋“ค๊ณผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณต์œ ํ•˜๊ณ  ์กฐ์œจํ•˜์—ฌ ํ˜‘์—… ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ฅ ๊ทธ๋ฃน ์‹œ์Šคํ…œ ๋ฐ ์ฑ„ํŒ…

  • ์ดˆ๋Œ€ ์‹œ์Šคํ…œ: ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ณ  ํŒ€์›์„ ์ดˆ๋Œ€ํ•˜์—ฌ ์šฐ๋ฆฌ๋งŒ์˜ ํ˜‘์—… ์ŠคํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.
  • ์ „์šฉ ์ฑ„ํŒ…: ๊ทธ๋ฃน ๋‚ด ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ผ์ • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด๋‚˜ ์ค‘์š” ๊ณต์ง€๋ฅผ ์ฆ‰๊ฐ์ ์œผ๋กœ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ— Project Structure

src
โ”œโ”€โ”€ assets             # ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ ์ •์  ๋ฆฌ์†Œ์Šค
โ”œโ”€โ”€ components         # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ GroupPage
โ”‚   โ”œโ”€โ”€ ListPage
โ”‚   โ”œโ”€โ”€ LoginPage
โ”‚   โ”œโ”€โ”€ LoginProgressPage
โ”‚   โ”œโ”€โ”€ Modal          # ๊ฐ์ข… ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ ๋ชจ์Œ
โ”‚   โ”œโ”€โ”€ PersonalPage
โ”‚   โ”œโ”€โ”€ ToDoPage
โ”‚   โ””โ”€โ”€ CustomCalendar.jsx
โ”œโ”€โ”€ hooks              # ์ปค์Šคํ…€ React Hooks
โ”œโ”€โ”€ pages              # ๋ผ์šฐํŠธ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ GroupPage.jsx
โ”‚   โ”œโ”€โ”€ ListPage.jsx
โ”‚   โ”œโ”€โ”€ LoginPage.jsx
โ”‚   โ”œโ”€โ”€ LoginProgressPage.jsx
โ”‚   โ”œโ”€โ”€ PersonalPage.jsx
โ”‚   โ””โ”€โ”€ ToDoPage.jsx
โ”œโ”€โ”€ redux              # Redux ์ƒํƒœ ๊ด€๋ฆฌ (Slices, Store)
โ”œโ”€โ”€ services           # API ์š”์ฒญ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”œโ”€โ”€ styles             # ์ „์—ญ ์Šคํƒ€์ผ ๋ฐ ํ…Œ๋งˆ
โ”œโ”€โ”€ utils              # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ”œโ”€โ”€ App.jsx            # ๋ฉ”์ธ ์•ฑ ์ปดํฌ๋„ŒํŠธ
โ””โ”€โ”€ main.jsx           # ์ง„์ž…์  (Entry Point)

โšก Trouble Shooting & Optimization

1. STOMP ๋„์ž…์„ ํ†ตํ•œ ๋ฉ”์‹œ์ง• ๊ตฌ์กฐ ์ตœ์ ํ™”

๐Ÿšจ Problem

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

โœ… Solution

STOMP (Simple Text Oriented Messaging Protocol) ํ”„๋กœํ† ์ฝœ์„ ๋„์ž…ํ•˜์—ฌ ๊ธฐ๋Šฅ๋ณ„(์ฑ„ํŒ…, ์ผ์ •, ์•Œ๋ฆผ)๋กœ ๋…๋ฆฝ๋œ ๊ตฌ๋… ์ฑ„๋„(Topic)์„ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๏ฟฝ Result

๋‹ค์ค‘ ์ฑ„๋„ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ํ™•์žฅ์„ฑ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋Œ€ํญ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

2. ๋ฒˆ๋“ค ์ตœ์ ํ™”: Moment.js์—์„œ Day.js๋กœ ์ „ํ™˜

๐Ÿšจ Problem

์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ๋ถ„์„ ๊ฒฐ๊ณผ, ๋‚ ์งœ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋˜ Moment.js๊ฐ€ ์ „์ฒด ๋ฒˆ๋“ค ํฌ๊ธฐ์˜ ์•ฝ 55%(288KB)๋ฅผ ์ฐจ์ง€ํ•˜๋ฉฐ ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์ฃผ ์›์ธ์œผ๋กœ ํŒŒ์•…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โœ… Solution

Moment.js์™€ API ํ˜ธํ™˜์„ฑ์ด ๋†’์œผ๋ฉด์„œ๋„ Tree-shaking์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Day.js๋กœ ์ „๊ฒฉ ๊ต์ฒดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ“ˆ Result

๋‚ ์งœ ์ฒ˜๋ฆฌ ๊ด€๋ จ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ 99% ์ด์ƒ(288KB โ†’ 2KB) ์ค„์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ† Achievements & Lessons Learned

  • ์„ฑ๋Šฅ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ ๋งˆ์ธ๋“œ: ๋‹จ์ˆœํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋ฒˆ๋“ค ์‚ฌ์ด์ฆˆ ๋ถ„์„์„ ํ†ตํ•ด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„๋ฅผ ๊ฐœ์„ (Day.js ๋„์ž…)ํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์˜ ์ดํ•ด: WebSocket๊ณผ STOMP, SSE๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฑ„ํŒ…๊ณผ ์ผ์ • ๊ณต์œ  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ์‹ค์‹œ๊ฐ„ ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ๊ณผ ๋‹จ๋ฐฉํ–ฅ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์˜ ์ฐจ์ด ๋ฐ ์ ์žฌ์ ์†Œ ํ™œ์šฉ๋ฒ•์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค.
  • ํ˜‘์—…๊ณผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜: Jira์™€ Confluence๋ฅผ ํ™œ์šฉํ•œ ์ฒด๊ณ„์ ์ธ ์ผ์ • ๊ด€๋ฆฌ์™€ ๋ฌธ์„œํ™”๋ฅผ ํ†ตํ•ด, 4์ธ ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ 7๊ฐœ์›”๊ฐ„ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋Œ๋ฉฐ ํ˜‘์—…์˜ ์ค‘์š”์„ฑ์„ ์ฒด๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ํŒ€์› ๊ตฌ์„ฑ

๋ฐ•์ฒ ํ˜„ ๊น€์ƒ์šด ๋ฐ•๋ฏผ์ˆ˜ ์ด๋ฏผ๊ทœ
Web (Team Leader) Backend Android Design
@hyeon @SangWoon123 @comst19 @22

About

๐Ÿ’Œ ์ผ์ •๊ด€๋ฆฌ์™€ ๊ทธ๋ฃน ํ”Œ๋ž˜๋„ˆ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ณ„ํšํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ํ”Œ๋žซํผ, PlanDing์ž…๋‹ˆ๋‹ค.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages