Skip to content

Nal-see/nal-see-front-pwa

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

NAL-SEE

NAL-SEE 둜고

ν”„λ‘œμ νŠΈ 동기

'였늘 뭐 μž…μ§€?'λΌλŠ” μƒκ°μ—μ„œ 기획된 이 ν”„λ‘œμ νŠΈλŠ” μ‚¬λžŒλ“€μ΄ μ™ΈμΆœ μ‹œ 무엇을 μž…μ„μ§€ μ‰½κ²Œ κ²°μ •ν•  수 있게 λ•μžλŠ” μ•„μ΄λ””μ–΄λ‘œλΆ€ν„° κΈ°νšλ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžκ°€ 날씨λ₯Ό ν™•μΈν•˜λ©΄μ„œ λ‹€λ₯Έ μ‚¬λžŒλ“€μ˜ μ‹€μ œ μ°©μž₯을 λ³Ό 수 있게 ν•¨μœΌλ‘œμ¨, κ·Έλ“€μ˜ μ˜·μ°¨λ¦Όμ„ μ°Έκ³ ν•˜μ—¬ μžμ‹ μ˜ μŠ€νƒ€μΌμ„ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” μžμ‹ μ΄ μ›ν•˜λŠ” μŠ€νƒ€μΌμ˜ μ‚¬λžŒλ“€μ„ νŒ”λ‘œμš° ν•  수 있으며, 이λ₯Ό 톡해 보닀 ꡬ체적인 μŠ€νƒ€μΌ 아이디어λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ, 온라인 의λ₯˜ μ‡Όν•‘λͺ°κ³Όμ˜ 연계λ₯Ό 톡해 λΉ„μ¦ˆλ‹ˆμŠ€ λͺ¨λΈμ„ 고도화할 수 μžˆλŠ” κ°€λŠ₯성을 μ—΄μ–΄λ‘μ—ˆμŠ΅λ‹ˆλ‹€.

νŒ€ μ†Œκ°œ

ν”„λ‘ νŠΈμ—”λ“œ

ν”„λ‘ νŠΈμ—”λ“œ νŒ€ μ†Œκ°œ

이름 κΉ€μ±„ν˜„ ꢌ였영
μ—­ν•  FE-Lead TeamMate
κΈ°λŠ₯ * 메인지도, λ‚ μ”¨λ“œλ‘­ κ²Œμ‹œλ¬Ό 등둝, 둜그인 및 νšŒμ›νƒˆν‡΄, PWA, FCMμ•ŒλžŒ, ν”„λ‘ νŠΈ 배포 CI/CD * ν”Όλ“œ 리슀트 및 상세 ν”Όλ“œ RUD, 1:1 μ±„νŒ… 및 리슀트, μœ μ € ν”„λ‘œν•„, 정보 μˆ˜μ •, νŒ”λ‘œμš°, λ‘œκ·Έμ•„μ›ƒ
κΉƒν—ˆλΈŒ κΉ€μ±„ν˜„μ˜ GitHub ꢌ였영의 GitHub

μ‹œμž‘ κ°€μ΄λ“œ

배포 μ£Όμ†Œ

ν”„λ‘œμ νŠΈ 정보

  • 개발 κΈ°κ°„: 2024.02.29 ~ 2024.04.21

μ„œλΉ„μŠ€ 아킀텍쳐

NAL-SEE android

파일 ꡬ쑰

β”œβ”€β”€ README.md
β”œβ”€β”€ components.json
β”œβ”€β”€ dist
β”œβ”€β”€ index.html
β”œβ”€β”€ node_modules
β”œβ”€β”€ package-lock.json
β”œβ”€β”€ package.json
β”œβ”€β”€ postcss.config.js
β”œβ”€β”€ public
β”œβ”€β”€ src
β”‚   β”œβ”€β”€ App.tsx
β”‚   β”œβ”€β”€ assets
β”‚   β”œβ”€β”€ components
β”‚   β”œβ”€β”€ features
β”‚   β”‚   β”œβ”€β”€ Chat
β”‚   β”‚   β”œβ”€β”€ Feed
β”‚   β”‚   β”œβ”€β”€ Home
β”‚   β”‚   β”œβ”€β”€ Login
β”‚   β”‚   β”œβ”€β”€ Notifications
β”‚   β”‚   β”œβ”€β”€ OauthRedirect
β”‚   β”‚   β”œβ”€β”€ OptionalInfo
β”‚   β”‚   β”œβ”€β”€ Posts
β”‚   β”‚   β”œβ”€β”€ Profile
β”‚   β”‚   └── Splash
β”‚   β”œβ”€β”€ global.css
β”‚   β”œβ”€β”€ hooks
β”‚   β”œβ”€β”€ lib
β”‚   β”œβ”€β”€ main.tsx
β”‚   β”œβ”€β”€ mocks
β”‚   β”œβ”€β”€ routes
β”‚   β”œβ”€β”€ services
β”‚   β”œβ”€β”€ store
β”‚   β”œβ”€β”€ types
β”‚   └── vite-env.d.ts
β”œβ”€β”€ svg.d.ts
β”œβ”€β”€ svgr.template.cjs
β”œβ”€β”€ tailwind.config.js
β”œβ”€β”€ tsconfig.json
β”œβ”€β”€ tsconfig.node.json
β”œβ”€β”€ vite.config.ts
└── yarn.lock

파일 κ΅¬μ‘°λŠ” 크게 두 λΆ€λΆ„μœΌλ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€ :

  1. 곡톡

src 디렉토리 λ°”λ‘œ μ•„λž˜μ— μœ„μΉ˜ (예: components, hooks, routes, services, mocks λ“±)

ν”„λ‘œμ νŠΈ 전체에 κ³΅ν†΅μœΌλ‘œ μ μš©λ˜κ±°λ‚˜ μ—¬λŸ¬ κΈ°λŠ₯μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš© κ°€λŠ₯ν•œ κ΅¬ν˜„ 사항을 λ‘‘λ‹ˆλ‹€. (components - μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»€μŠ€ν…€ 및 shadcn ui μ»΄ν¬λ„ŒνŠΈ)

  1. κΈ°λŠ₯별 파일

src/features 디렉토리 μ•„λž˜μ— μ£Όμš” κΈ°λŠ₯ ꡬ뢄에 따라 디렉토리λ₯Ό λ§Œλ“€μ–΄ 관리 예: Chat, Feed, Home, Notification λ“± 각 κΈ°λŠ₯ 디렉토리 μ•ˆμ—λŠ” api, hooks, store, types λ“±μ˜ νŒŒμΌλ“€μ„ λ‘ μœΌλ‘œμ¨ κΈ°λŠ₯λ³„λ‘œ νŠΉν™”λœ κ΅¬ν˜„ 사항을 ν•œ 데 λͺ¨μ•„ λͺ¨λ“ˆν™”ν–ˆμŠ΅λ‹ˆλ‹€.

ꡬ쑰의 μž₯점:

  1. μ½”λ“œμ˜ λͺ¨λ“ˆν™”와 μž¬μ‚¬μš©μ„± 증가

곡톡 파일 λΆ„λ¦¬λ‘œ μ½”λ“œ 쀑볡 κ°μ†Œ 및 μž¬μ‚¬μš©μ„± ν–₯상

  1. μœ μ§€λ³΄μˆ˜μ„± ν–₯상

κΈ°λŠ₯별 파일 λΆ„λ¦¬λ‘œ νŠΉμ • κΈ°λŠ₯ μˆ˜μ • μ‹œ 파일 κ°„ 탐색 μ‹œκ°„μ„ 쀄이고, ν”„λ‘œμ νŠΈ 규λͺ¨μ— λ§žλŠ” 효율적인 μœ μ§€λ³΄μˆ˜ κ°€λŠ₯

  1. 파일 ꡬ쑰의 일관성과 예츑 κ°€λŠ₯μ„±

μΌκ΄€λœ ꡬ쑰둜 λ‹€λ₯Έ κ°œλ°œμžλ“€λ„ μ½”λ“œλ₯Ό μ‰½κ²Œ μ΄ν•΄ν•˜κ³  탐색할 수 있음 ​

μ£Όμš” κΈ°λŠ₯

Summary

  • μ‚¬μš©μž μœ„μΉ˜μ™€ λ‚ μ§œ 정보λ₯Ό 기반으둜 ν•΄λ‹Ή μ‹œμ μ˜ 날씨와 ν•¨κ»˜ ootd κ²Œμ‹œλ¬Όμ„ ν¬μŠ€νŒ…ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ€‘μ‹¬μœΌλ‘œ 함
  • 카카였 지도 API, 카카였 OAuth 2.0 μ‚¬μš© NAL-SEE QR

Sign Up & In

  • 선택 정보 μž…λ ₯: 개인 λ§žμΆ€ν˜• κ²Œμ‹œλ¬Ό μ œκ³΅μ„ μœ„ν•΄, 졜초 κ°€μž…μ‹œ μ²΄ν˜•, 체질, μŠ€νƒ€μΌμ— λŒ€ν•œ 선택정보 μž…λ ₯ (λ§ˆμ΄νŽ˜μ΄μ§€μ—μ„œ μˆ˜μ • κ°€λŠ₯)

  • 카카였 κ°„νŽΈ κ°€μž… 및 둜그인: OAuth 2.0 ν™œμš©, Access/Refresh Token μΏ ν‚€ μ €μž₯, μ„Έμ…˜ 관리

    NAL-SEE QR alt text

Map & Weather

  • useCurrentLocation, useKakaoMap μ»€μŠ€ν…€ ν›… κ΅¬ν˜„ : 타 κΈ°λŠ₯에 μ€‘λ³΅λ˜λŠ” λ‘œμ§μ„ λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μ½”λ“œ μž¬μ‚¬μš©μ„±μ„ λ†’μž„

  • tanstack-query의 useQueryλ₯Ό ν†΅ν•œ μ„œλ²„ 데이터 μƒνƒœ 관리

  • ν˜„μž¬ μœ„μΉ˜ μ‹€μ‹œκ°„ 날씨 쑰회: 상단 날씨 λ°”λ‘œ 확인 κ°€λŠ₯, ν΄λ¦­μ‹œ ν™•μž₯λ˜μ–΄ 상세 정보 쑰회

  • 지도λ₯Ό λ“œλž˜κ·Έν•˜λ©° μœ μ € μœ„μΉ˜ 근처의 날씨 λ“œλ‘­ 탐색: ꡬ역별 검색 κ²Œμ‹œλ¬Όλ“€μ„ κ·Έλ£Ήν•‘ν•΄ 마컀둜 ν‘œμ‹œ

    alt text

Post

  • react hook form으둜 multi-step form κ΅¬ν˜„ 및 form data μƒνƒœ 관리

  • zod둜 νƒ€μž…μŠ€ν¬λ¦½νŠΈμ— μ΅œμ ν™”λœ validation

  • 사진 등둝 (쀑볡 λΆˆκ°€, μ΅œλŒ€ 3μž₯), μ—…λ‘œλ“œ μœ„μΉ˜ 지정 (draggable marker μ»€μŠ€ν…€)

  • μœ„μΉ˜ μ§€μ •μœΌλ‘œ ν˜„μž¬ 날씨 데이터도 ν•¨κ»˜ μ €μž₯ (OpenWeatherMap API ν™œμš©)

    alt text

Feed

  • useInfiniteQuery둜 λ¬΄ν•œ 슀크둀 κ΅¬ν˜„
  • ν˜„μž¬ μœ„μΉ˜ 기반 ν”Όλ“œ 리슀트 ν‘œμ‹œ
  • ν”Όλ“œ μ‹€μ‹œκ°„ μ’‹μ•„μš”/λŒ“κΈ€ CRUD
  • κ²Œμ‹œκΈ€ μƒμ„Έμ‘°νšŒ: 날씨 정보 및 사진 μΊλŸ¬μ…€ λ ˆμ΄μ•„μ›ƒ alt text

My Page

  • ν”„λ‘œν•„ 선택 정보 μˆ˜μ •, μ•Œλ¦Ό μˆ˜μ‹  μ—¬λΆ€ μˆ˜μ •

  • νŒ”λ‘œμ›Œ/νŒ”λ‘œμž‰ 리슀트 쑰회 및 νŒ”λ‘œμš°/μ–ΈνŒ”λ‘œμš°

  • λ‚΄ ν”Όλ“œ 쑰회

  • REST API 기반 λ‘œκ·Έμ•„μ›ƒ, νšŒμ›νƒˆν‡΄

    alt text

Message

  • Websocket (stomp/sockjs)으둜 μ‹€μ‹œκ°„ μ±„νŒ… κ΅¬ν˜„

  • SSE (Server-Sent-Event)둜 μ‚¬μš©μž 온라인 μƒνƒœ μ‹€μ‹œκ°„ μ—…λ°μ΄νŠΈ

  • μ±„νŒ… λͺ©λ‘μ—μ„œ λ©”μ‹œμ§€ 읽음 μƒνƒœ 반영

    alt text

Notification

  • FCM (Firebase Cloud Messaging)으둜 ν‘Έμ‹œ μ•Œλ¦Ό κ΅¬ν˜„

  • 졜초 둜그인 μ‹œ μ•Œλ¦Ό μ„€μ • νŒμ—…μœΌλ‘œ κΆŒν•œ μš”μ²­

  • λΈŒλΌμš°μ € κΆŒν•œ ν—ˆμš© μ‹œ FCM 토큰 생성 및 λ°±μ—”λ“œλ‘œ 전솑

    alt text

기술 선택 이유

Next.js vs React

React Logo

  • ν”„λ‘œμ νŠΈμ˜ 규λͺ¨μ™€ μš”κ΅¬μ‚¬ν•­μ„ 고렀해보면, λ³Έ μ„œλΉ„μŠ€λŠ” μ‹€μ‹œκ°„ μœ μ € μœ„μΉ˜λ₯Ό 기반으둜 ν•œ ν΄λΌμ΄μ–ΈνŠΈλ‹¨μ—μ„œμ˜ μΈν„°λž™μ…˜ 비쀑이 λ†’μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ„œλ²„μ‚¬μ΄λ“œ λ Œλ”λ§ λ“± Next.js만의 이점을 μ„œλΉ„μŠ€μ— μ˜¨μ „νžˆ λ…Ήμ—¬λ‚΄κΈ° μ–΄λ ΅λ‹€κ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€. λ”λΆˆμ–΄ Next.js의 App routerλŠ” μƒλŒ€μ μœΌλ‘œ μ΅œκ·Όμ— λ¦΄λ¦¬μ¦ˆλ˜μ–΄, 타 λΌμ΄λΈŒλŸ¬λ¦¬λ“€κ³Όμ˜ μ™„λ²½ν•œ ν˜Έν™˜μ„±μ„ 보μž₯ν•˜κΈ° μ–΄λ €μ› μŠ΅λ‹ˆλ‹€. 이에 μ΅œλŒ€ν•œ μ•ˆμ •μ μ΄κ³  완성도 μžˆλŠ” μ„œλΉ„μŠ€ ꡬ좕을 μœ„ν•΄ Next.jsλ„μž…μ„ μ·¨μ†Œν•˜κ³  React ν”„λ‘œμ νŠΈλ‘œ μ§„ν–‰ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

TypeScript

TypeScript Logo

  • 정적 νƒ€μž… 검사λ₯Ό 톡해 μ½”λ“œμ˜ μ•ˆμ •μ„± ν–₯상, μ½”λ“œμ˜ 가독성을 λ†’μ—¬μ£Όλ©°, 개발 생산성을 ν–₯상
  • ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ μ»€μ§€λ©΄μ„œ μ½”λ“œμ˜ λ³΅μž‘μ„±μ΄ μ¦κ°€ν•˜μ—¬ μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μ›Ήμ†ŒμΌ“κ³Ό SSE 병행 μ‚¬μš©

WebSocket and SSE

  • μ›Ήμ†ŒμΌ“(Stomp/SockJS) : μ±„νŒ… κΈ°λŠ₯ κ΅¬ν˜„ μ›Ήμ†ŒμΌ“μ„ 톡해 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 지속적인 연결을 μœ μ§€ν•˜κ³  λ©”μ‹œμ§€λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ 주고받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • SSE : μ‚¬μš©μžμ˜ 온라인 μƒνƒœ μ—…λ°μ΄νŠΈμ™€ 같이 μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œμ˜ 단방ν–₯ 이벀트 전솑이 ν•„μš”ν•œ 경우 SSEλŠ” μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 이벀트λ₯Ό μ „μ†‘ν•˜λŠ”λ° μ ν•©ν•˜λ©°, μ›Ήμ†ŒμΌ“λ³΄λ‹€ κ°„λ‹¨ν•˜κ³  κ°€λ³μŠ΅λ‹ˆλ‹€.

Zustand

Zustand Logo

  • κ°„λ‹¨ν•˜κ³  μ§κ΄€μ μž…λ‹ˆλ‹€.
  • Redux에 λΉ„ν•΄ λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ μ½”λ“œκ°€ 적어 생산성 ν–₯상을 μœ„ν•΄ μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.

Vite

Vite Logo

  • μ΅œμ†Œν•œμ˜ μ„€μ •μœΌλ‘œ λΉ λ₯΄κ²Œ 초기 λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈ ν™˜κ²½μ„ ꡬ좕할 수 있기 λ•Œλ¬Έμ— μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ HMR, λΉ λ₯Έ 개발 μ„œλ²„ μ§€μ›μœΌλ‘œ 개발 κ³Όμ •μ—μ„œμ˜ 생산성을 ν–₯μƒν•΄μ€€λ‹€λŠ” 점도 μž₯μ μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

Tailwind CSS

Tailwind CSS Logo

  • μœ μ—°ν•œ μ»€μŠ€ν„°λ§ˆμ΄μ§•, 직관적인 클래슀 이름, 그리고 λΉ λ₯Έ 개발 속도가 μž₯μ μž…λ‹ˆλ‹€. λ˜ν•œ shadcn/uiμ™€μ˜ ν˜Έν™˜μ„±λ„ κ³ λ €λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Shadcn/ui

Shadcn/ui Logo

  • μ ‘κ·Όμ„±κ³Ό λ””μžμΈμ΄ 고렀된 κ³ ν’ˆμ§ˆμ˜ UI μ»΄ν¬λ„ŒνŠΈλ₯Ό λΉ λ₯΄κ²Œ κ΅¬ν˜„ κ°€λŠ₯
  • Tailwind CSS와 잘 ν†΅ν•©λ˜μ–΄ μ‚¬μš©μ΄ νŽΈλ¦¬ν•©λ‹ˆλ‹€.

React Router

  • κ°„λ‹¨ν•˜κ³  직관적인 APIλ₯Ό μ œκ³΅ν•˜λ©°
  • 동적 λΌμš°νŒ…κ³Ό 쀑첩 λΌμš°νŒ…μ„ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

PWA

PWA Logo

  • nalsee μ„œλΉ„μŠ€ νŠΉμ„±μƒ λ°μŠ€ν¬νƒ‘λ³΄λ‹€λŠ” λͺ¨λ°”일 ν™˜κ²½μ—μ„œ μ‚¬μš©μ„±μ΄ λ‘λ“œλŸ¬μ§ˆ 것이라고 νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€. 이에 μ›ΉκΈ°λ°˜ ν”„λ‘œμ νŠΈμ΄λ©΄μ„œλ„ λͺ¨λ°”일 μ‚¬μš©μ„±μ„ λŒμ–΄μ˜¬λ¦΄ 수 μžˆλŠ” Progressive Web App을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. λ”λΆˆμ–΄ λ„€μ΄ν‹°λΈŒ μ•±κ³Ό λΉ„κ΅ν–ˆμ„ λ•Œ μ‚¬μš©μžμ˜ μˆ˜λ™ μ—…λ°μ΄νŠΈ 없이도 항상 μ΅œμ‹  버전을 μœ μ§€ν•  수 μžˆλ‹€λŠ” 점, μ›Ή κ²€μƒ‰λ§ŒμœΌλ‘œλ„ μ–΄ν”Œμ„ λ‹€μš΄λ°›μ„ 수 μžˆλŠ” μ ‘κ·Όμ„± λ“±μ˜ μž₯점이 κ³ λ €λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Axios

Axios Logo

  • μš”μ²­κ³Ό 응닡을 μ‰½κ²Œ μΈν„°μ…‰νŠΈν•˜κ³  λ³€ν˜• / μžλ™μœΌλ‘œ JSON 데이터λ₯Ό λ³€ν™˜ 및 μ—λŸ¬ 처리 용이

MSW

MSW Logo

  • λ°±μ—”λ“œ APIμ™€λŠ” λ…λ¦½μ μœΌλ‘œ ν”„λ‘ νŠΈμ—”λ“œ 개발 μ§„ν–‰μ‹œ μ‹€μ œ ν†΅μ‹ ν™˜κ²½κ³Ό μœ μ‚¬ν•œ λͺ¨ν‚Ή APIλ₯Ό 톡해 개발과 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κ³ μž λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€.

AWS (S3 + Cloudfront + Route53) + Github Actions

  • 정적 배포 λ„κ΅¬λ‘œ AWSλ₯Ό, λΉŒλ“œ 및 S3 싱크뢀터 CDN 파일 invalidate 과정을 μžλ™ν™”ν•˜κΈ° μœ„ν•΄ Github Actionsλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. CloudfrontλŠ” λ‹¨μˆœνžˆ S3λ§Œμ„ μ‚¬μš©ν–ˆμ„ λ•Œλ³΄λ‹€ λ³΄μ•ˆμ μΈ μΈ‘λ©΄μ—μ„œ μš°μˆ˜ν•˜κΈ°μ— μ„ νƒν–ˆμœΌλ©°, μ„œλΈŒλ„λ©”μΈ 섀정을 μœ„ν•΄ Route53을 ν•¨κ»˜ λ„μž…ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Krampoline & Docker hub + Github Actions

  • 크램폴린 D2hubμ—μ„œ λΉŒλ“œ μ „ ν™˜κ²½λ³€μˆ˜ 섀정이 λΆˆκ°€λŠ₯ν–ˆλ˜ κ΄€κ³„λ‘œ, Docker hub둜 이미지 λ ˆν¬μ§€ν† λ¦¬λ₯Ό κ΅μ²΄ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ ν™˜κ²½λ³€μˆ˜ μ£Όμž… 및 도컀 이미지 λΉŒλ“œ, 푸쉬 과정을 μžλ™ν™”ν•˜κΈ° μœ„ν•΄ Github Action을 ν•¨κ»˜ μ‚¬μš©ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

νŠΈλŸ¬λΈ”μŠˆνŒ…

1. λΈŒλΌμš°μ €κ°„ μƒμ΄ν•œ κ°œμΈμ •λ³΄λ³΄ν˜Έμ •μ±…

  • Backend νŠΈλŸ¬λΈ” μŠˆνŒ… μ‚¬λ‘€μ—μ„œ μ•Œ 수 μžˆλ“―μ΄, μ΄ˆλ°˜μ—λŠ” Cross-site 쿠킀에 λŒ€ν•œ μ œμ•½μ„ μš°νšŒν•˜κ³ μž ν•„μš”ν•œ 섀정을 μ™„λ£Œν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Safari λΈŒλΌμš°μ €μ˜ 경우, 더 κ°•λ ₯ν•œ λ³΄ν˜Έμ •μ±…μ„ μ μš©ν•˜μ—¬ cross-site μΏ ν‚€λ₯Ό μš”μ²­μ—μ„œ μ œμ™Έν•©λ‹ˆλ‹€. 인증 및 인가 λ°©μ‹μœΌλ‘œ JWT 토큰을 쿠킀에 λ‹΄λŠ” μƒν™©μ—μ„œ λ°˜λ“œμ‹œ ν•΄κ²°λ˜μ–΄μ•Ό ν•˜λŠ” μƒν™©μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

  • mixed-contentλ₯Ό λ‹€λ£¨λŠ” 방식 λ˜ν•œ Safariκ°€ 더 엄격해, 카카였 둜그인 ν›„ λΆˆλŸ¬μ˜€λŠ” ν”„λ‘œν•„ 이미지가 κΉ¨μ§€λŠ” ν˜„μƒμ΄ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

    βœ… ν•΄κ²°

    • μΏ ν‚€μ˜ 경우, 배포 μ„œλΈŒλ„λ©”μΈ(CNAME)을 μ„€μ •ν•΄μ€ŒμœΌλ‘œμ¨ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
    • 이미지 μ†ŒμŠ€ url의 경우 http β†’ https둜 κ΅μ²΄ν•˜λŠ” μœ ν‹Έ ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄ μ μš©ν•¨μœΌλ‘œμ¨ ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

2. λΈŒλΌμš°μ € geolocation API의 속도 지연

  • μ‚¬μš©μžμ˜ μœ„μΉ˜ 정보λ₯Ό 뢈러였기 μœ„ν•΄ navigator.geolocation APIλ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ, μ‹€μ œ μœ„μΉ˜λ₯Ό λΆˆλŸ¬μ˜€κΈ°κΉŒμ§€ κ²½μš°μ— 따라 수 초의 μ‹œκ°„μ΄ μ†Œμš”λ˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

  • 지도λ₯Ό λ Œλ”λ§ν•˜κΈ° μ „κΉŒμ§€ 지도 ν™”λ©΄ 전체가 λ‘œλ”© μƒνƒœλ‘œ ν‘œμ‹œλ˜μ–΄, μœ μ € κ²½ν—˜μ„ ν•΄μΉ˜κ³  μ„œλΉ„μŠ€κ°€ λ§€λ„λŸ½μ§€ λͺ»ν•˜λ‹€λŠ” 인상을 쀄 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

    βœ… ν•΄κ²°

    • κΈ°λ³Έ μ’Œν‘œλ₯Ό 지정해두고, μ΄ˆκΈ°μ—λŠ” ν•΄λ‹Ή μ’Œν‘œλ₯Ό μ‚¬μš©ν•΄ 지도λ₯Ό μš°μ„  λ Œλ”λ§ν•©λ‹ˆλ‹€.
    • μ‹€μ œ μœ„μΉ˜λ₯Ό 뢈러였기 μ „κΉŒμ§€λŠ” ν˜„μž¬ μœ„μΉ˜ 마컀λ₯Ό νšŒμƒ‰μœΌλ‘œ, μœ„μΉ˜κ°€ 적용된 ν›„μ—λŠ” 컬러둜 ν‘œμ‹œν•˜μ—¬ 지도 ν™”λ©΄ λ‚΄μ—μ„œ μœ„μΉ˜ μƒνƒœμ˜ λ³€ν™”λ₯Ό μ‹œκ°ν™”ν–ˆμŠ΅λ‹ˆλ‹€.
    • μœ μ €μ˜ λ§ˆμ§€λ§‰ 접속 μœ„μΉ˜λ₯Ό localStorage에 μ €μž₯ν•˜κ³ , 재 μ ‘μ†μ‹œ ν•΄λ‹Ή 값을 λΆˆλŸ¬μ™€ λ Œλ”λ§ν•©λ‹ˆλ‹€.
    • μ΄λŸ¬ν•œ 낙관적 UI μ—…λ°μ΄νŠΈλ‘œ λΈŒλΌμš°μ € λ‚΄μž₯ API의 μ„±λŠ₯ ν•œκ³„λ₯Ό μ–΄λŠμ •λ„ 감좜 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

3. Notification API의 μ œμ•½μ‚¬ν•­

  • λΈŒλΌμš°μ €μ—μ„œλŠ” μ‚¬μš©μžμ˜ μ•Œλ¦Ό κΆŒν•œ μ„€μ • νŒμ—…μ„ ν”„λ‘œκ·Έλž˜λ°μ μœΌλ‘œ μ‘°μž‘ν•  수 없도둝 μ œν•œν•΄λ‘κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • μœ μ €κ°€ 직접 λΈŒλΌμš°μ €μ˜ 섀정을 μ‘°μž‘ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ—, μ„œλΉ„μŠ€ λ‚΄μ—μ„œ μ•ŒλžŒ ν™œμ„±/λΉ„ν™œμ„±ν™”μ‹œ μ„œλΉ„μŠ€μ›Œμ»€μ˜ μ„€μ • μƒνƒœμ™€ λΈŒλΌμš°μ € μ•Œλ¦Ό κΆŒν•œ μƒνƒœκ°€ λΆˆμΌμΉ˜ν•  수 μžˆλ‹€λŠ” 문제점이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

    βœ… ν•΄κ²°

    • UX둜 차선책을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
      • 졜초 κ°€μž…μ‹œ β€˜μ•Œλ¦Ό ν—ˆμš©ν•˜κΈ°β€™λ²„νŠΌμ΄ μΆ”κ°€λœ νŒμ—…μœΌλ‘œ μ‚¬μš©μžμ˜ 직접적인 μ•Œλ¦Ό 섀정을 μœ λ„ν•©λ‹ˆλ‹€.
      • λ§ˆμ΄νŽ˜μ΄μ§€μ—μ„œ μ•Œλ¦Ό μ—¬λΆ€λ₯Ό μ‘°μ •ν•  수 μžˆλŠ” 토글을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ•Œλ¦Όμ„ ν•΄μ œν•  경우 μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ— λŒ€ν•œ κΆŒν•œ 섀정을 λ”°λ‘œ ν•΄μ€˜μ•Όν•˜κΈ° λ•Œλ¬Έμ—, 이λ₯Ό νŒμ—…μœΌλ‘œ μ•ˆλ‚΄ν•˜λ©° UX적인 νλ¦„μœΌλ‘œ ν’€μ–΄ κ΅¬ν˜„ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published