Skip to content

ge-um/Rewp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

252 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AppIcon

๋ ™

Group 275 2@3x Group 1000004742 3@3x Group 1000004744 2@3x IMG_3289 1@3x
๊ตฌ๋ถ„ ๋‚ด์šฉ
ํŒ€ ๊ตฌ์„ฑ iOS ๊ฐœ๋ฐœ 1๋ช…, ๋ฐฑ์—”๋“œ 1๋ช…, Design 1๋ช…
๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ 2025.12 ~ 2026.01
์ตœ์†Œ ๋ฒ„์ „ iOS 16.0+

์ฃผ์š” ๊ธฐ๋Šฅ

  • ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋งค๋ฌผ ํด๋Ÿฌ์Šคํ„ฐ๋ง
  • ๋งค๋ฌผ ์‹ค์‹œ๊ฐ„ ํ™•์ธ ๋ฐ ํ•„ํ„ฐ๋ง
  • ์‹ค์‹œ๊ฐ„ 1:1 ์ฑ„ํŒ… ๋ฐ ํŒŒ์ผ ์—…๋กœ๋“œ (Multipart/form-data)
  • ์นด๋“œ ๊ฒฐ์ œ (PG๊ฒฐ์ œ) ๋ฐ ์˜์ˆ˜์ฆ ๊ฒ€์ฆ
  • HLS ์ŠคํŠธ๋ฆฌ๋ฐ ๊ธฐ๋ฐ˜ ์ˆํผ ๋น„๋””์˜ค
  • WebView Bridge๋ฅผ ํ†ตํ•œ ์ถœ์„ ์ธ์ฆ
  • ์นด์นด์˜ค / ์• ํ”Œ ์†Œ์…œ ๋กœ๊ทธ์ธ
  • ๋ถ€๋™์‚ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ (๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑ/ ๋Œ“๊ธ€ / ๋‹ต๊ธ€ / ์ข‹์•„์š”)

๊ธฐ์ˆ  ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
UI UIKit, PinLayout, FlexLayout, Then
๋ฐ˜์‘ํ˜• RxSwift, RxCocoa
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Realm
๋„คํŠธ์›Œํฌ Alamofire, Kingfisher, Socket.IO
์•„ํ‚คํ…์ฒ˜ MVP + Input/Output, Repository Pattern
์ธ์ฆ KakaoSDK, AuthenticationService
Firebase Firebase Cloud Messaging
ํ”„๋ ˆ์ž„์›Œํฌ MapKit, CoreLocation, PhotosUI, WebKit

์•„ํ‚คํ…์ฒ˜

MVP + Input/Output

View์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ณ , ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์œ ์ง€ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Frame 285

MVP + Input/Output ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด ํ™”๋ฉด๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์žฅ๊ธฐ์ ์œผ๋กœ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ๋ฅผ ์—ผ๋‘์— ๋‘” ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, View์™€ ๋กœ์ง ๊ฐ„ ์˜์กด์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์œ ์ง€ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Presenter๋Š” View๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  Input์„ ๋ฐ›์•„ Output์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์œผ๋ฉฐ, ์˜์กด์„ฑ์€ ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์˜ํ•˜๊ณ  ์ƒ์„ฑ ์‹œ์ ์— ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹(DI)์„ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„์ฒด์— ๋Œ€ํ•œ ๊ฒฐํ•ฉ์„ ์ตœ์†Œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Container + Factory

Frame 294

์˜์กด์„ฑ ๊ด€๋ฆฌ๋Š” Container + Factory ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ, ์ธ์ฆ, ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋“ฑ ๊ณตํ†ต ์ธํ”„๋ผ๋Š” Protocol๋กœ ์ถ”์ƒํ™”ํ•œ ๋’ค, AppContainer์—์„œ ์‹ค์ œ ๊ตฌํ˜„์ฒด๋ฅผ ์ƒ์„ฑยท๊ด€๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ํ™”๋ฉด์€ Factory๋ฅผ ํ†ตํ•ด ์ž์‹ ์—๊ฒŒ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์ฃผ์ž…๋ฐ›์œผ๋ฉฐ, ViewController๋Š” ๊ตฌ์ฒด ๊ตฌํ˜„์ด ์•„๋‹Œ ์ถ”์ƒํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ์ˆ 

์ง€๋„ ๊ธฐ๋ฐ˜ ๋งค๋ฌผ ํด๋Ÿฌ์Šคํ„ฐ๋ง

