본문으둜 κ±΄λ„ˆλ›°κΈ°

πŸ“š [2024-10-31] ν”„λ‘œμ νŠΈ κΈ°νšμ„œ

πŸ“ ν”„λ‘œμ νŠΈ μš”μ•½β€‹

ν”„λ‘œμ νŠΈλͺ…​

선따라 길따라 (DDara)

νŒ€λͺ…​

따라따라

ν”„λ‘œμ νŠΈ ν•œ 쀄 μ†Œκ°œβ€‹

쀑μž₯λ…„μΈ΅ μ‚¬μš©μžκ°€ μ‰½κ²Œ κΈΈ μ•ˆλ‚΄λ₯Ό λ°›κ²Œ ν•΄μ£ΌλŠ” λͺ¨λ°”일 μ›Ήμ„œλΉ„μŠ€

기술 ν‚€μ›Œλ“œβ€‹

#지도, #μ €μž‘λ„κ΅¬, #μ‹€μ‹œκ°„ μœ„μΉ˜

κΉƒν—ˆλΈŒ 링크​

https://github.com/boostcampwm-2024/web28-DDara

πŸ“ ν”„λ‘œμ νŠΈ λͺ©ν‘œβ€‹

μ‚¬μš©μž μΉœν™”μ μΈ κΈΈ μ•ˆλ‚΄ μ„œλΉ„μŠ€ μ œκ³΅β€‹

쀑μž₯년측도 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” 직관적인 μΈν„°νŽ˜μ΄μŠ€μ™€ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

μ‹€μ‹œκ°„ μœ„μΉ˜ 곡유 및 경둜 μ•ˆλ‚΄β€‹

μ‹€μ‹œκ°„μœΌλ‘œ μœ„μΉ˜λ₯Ό κ³΅μœ ν•˜μ—¬, μ‚¬μš©μžλŠ” μ‰½κ²Œ μœ„μΉ˜λ₯Ό νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§žμΆ€ν˜• 경둜 섀정​

μ‚¬μš©μžκ°€ 자유둭게 지도 μœ„μ— 경둜λ₯Ό κ·Έλ €, μ›ν•˜λŠ” 경둜λ₯Ό κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

포트폴리였 κ°€μΉ˜ ν–₯상​

νŒ€μ› λͺ¨λ‘κ°€ ν”„λ‘œμ νŠΈλ₯Ό 톡해 기술 μ—­λŸ‰μ„ κ°•ν™”ν•˜κ³ , 포트폴리였둜 ν™œμš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

πŸ“ ν”„λ‘œμ νŠΈ λ°°κ²½ 및 동기​

ν˜„λŒ€ μ‚¬νšŒμ—μ„œ 슀마트폰과 λ„€λΉ„κ²Œμ΄μ…˜ 앱은 ν•„μˆ˜μ μΈ λ„κ΅¬λ‘œ 자리 μž‘μ•˜μ§€λ§Œ, 쀑μž₯λ…„μΈ΅ μ‚¬μš©μžλ“€μ—κ²ŒλŠ” μ—¬μ „νžˆ λ³΅μž‘ν•˜κ³  μ‚¬μš©ν•˜κΈ° μ–΄λ €μš΄ κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. κ°€μ‘±μ΄λ‚˜ μΉœκ΅¬λ“€μ΄ 쀑μž₯λ…„μΈ΅ μ‚¬μš©μžμ—κ²Œ κΈΈ μ•ˆλ‚΄λ₯Ό ν•΄μ£Όκ³  μ‹Άμ§€λ§Œ, 기쑴의 지도 μ•±μœΌλ‘œλŠ” μΆ©λΆ„ν•˜μ§€ μ•Šμ„ λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이에 따라 쀑μž₯년측이 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” λ§žμΆ€ν˜• κΈΈ μ•ˆλ‚΄ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κ³ μž λ³Έ ν”„λ‘œμ νŠΈλ₯Ό κΈ°νšν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸ“ μ„œλΉ„μŠ€ μ˜ˆμƒ 이미지​

μ„œλΉ„μŠ€ μ˜ˆμƒ 이미지 링크

πŸ“ μ‚¬μš©μž μ‹œλ‚˜λ¦¬μ˜€β€‹

1. μ‚¬μš©μž μœ ν˜• μ •μ˜β€‹

  1. 일반 μ‚¬μš©μž
  • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 톡해 지도λ₯Ό 보고, 그림을 그리고, λ‹€λ₯Έ μ‚¬μš©μžμ˜ 그림을 λ³Ό 수 있음.
  • 아이디와 λΉ„λ°€λ²ˆν˜Έλ‘œ λ‘œκ·ΈμΈν•˜μ—¬ μžμ‹ μ˜ 그림을 생성, μˆ˜μ •(μ„  κ·Έλ¦¬λŠ” 펜과 μ§€μš°κ°œ μ‚¬μš©), μ‚­μ œν•  수 있음.
  1. λΉ„νšŒμ› μ‚¬μš©μž
  • λ‘œκ·ΈμΈν•˜μ§€ μ•Šκ³ λ„ 지도와 그림을 λ³Ό 수 있음.
  • 그림을 μƒμ„±ν•˜κ±°λ‚˜ μˆ˜μ •ν•  μˆ˜λŠ” μ—†μŒ.

2. μ£Όμš” μ‹œλ‚˜λ¦¬μ˜€β€‹

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 1: νšŒμ› κ°€μž… (κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„)​

λ°°κ²½

  • μƒˆλ‘œμš΄ μ‚¬μš©μžμΈ **"홍길동"**은 μœ„μΉ˜ 기반 κ·Έλ¦Ό 그리기 μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜κ³ μž ν•œλ‹€.

단계

  1. 접속: 홍길동은 λͺ¨λ°”일 λΈŒλΌμš°μ €μ—μ„œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ‘μ†ν•œλ‹€.
  2. νšŒμ› κ°€μž… νŽ˜μ΄μ§€ 이동: ν™”λ©΄ 우츑 μƒλ‹¨μ˜ "νšŒμ› κ°€μž…" λ²„νŠΌμ„ ν΄λ¦­ν•œλ‹€.
  3. 정보 μž…λ ₯: 아이디와 λΉ„λ°€λ²ˆν˜Έ μž…λ ₯ ν›„ κ°€μž… μ™„λ£Œ.
  4. μžλ™ 둜그인: κ°€μž… ν›„ μžλ™μœΌλ‘œ λ‘œκ·ΈμΈλ˜μ–΄ 메인 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•œλ‹€.

μ˜ˆμ™Έ 사항

  • λΉ„λ°€λ²ˆν˜Έ 뢈일치 μ‹œ κ²½κ³  λ©”μ‹œμ§€ ν‘œμ‹œ.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 2: 둜그인 및 λ‘œκ·Έμ•„μ›ƒβ€‹

단계

  1. 둜그인 νŽ˜μ΄μ§€ 이동 ν›„ 정보 μž…λ ₯ 및 둜그인 성곡.
  2. λ‘œκ·Έμ•„μ›ƒ: 우츑 μƒλ‹¨μ˜ "λ‘œκ·Έμ•„μ›ƒ" λ²„νŠΌ 클릭.

μ˜ˆμ™Έ 사항

  • 잘λͺ»λœ 정보 μ‹œ κ²½κ³  λ©”μ‹œμ§€ ν‘œμ‹œ.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 3: 지도 μœ„μ— κ·Έλ¦Ό 그리기 (펜 μ‚¬μš©)​

단계

  1. 그리기 λͺ¨λ“œ μ§„μž… ν›„ 펜 도ꡬ 선택 및 κ·Έλ¦Ό 그리기.
  2. κ·Έλ¦Ό μ €μž₯ ν›„ μ €μž₯ μ™„λ£Œ λ©”μ‹œμ§€ ν‘œμ‹œ.

μ˜ˆμ™Έ 사항

  • μ €μž₯ μ‹€νŒ¨ μ‹œ μž¬μ‹œλ„ μš”μ²­.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 4: κ·Έλ¦Ό μˆ˜μ • (μ§€μš°κ°œ μ‚¬μš©)​

단계

  1. μˆ˜μ • λͺ¨λ“œ μ§„μž… ν›„ μ§€μš°κ°œ 도ꡬ 선택.
  2. μˆ˜μ • ν›„ μ €μž₯.

μ˜ˆμ™Έ 사항

  • λ‹€λ₯Έ μ‚¬μš©μžμ˜ κ·Έλ¦Ό μˆ˜μ • μ‹œ κΆŒν•œ λΆ€μ‘± λ©”μ‹œμ§€ ν‘œμ‹œ.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 5: 지도 μΆ•μ†Œ 및 ν™•λŒ€ μ‹œ κ·Έλ¦Ό 연동​

단계

  1. 지도 μΆ•μ†Œ 및 ν™•λŒ€μ— 따라 그림이 μ—°λ™λ˜μ–΄ ν‘œμ‹œλ¨.

μ˜ˆμ™Έ 사항

  • 동기화 였λ₯˜ μ‹œ κ²½κ³  λ©”μ‹œμ§€ ν‘œμ‹œ.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 6: λ‹€λ₯Έ μ‚¬μš©μžμ˜ κ·Έλ¦Ό 보기​

단계

  1. 지도 탐색 ν›„ κ·Έλ¦Ό 선택 및 상세 정보 ν‘œμ‹œ.

μ˜ˆμ™Έ 사항

  • 뢈러였기 μ‹€νŒ¨ μ‹œ κ²½κ³  λ©”μ‹œμ§€ ν‘œμ‹œ.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 7: κ·Έλ¦Ό μ‚­μ œβ€‹

단계

  1. λ‚΄ κ·Έλ¦Ό λͺ©λ‘μ—μ„œ κ·Έλ¦Ό 선택 ν›„ μ‚­μ œ μˆ˜ν–‰.

μ˜ˆμ™Έ 사항

  • μ‚­μ œ μ‹€νŒ¨ μ‹œ κ²½κ³  λ©”μ‹œμ§€ ν‘œμ‹œ.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 8: λΉ„νšŒμ› μ‚¬μš©μžμ˜ νšŒμ› κ°€μž… μœ λ„β€‹

단계

  1. 그리기 λͺ¨λ“œ μ‹œλ„ μ‹œ νŒμ—… ν‘œμ‹œ.
  2. νšŒμ› κ°€μž… ν›„ κΈ°λŠ₯ μ‚¬μš© κ°€λŠ₯.

μ˜ˆμ™Έ 사항

  • κ°€μž…ν•˜μ§€ μ•Šμ„ 경우 νŒμ—… λ‹«κΈ°.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 9: μ‚¬μš©μž μ„€μ • λ³€κ²½ (펜과 μ§€μš°κ°œ μ„€μ •)​

단계

  1. μ„€μ • νŽ˜μ΄μ§€ 이동 ν›„ μ„€μ • λ³€κ²½ 및 μ €μž₯.

μ˜ˆμ™Έ 사항

  • μ €μž₯ μ‹€νŒ¨ μ‹œ κ²½κ³  λ©”μ‹œμ§€ ν‘œμ‹œ.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 10: κ·Έλ¦Ό κ³΅μœ ν•˜κΈ°β€‹

단계

  1. κ·Έλ¦Ό 선택 ν›„ 곡유 링크 생성 및 μΉœκ΅¬μ—κ²Œ 곡유.

μ˜ˆμ™Έ 사항

  • λΉ„νšŒμ›λ„ 링크둜 κ·Έλ¦Ό 확인 κ°€λŠ₯.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 11: 경둜 κ΅¬λΆ„ν•΄μ„œ 좔가​

단계

  1. 경둜λͺ… μ„€μ • ν›„ μ €μž₯ 및 확인.

