Giter Club home page Giter Club logo

ios-data-layer's Introduction

header

๐Ÿ‘‹ Hello! I'm Jeongho Moon.

๐ŸŽ“ Education

  • ๐Ÿ› Seoul National University of Science and Technology
    • ๐Ÿ“š Computer Science and Engineering

๐Ÿ” Overview

  • ๐Ÿ’ผ Currently working as a Software Engineer at 24.5 Corp.
  • ๐Ÿ“š Focused on Mobile and Web technologies.
  • ๐ŸŒฑ Currently studying Natural Language Processing.

๐Ÿ’ผ Tech Stack

Mobile

Web

DevOps

Infrastructure


๐Ÿ™ Thanks for visiting! Feel free to connect if you'd like to collaborate!

ios-data-layer's People

Contributors

jeonghomoon avatar

Stargazers

 avatar

Watchers

 avatar

ios-data-layer's Issues

initial commit

Description

ios-data-layer ํ”„๋กœ์ ํŠธ์˜ ์ดˆ๊ธฐ ์„ค์ •์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” Unit Test๋ฅผ ํฌํ•จํ•  ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์— Unit Testing Bundle์ด ํฌํ•จ๋œ iOS Project๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. gitingore๋ฅผ ํ†ตํ•ด iOS ํ”„๋กœ์ ํŠธ์— ์ƒ๊ธฐ๋Š” ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์— ๋Œ€ํ•œ ์ปค๋ฐ‹์„ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ•ด๋‹น ์ด์Šˆ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ์ปค๋ฐ‹์€ ์ €์žฅ์†Œ์˜ ์ตœ์ดˆ ์ปค๋ฐ‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ main์— push ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„์— ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

TODO

DataLayer

  • unit test bundle
  • .gitignore
  • Branch protection rules

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

network service test

Description

#20 ๋ฒˆ ์ด์Šˆ์—์„œ NetworkService ํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์‘๋‹ต ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๊ฐ€ ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด์ „ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์‹œ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ๋˜ encoding, multipartFormData์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ๊ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— statusCode์˜ ๊ฐ’์„ ํ™•์ธํ•˜๋Š” XCTAssertEqual๋ผ์ธ์ด ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. invalidHTTPURLResponse ์—๋Ÿฌ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. Routable ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•œ ์—ด๊ฑฐํ˜•์— encoding, multipartFormData๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

TODO

  • statusCode test
  • invalidHTTPURLResponse test
  • empty encoding, multipartFormData property

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #20

cocoapods, alamofire

Description

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ฑ์˜ ํ”„๋กœ์ ํŠธ ์ข…์†์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด SPM๋‚˜ CocoaPods๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋นŒ๋“œ ์„ค์ •์˜ ์šฉ์ด์„ฑ์ด ์žˆ๋Š” CocoaPods๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ํ”„๋กœ์ ํŠธ์— CocoaPods ์ดˆ๊ธฐํ™” ํ›„ ์ฃผ์„ ์ œ๊ฑฐ, ํ”Œ๋žซํผ ๋ช…์‹œ๋“ฑ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณธ ํ”„๋กœ์ ํŠธ์˜ HTTP networking library๋กœ ์‚ฌ์šฉํ•  Alamofire๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

TODO

Dependency

  • init CocoaPods
  • insall Alamofire

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

network service test

Description

NetworkService ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
WWDC 2018์—์„œ ๊ณต๊ฐœํ•œ networking stack์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ํŒ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ์š”์ฒญ์— ๋Œ€ํ•ด ์‘๋‹ตํ•˜๊ณ  MockResponse๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” MockURLProtocol์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. MockURLProtocol ๊ด€๋ จ ์„ค์ •์„ NetworkService ํด๋ž˜์Šค์— ์ฃผ์ž…ํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” initializer๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์ผ๋ฐ˜ ์š”์ฒญ ์™ธ์—๋„ ์ธ์ฝ”ํŒ… ์„ฑ๊ณต/์—๋Ÿฌ ์š”์ฒญ, ์—…๋กœ๋“œ ์„ฑ๊ณต/์—๋Ÿฌ ์š”์ฒญ ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” Router๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  4. 3์—์„œ ์ž‘์„ฑํ•œ Router๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ ์š”์ฒญ ์‘๋‹ต์˜ ์„ฑ๊ณต/์‹คํŒจ/์˜ค๋ฅ˜ ์ผ€์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

TODO

NetworkServiceTests

  • MockURLProtocol
  • NetworkService convenience initializer
  • TestRouter
  • ValidSucees, ValidFailure, InvalidError test

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

persistent service test

Description

๋ฐฐ๊ฒฝ

  • PersistentService ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. Keychain, UserDefaults์˜ identifier๋ฅผ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋ฒˆ๋“ค identifier๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. Keychain, UserDefaults์˜ identifier๋ฅผ ์ฃผ์ž…ํ•˜๊ธฐ ์œ„ํ•ด PersistentService ํด๋ž˜์Šค์˜ convenience initializer๋ฅผ ์ž‘์„ฑํ•ด์•ผ๋ฉ๋‹ˆ๋‹ค.
  3. ๋‘ ์ €์žฅ์†Œ ๋ชจ๋‘ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ €์žฅ์†Œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ ํƒํ•œ ๋‘ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ๊ณตํ†ต๋œ ๋กœ์ง์€ ๋ถ„๋ฆฌ ํ›„, ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์ด์šฉํ•˜์—ฌ ๊ฐ ํ…Œ์ŠคํŠธ์— ์ฑ„ํƒํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๊ฐ„์†Œํ™” ํ•ฉ๋‹ˆ๋‹ค.

TODO

  • BundleProvider for test
  • PersistentService convenience initializer for test
  • PersistentService default implementation protocol
  • KeychainStore, UserDefaultsStore Tests

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #29

validate perform request

Description

๊ฐœ์š”

  • ์•ž์„  PR์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ๊ณผ ๊ฐ™์ด 401์„ ํฌํ•จํ•œ 4XX์˜ ์‘๋‹ต ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„ ์‘๋‹ต์— ๋Œ€ํ•ด Intercept๋ฅผ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Alamofire์˜ validate ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ Intercept๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ†ต์‹ ๊ฐ„ ์—๋Ÿฌ๋ฅผ ์œ ๋ฐœํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. Alamofire์˜ validate ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 200..<300 ์ด์™ธ์˜ ์‘๋‹ต ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์—๋Ÿฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. responseDecodable ๋ฉ”์†Œ๋“œ๋ฅผ responseData ๋ฉ”์†Œ๋“œ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ result๊ฐ€ ์•„๋‹Œ data, error์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ํ•ธ๋“ค๋ง ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

TODO

  • validate
  • responseData

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #11 #33 #34

issue, pr template

Description

github์—์„œ Issue ๋˜๋Š” PR์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๊ด€๋ จ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
repository ๊ด€๋ฆฌ ์ฐจ์›์—์„œ ํŠน์ • ํ˜•์‹์˜ ํ…œํ”Œ๋ฆฟ์„ ํ†ตํ•ด ํ•ด๋‹น ๋‚ด์šฉ์„ ํ†ต์ผํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ์ด์Šˆ ํ…œํ”Œ๋ฆฟ
  2. PR ํ…œํ”Œ๋ฆฟ

TODO

Template

  • ISSUE_TEMPLATE.md
  • PULL_REQUEST_TEMPLATE.md

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

alamofire router

Description

์•ฑ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ๋„คํŠธ์›Œํฌ ์Šคํƒ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ๊ณตํ†ต ํŒจํ„ด์„ ์ฑ„ํƒํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์šฐํŒ…์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ์œ„ํ•ด Alamofire์—์„œ ์ œ๊ณตํ•˜๋Š” URLRequestConvertible ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•œ Routable ํ”„๋กœํ† ์ฝœ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ๊ตฌํ˜„์˜ ๋Œ€ํ•œ ์˜ˆ์‹œ๋Š” Alamofire์˜ ๊ณต์‹ ๋ฌธ์„œ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ๊ณต์‹ ๋ฌธ์„œ์™€ ์œ ์‚ฌํ•˜๊ฒŒ baseURL, method, path, parameter์˜ ํ”„๋กœํผํ‹ฐ์™€ asURLRequest ๋ฉ”์†Œ๋“œ๊ฐ€ ์„ค์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. RESTFulํ•œ ์š”์ฒญ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ encoding ์„ค์ • ์™ธ์— ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฏธ๋””์–ด, ์ด๋ฏธ์ง€ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ์œ„ํ•ด multipartFormData ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TODO

Routable

  • baseURL, method, path, parameter, asURLRequest
  • ParameterEncoder
  • MultipartFormData

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

persistent service

Description

๊ฐœ์š”

  • UserDefaultsServices ํด๋ž˜์Šค๋Š” KeychainService ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค, ์—๋Ÿฌ ํƒ€์ž…์ด ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
  • Keychain ํด๋ž˜์Šค๋„ UserDefaults์˜ suiteName๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ service ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„์˜ ์ด์œ ๋ฃŒ ์ €์žฅ์†Œ ํƒ€์ž…์„ ์„ ํƒํ•˜์—ฌ Key-Value ์Œ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” PersistentService ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. keychain์˜ service, userDefault์˜ sutieName์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด identifier๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  Keychain, UserDefaults ์ €์žฅ์†Œ๋ฅผ initializer๋ฅผ ์ด์šฉํ•ด ์„ค์ • ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  3. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด identifier๋ฅผ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™”๋ฅผ ์œ„ํ•ด ๊ด€๋ จ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. KeychainService, UserDefaultsService ํด๋ž˜์Šค์— ๊ณตํ†ต๋œ ๊ณผ์ •์„ PersistentService๋กœ ์ด๊ด€ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TODO

  • identifier, storeType initializer
  • removePersistentData method
  • service-store ๋ถ„๋ฆฌ

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #24 #27

network service

Description

API ํ†ต์‹ ์„ ์ฃผ๊ด€ํ•˜๋Š” NetworkService ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ NetworkService ํด๋ž˜์Šค์— Alamofire์˜ Session ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. Routable ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์š”์ฒญ์„ ์‹ค์‹œํ•˜๊ณ , ResponseResult ํƒ€์ž…์œผ๋กœ Decoding ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๋„์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ผ๋ฐ˜ ์š”์ฒญ ์™ธ์—๋„ multipartFormData ํ˜•ํƒœ์˜ ์š”์ฒญ๋„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TODO

NetworkService

  • Session instance DI
  • request and decoding
  • multipartFormData upload

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #7 #8

request result

Description

์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต๊ฐ’์„ decoding ํ•˜๊ธฐ์œ„ํ•ด ํŠน์ • ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋ณธ ํ”„๋กœ์ ํŠธ๊ฐ€ Boilerplate ์ž„์„ ๊ณ ๋ คํ•˜์—ฌ ๊ด€๋ จ ๊ฐ’์„ ์ œ๋„ค๋ฆญํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ์‘๋‹ต์— ๋Œ€ํ•œ ์˜ค๋ฅ˜์™€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ›์•„์˜จ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฒฝ์šฐ๋ฅผ Result ์—ด๊ฑฐํ˜•์„ ์ด์šฉํ•˜์—ฌ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์‘๋‹ต ์ž์ฒด๊ฐ€ ์„ฑ๊ณตํ•˜๋”๋ผ๋„, ์š”์ฒญ ์„ฑ๊ณต, ์‹คํŒจ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์„ ๋‚ด๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๊ฐ’์„ ์ œ๋„ค๋ฆญํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” Reponse enum์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

TODO

RequestResult

  • Result
  • Response

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

keychain service

Description

DataLayer์—์„œ ์œ ์ €์˜ Password, Certificate, Token ๋“ฑ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ Keychain์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ ๊ฐœ๋ฐœ์ž ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Keychain์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. Keychain Item Class๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•จ
  2. ํŠน์ • Keychain ํ•ญ๋ชฉ์˜ CRUD ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•จ

TODO

  • KeychainItemClass DI
  • Keychain CRUD

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

network service decoding test

Description

๊ฐœ์š”

  • ์ด์ „ PR์—์„œ ์ˆ˜์ •ํ•œ performRequest ๋กœ์ง์œผ๋กœ ์ธํ•ด ๋””์ฝ”๋”ฉ์ด ์‹คํŒจํžˆ๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ์ด์Šˆ์—์„œ ํ•ด๋‹น ๋ผ์ธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. NetworkService.Error์™€ Decoding Error๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ถ„๋ฆฌํ•œ ํ…Œ์ŠคํŠธ ๋ฉ”์†Œ๋“œ์—์„œ DecodingError.keyNotFound ์ผ€์ด์Šค๋ฅผ ํ…Œ์ŠคํŠธ ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์‹คํŒจ ์‘๋‹ต์—์„œ CodingKey์™€ Context ์ •์˜ํ•˜์—ฌ DecodingError๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

TODO

  • divide requestNetworkServiceError
  • implement requestDecodingError
  • create decodingError

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #35

final class

Description

  • ์˜ค๋ฒ„๋ผ์ด๋“œ ๋˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ final ํ‚ค์›Œ๋“œ๋ฅผ ๋ช…์‹œํ•˜์—ฌ ์ƒ์†์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด indirect acces/calls์„ ๋ง‰์•„ dynamic dispatch๋กœ ์ธํ•ด vtable์„ ์ฐธ์กฐํ•˜๋Š” overhead๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Refs: https://developer.apple.com/swift/blog/?id=27

TODO

  • ์ƒ์†์ด ํ•„์š”์—†๋Š” JWTInterceptor, NetworkServiceTests, MockURLProtocol ํด๋ž˜์Šค๋ฅผ final๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #34 #38

status code

Description

์‘๋‹ต์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ, body์— ํฌํ•จ๋œ payload ์™ธ์—๋„ statusCode๋ฅผ ์ด์šฉํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ์ •์˜๋œ Response, RequestResult ํƒ€์ž…์˜ ์ด๋ฆ„์„ ๊ฐ๊ฐ Body, ResponseResult๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‹œ๋ฉ˜ํ‹ฑํ•œ ๋„ค์ด๋ฐ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  2. Response์˜ success ์ผ€์ด์Šค์— statusCode ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์—ฌ body๊ฐ’๊ณผ ํ•จ๊ป˜ ๋ฌถ์–ด Response ํŠœํ”Œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

TODO

  • Response -> Body, RequestResult -> ResponseResult
  • Response(statusCode, body) tuple

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #8

jwt interceptor

Description

๊ฐœ์š”

  • API ํ†ต์‹  ์‹œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์œ„ํ•ด Authorization header๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ๊ฒฝ์šฐ 401 ์—๋Ÿฌ์‹œ refreshToken์„ ์ด์šฉํ•ด ํ† ํฐ์„ ๋ฆฌํ”„๋ ˆ์‹œ ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ๊ธฐ๋Šฅ๋“ค์„ Alamofire์—์„œ ์ง€์›ํ•˜๋Š” RequsetInterceptor ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. Keychain ์ €์žฅ์†Œ์—์„œ jwt ํ† ํฐ์„ ๊ฐ€์ง€๊ณ  Authorization header์— ๊ฐ’์„ ๋„ฃ์„ RequestAdapter๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. RefreshToken ์š”์ฒญ์ด ๊ตฌํ˜„๋œ Routable ๋ผ์šฐํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฒฝ์šฐ์— ๋”ฐ๋ผ Refresh ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  RequestRetrier๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

TODO

  • JWT Authorization header Adapter
  • JWT Refresh Token Retrier

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #11 #29

anyobject

Description

Swift ๊นƒํ—ˆ๋ธŒ ๋ฌธ์„œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ ์ค‘์— ํ•ด๋‹น ๋‹จ๋ฝ ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ํด๋ž˜์Šค๋งŒ ์ฑ„ํƒํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•ด AnyObject๋กœ ์ œํ•œ

TODO

  • AnyObject

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

keychain service test

Description

KeychainService ํด๋ž˜์Šค์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ Keychain ํด๋ž˜์Šค init์‹œ kSecAttrService ์˜์—ญ์˜ Keychain ๋ฐ์ดํ„ฐ๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  2. KeychainService ํด๋ž˜์Šค์˜ CRUD์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  3. notFound, unexpectedData, duplicateItem, unhandledError ๊ฐ ์—๋Ÿฌ์— ๋Œ€ํ•ด ์‹คํŒจ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

TODO

  • Keychain convenience init
  • Keychain CRUD test
  • Keychain Error test

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #15 #24

keychain service

Description

Keychain Item Class์˜ ์ดํ•ด ๋ถ€์กฑ์œผ๋กœ #15 ์—์„œ kSecClassGenericPassword ์™ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์—ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

kSecClassGenericPassword์™ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์žฌํ•˜์—ฌ ํ˜„์žฌ ๊ตฌ์กฐ๋ฅผ kSecClassGenericPassword ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ

๋งˆ์น˜ UserDefaults์ฒ˜๋Ÿผ kSecAttrAccount-kSecValueData์˜ key-value ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋„๋ก ๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. Keychain initializer์— Item Class ์„ ํƒ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด service๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•จ
  2. KeychainService์˜ CRUD ์ˆ˜์ •

TODO

  • Keychain initializer
  • Keychain CRUD

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #15

user defaults service

Description

Keychain์—์„œ ์ €์žฅํ•˜๋Š” ์ •๋ณด ์™ธ์˜ ์•Œ๋žŒ ์„ค์ •๊ฐ™์€ ๊ฐ„๋‹จํ•œ ํ‚ค-๊ฐ’ ์Œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ UserDefaults๋ฅผ ํ†ตํ•ด ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ

  1. ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ํด๋ž˜์Šค ํ˜น์€ ๋ ˆํ•‘ ํด๋ž˜์Šค์˜ ์ดˆ๊ธฐํ™” ์‹œ์— suiteName์„ ์ฃผ์ž… ๋ฐ›์•„์•ผ ํ•จ.
  2. Keychain๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ CRUD ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ ธ์•ผํ•จ

TODO

  • UserDefaultsService initializer with suiteName
  • CRUD

Environment

macOS: Monterey 12.5.1, Apple M1
iOS: 15.5, iPhone 13 mini
IDE: Xcode 13.4.1

Related: #

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.