IMG_3278 1@3x

๋ถ€๋™์‚ฐ ๋งค๋ฌผ์€ ํŠน์ • ์ง€์—ญ์— ๋ฐ€์ง‘๋˜๋Š” ํŠน์„ฑ์ด ์žˆ์–ด, ์ด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋ง์„ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ์ •์˜

  • ๋งค๋ฌผ์˜ ๋ฐ€์ง‘๋„๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ
  • Zoom In/Out ์‹œ UI Freezing์ด ์—†์„ ๊ฒƒ

๋ฐฉ์•ˆ ํƒ์ƒ‰

Group 1000004747
๋ฐฉ์‹ ์‹œ๊ฐ„ ๋ณต์žก๋„ ํŠน์ง•
๊ทธ๋ฆฌ๋“œ O(n) ๋ฐ”๋‘‘ํŒ์ฒ˜๋Ÿผ ์ธ์œ„์ ์œผ๋กœ ๋ณด์ž„
DBSCAN O(nยฒ) ์‹ค์‹œ๊ฐ„ ์ธํ„ฐ๋ž™์…˜์— ๋ถ€์ ํ•ฉ
๊ณ„์ธต์  ๊ทธ๋ฆฌ๋”” + KD-Tree O(โˆšn+k) ์›ํ˜• ๋‹จ์œ„๋กœ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ตฐ์ง‘

์ตœ์ข… ๊ตฌ์กฐ: ์คŒ ๋ ˆ๋ฒจ ๊ตฌ๊ฐ„๋ณ„ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ชจ๋ธ ์ „ํ™˜

  • ์ €์คŒ ๊ตฌ๊ฐ„ (Zoom 7~10): GeoJSON ํ–‰์ •๊ตฌ์—ญ(๋„) ํด๋ฆฌ๊ณค ๊ธฐ์ค€์œผ๋กœ ๋งค๋ฌผ ์ˆ˜ ์ง‘๊ณ„ โ†’ O(n) ์Šค์บ”
  • ๊ณ ์คŒ ๊ตฌ๊ฐ„ (Zoom 11~16): ๊ณ„์ธต์  ๊ทธ๋ฆฌ๋”” ํด๋Ÿฌ์Šคํ„ฐ๋ง + KD-Tree ๊ธฐ๋ฐ˜ ๊ณต๊ฐ„ ์ธ๋ฑ์‹ฑ
Group 1000004746@3x

์„ฑ๋Šฅ

  • n=5,000 ๊ธฐ์ค€ ์ „์ฒด ํŠธ๋ฆฌ ๋นŒ๋“œ ์•ฝ 0.1์ดˆ (์„œ์šธ ๋ฐ€์ง‘ ๋ถ„ํฌ)
  • ๊ท ๋“ฑ ๋ถ„ํฌ ์‹œ Lazy Build fallback์œผ๋กœ ์ตœ๋Œ€ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์•ฝ 2.8์ดˆ

2. ์‹ค์‹œ๊ฐ„ 1:1 ์ฑ„ํŒ…

IMG_3299 1@3x

Socket.IO ์„ ํƒ ์ด์œ 

  • ์ž๋™ ์žฌ์—ฐ๊ฒฐ, ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„ ๊ธฐ๋ฐ˜ ์žฌ์‹œ๋„, ๋„คํŠธ์›Œํฌ ๋ณ€ํ™” ๊ฐ์ง€, ์ „์†ก ๋ฐฉ์‹ ํด๋ฐฑ์„ ๊ธฐ๋ณธ ์ œ๊ณต
  • ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ๋นˆ๋ฒˆํ•œ ๋„คํŠธ์›Œํฌ ์ „ํ™˜์— ์•ˆ์ •์ ์œผ๋กœ ๋Œ€์‘

์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ ๋Œ€์‘

Frame 325
  • iOS๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์†Œ์ผ“ ์—ฐ๊ฒฐ ์œ ์ง€๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์Œ
  • ์•ฑ ์ƒํƒœ ์ „ํ™˜ ์‹œ ๋ช…์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐ ํ•ด์ œ/์žฌ์—ฐ๊ฒฐ ์ฒ˜๋ฆฌ
  • ์„œ๋ฒ„ ์ธก CLOSE_WAIT ์„ธ์…˜ ๋ฐฉ์ง€

์ฑ„ํŒ…๋ฐฉ ๋กœ๋”ฉ ์ˆœ์„œ