μ˜ˆμ™Έ 사항

  • 였λ₯˜ λ°œμƒ μ‹œ 이전 μƒνƒœλ‘œ 되돌림.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 12: λ‹€λ₯Έ 경둜 확인​

단계

  1. λ‹€λ₯Έ 경둜 클릭 ν›„ 확인.

μ˜ˆμ™Έ 사항

  • 였λ₯˜ λ°œμƒ μ‹œ 이전 μƒνƒœ μœ μ§€.

πŸ“ μ‹œλ‚˜λ¦¬μ˜€ 13: κΆŒν•œ ν—ˆμš©β€‹

단계

  1. κΆŒν•œ μš”μ²­ μ‹œ ν—ˆμš©.

μ˜ˆμ™Έ 사항

  • λ―Έν—ˆμš© μ‹œ μž¬μš”μ²­ λ©”μ‹œμ§€ ν‘œμ‹œ.

3. μΆ”κ°€ κ³ λ € 사항​

  • 지도와 그림의 동기화: μ§€λ„μ˜ ν™•λŒ€/μΆ•μ†Œ μ‹œ 그림도 연동.
  • 도ꡬ μ œν•œ: 펜과 μ§€μš°κ°œλ§Œ 제곡.
  • 데이터 μ €μž₯ 및 동기화: μ’Œν‘œ 정보 μ €μž₯ 및 λ Œλ”λ§.

πŸ“ μœ μ¦ˆμΌ€μ΄μŠ€β€‹

μœ μ¦ˆμΌ€μ΄μŠ€ λ‹€μ΄μ–΄κ·Έλž¨

μ„€λͺ…:​

  • μ•‘ν„°:

    • μ‚¬μš©μž: λ‘œκ·ΈμΈν•œ μ‚¬μš©μžλ‘œ λͺ¨λ“  κΈ°λŠ₯ μ‚¬μš©.
    • λΉ„νšŒμ› μ‚¬μš©μž: μ œν•œλœ κΈ°λŠ₯ μ‚¬μš©.
  • μœ μ¦ˆμΌ€μ΄μŠ€:

    • νšŒμ› κ°€μž…, 둜그인, 지도 보기, κ·Έλ¦Ό 그리기/μˆ˜μ •/μ‚­μ œ, μ„€μ • λ³€κ²½, κ·Έλ¦Ό 곡유 λ“±.
  • 관계:

    • 포함 관계 (<<include>>): 일뢀 κΈ°λŠ₯이 λ‹€λ₯Έ κΈ°λŠ₯을 포함.
    • ν™•μž₯ 관계 (<<extend>>): νŠΉμ • μ‘°κ±΄μ—μ„œ κΈ°λŠ₯ ν™•μž₯.

πŸ“ 기술적인 도전​

λͺ¨λ°”일 ν™˜κ²½ μ΅œμ ν™”:​

  • Canvas API ν™œμš© 및 μ„±λŠ₯ μ΅œμ ν™”.

지도와 μΊ”λ²„μŠ€ 동기화 μ΅œμ ν™”:​

  • requestAnimationFrame, WebGL μ‚¬μš©.

ν…ŒμŠ€νŠΈ μžλ™ν™” 및 CI/CD ꡬ좕:​

  • Jest, Cypress, GitHub Actions μ‚¬μš©.

μ‹€μ‹œκ°„ μœ„μΉ˜ 좔적 κΈ°λŠ₯:​

  • WebSocket 및 WebRTC.

μ˜€ν”„λΌμΈ κΈ°λŠ₯ κ΅¬ν˜„:​

  • Service Worker, Cache API μ‚¬μš©.

πŸ“ μ‚¬μš© 기술 μŠ€νƒβ€‹

βš™οΈ Front-End​

  • React, TypeScript, pnpm, vite, swc, vitest, storybook, msw

βš™οΈ Back-End​

  • Node.js, JavaScript, pnpm, express

πŸ“ 기타 μ°Έκ³  μžλ£Œβ€‹