Frame 1000005303
  1. ์†Œ์ผ“ ์—ฐ๊ฒฐ (์‹ค์‹œ๊ฐ„ ์ˆ˜์‹  ์ฑ„๋„ ํ™•๋ณด)
  2. ๋กœ์ปฌ ์ €์žฅ์†Œ ๋ฉ”์‹œ์ง€ ์ฆ‰์‹œ ํ‘œ์‹œ
  3. ์„œ๋ฒ„ ๋™๊ธฐํ™” (๋ˆ„๋ฝ ๋ฉ”์‹œ์ง€ ๋ณด์™„)
  4. ์ค‘๋ณต ๋ฉ”์‹œ์ง€ ID ๊ธฐ์ค€ ํ•„ํ„ฐ๋ง

๋กœ์ปฌ ์ €์žฅ์†Œ: Realm ์„ ํƒ

Group 144
  • ์ฑ„ํŒ…์—์„œ ๋นˆ๋ฒˆํ•œ ์กฐํšŒยท๊ฐฑ์‹ ยท์‚ญ์ œ ์ž‘์—…์— ์ตœ์ ํ™”
  • Results ํƒ€์ž…์˜ Lazy Loading ํ™œ์šฉ์œผ๋กœ ์„ฑ๋Šฅ ์ด์  ๊ทน๋Œ€ํ™”
  • Thread-confined ํŠน์„ฑ์€ ๊ฐ’ ํƒ€์ž… ๋„๋ฉ”์ธ ๋ชจ๋ธ ๋ณ€ํ™˜์œผ๋กœ ํ•ด๊ฒฐ

์ฝ์ง€ ์•Š์€ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ

Group 250
  • Push ์ˆ˜์‹ : ๋‹ค๋ฅธ ๋ฐฉ ๋ฉ”์‹œ์ง€๋ฉด unreadCount += 1
  • ์ฑ„ํŒ…๋ฐฉ ์ž…์žฅ: ์ „์ฒด ์ฝ์Œ ์ฒ˜๋ฆฌ + ๋งˆ์ง€๋ง‰ ์ฝ์€ ์‹œ๊ฐ„ ๊ฐฑ์‹ 
  • ํฌ๊ทธ๋ผ์šด๋“œ ์ง„์ž…: ์„œ๋ฒ„ ์—…๋ฐ์ดํŠธ ์‹œ๊ฐ„ ๋น„๊ต ํ›„ ๋™๊ธฐํ™”

3. ๊ธฐํƒ€ ๊ธฐ๋Šฅ

์นด๋“œ ๊ฒฐ์ œ

Frame 264@3x
  • ํด๋ผ์ด์–ธํŠธ ๊ฒฐ์ œ ์„ฑ๊ณต ์‘๋‹ต๋งŒ์œผ๋กœ ์‹ ๋ขฐํ•˜์ง€ ์•Š์Œ
  • ์„œ๋ฒ„๊ฐ€ PG์‚ฌ์— ์ง์ ‘ ์˜์ˆ˜์ฆ ๊ฒ€์ฆ ํ›„ ๊ฒฐ์ œ ์™„๋ฃŒ ํŒ๋‹จ

ํ† ํฐ ๊ด€๋ฆฌ

  • Alamofire AuthenticationInterceptor๋กœ Access Token ์ž๋™ ์ฃผ์ž…
  • 401/419 ์‘๋‹ต ์‹œ Refresh Token์œผ๋กœ ์ž๋™ ๊ฐฑ์‹  ๋ฐ ์š”์ฒญ ์žฌ์‹œ๋„
  • ๊ฐฑ์‹  ์‹คํŒจ ์‹œ Keychain ์ •๋ฆฌ ํ›„ ๋กœ๊ทธ์ธ ํ™”๋ฉด ์ „ํ™˜

์ˆํผ ๋น„๋””์˜ค

  • HLS(m3u8) ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„ ์ตœ์†Œํ™”
  • WebVTT ๊ธฐ๋ฐ˜ ์ž๋ง‰ ํŒŒ์‹ฑ ๋ฐ ์žฌ์ƒ ์‹œ๊ฐ„ ๋™๊ธฐํ™”
  • ํ™”์งˆ ๋ณ€๊ฒฝ ์‹œ ์žฌ์ƒ ์œ„์น˜์™€ ์ƒํƒœ ์œ ์ง€

About

๐Ÿถ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages