[iOS] ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ†บ์•„๋ณด๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—(0)

2022. 11. 4. 00:51ยท๐ŸŽ iOS & Swift
๋ชฉ์ฐจ
  1. ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ ์ •๋ง ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)์ด ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์š”์ฆ˜ ๋” ๊ฐ•ํ•˜๊ฒŒ ๋А๋‚€๋‹ค.
  2. Builder ํŒจํ„ด์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด๋ฅผ ์ถ”์ƒํ™” ํ•ด๋ด„
  3. ์‚ฌ์šฉ ์˜ˆ์‹œ
  4. ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€

์š”์ฆ˜ ๊ณต๋ถ€์˜ ์–ด๋А ์ •๋„ ์‹œ๊ฐ„์€ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋ถ€๋ถ„์— ๋Œ€ํ•œ ํ•™์Šต, ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด ์ถ”์ƒํ™”์— ๋Œ€ํ•œ ๊ฒƒ์„ ์—ฐ๊ตฌํ•ด๋ณด๊ณ  ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‚˜๋งŒ์˜ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ํƒ ๊ธฐ์ค€๋„ ๊ณ ๋ฏผํ•ด๋ณด๋Š” ์ค‘

๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ ์ •๋ง ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)์ด ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์š”์ฆ˜ ๋” ๊ฐ•ํ•˜๊ฒŒ ๋А๋‚€๋‹ค.

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

์š”์ฒญ์„œ์— ํ•„์š”ํ•œ ์ •๋ณด๋Š” ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • URL(Path, Query ...) (ํ•„์ˆ˜)
  • HTTPMethod (ํ•„์ˆ˜)
  • HTTPHeader (๋ฐ˜ ํ•„์ˆ˜)
  • HTTPParameter (์„ ํƒ)
  • ๊ธฐํƒ€ ์ •๋ณด .. (timeout, caching policy, network connection ...)

๋‹ค์Œ์˜ ์ •๋ณด๋ฅผ ์ž˜ ์กฐํ•ฉ์‹œ์ผœ์„œ ์š”์ฒญ์„œ(์š”์ฒญ์ •๋ณด == URLRequest)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์— ์žˆ์–ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ž‘์—… ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹๊นŒ ์‹ถ๋‹ค. ์ด๊ฒƒ๋งŒ ์ž˜ ์ดํ•ดํ•œ๋‹ค๋ฉด ํ†ต์‹ ์€ 80~90% ๋์ด๋ผ๊ณ  ๋ณธ๋‹ค. (์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์–ด์ฉ” ์ˆ˜ ์—†๋‹ค. .)

Builder ํŒจํ„ด์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด๋ฅผ ์ถ”์ƒํ™” ํ•ด๋ด„

  • https://github.com/hmlongco/RequestBuilder
  • ์œ„์˜ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ Rx ํ˜•ํƒœ๋กœ ๋ณ€ํ™”์‹œ์ผœ๋ณด๋ ค๊ณ  ํ•จ.
  • BaseSessionManager.swift ํŒŒ์ผ ๋ถ€๋ถ„์—์„œ nil ๊ฐ’์ด ์ƒ๊ฒจ์„œ ์ •์ƒ์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ–ˆ์Œ
    • LLDB๋กœ ์ด์Šˆ๋ฅผ ์กฐ๊ธˆ ๋น ๋ฅธ ์†๋„๋กœ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์—ˆ์Œ. (print ์ฐ์—ˆ์œผ๋ฉด ๋‚  ๋ฐค ์ƒœ์„ ๋“ฏ)
  • Builder ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด SwiftUI ์ฒ˜๋Ÿผ ์„ ์–ธํ˜•์œผ๋กœ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๊ตฌ์„ฑํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ.
    • Request์— ํ•„์š”ํ•œ ๋‚ด์šฉ๋“ค์ด ์–ด๋А ์ •๋„ ์ •ํ•ด์ ธ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ํŒจํ„ด์œผ๋กœ ๊ตฌ์„ฑํ•˜๋ฉด ์ ์ ˆํ•˜๊ฒŒ ์ž˜ ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ณต๋ถ€ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ์Œ.
    • ์ง€๊ธˆ์€ ์•„์ง ์™„๋ฒฝํžˆ ๊ตฌํ˜„์€ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ ์• ๋งคํ•œ๋ฐ, ํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ ๋‚จ๊ธฐ๋ฉด ๊ดœ์ฐฎ๊ฒŒ ์ด์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Œ.
    • Alamofire, Moya ์ •๋ง ์ข‹์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ธ๋ฐ, ์ง€๊ธˆ ๋“œ๋Š” ์ƒ๊ฐ์€ ์ƒ๊ฐ๋ณด๋‹ค ์ •๋ง ์ผ๋ถ€ ๊ธฐ๋Šฅ๋งŒ ์“ฐ๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Œ. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‚ญ๋น„๋˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค๊ณ  ๋ด„. (1) ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„์ด ์–ด๋А ์ •๋„ ํ™•๋ณด๋˜์–ด์žˆ๊ฑฐ๋‚˜ (2) ํ˜ผ์ž ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ํ•œ๋‹ค๋ฉด URLSession์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์ถ”์ƒํ™”ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๋‚˜์˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•จ. ๋ฌผ๋ก  ์ˆ™๋ จ๋„๊ฐ€ ์–ด๋А ์ •๋„ ์žˆ๊ฑฐ๋‚˜ ํ•œ๋‹ค๋ฉด Alamofire, Moya๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ๋Š” ์ข‹์•„๋ณด์ž„.

์‚ฌ์šฉ ์˜ˆ์‹œ

์ง€๊ธˆ์€ data ๋ฉ”์„œ๋“œ์˜ return ํƒ€์ž…์ด RxSwift์˜ Single Traits์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ์˜ˆ์‹œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์Œ. Combine๊ณผ๋„ ์„ž์–ด๋ณผ ์ˆ˜ ์žˆ๊ณ  ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Œ

let base = URL(string: SeSACAPI.baseURL)
let sessionManager = BaseSessionManager(base: base, session: URLSession.shared)

sessionManager.request()
    .add(path: SeSACAPI.profile.path)
    .add(headers: SeSACAPI.profile.headers)
    .method(.get)
    .data(type: UserResponse.self, decoder: JSONDecoder())
    .subscribe { response in
        print(response)
        print("๐ŸŽŠ :: ํ”„๋กœํ•„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์„ฑ๊ณต :: \(response.user)")
    } onFailure: { error in
        print("๐Ÿ˜ฟ :: ํ”„๋กœํ•„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์‹คํŒจ :: \(error.localizedDescription)")
    }.disposed(by: disposeBag)

์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€

์ข€๋งŒ ๋” ์ •๋ฆฌ๋˜๋ฉด ๊ธฐ์กด์— ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธ€์ฒ˜๋Ÿผ ๋‹จ์ˆœํžˆ ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์•„๋‹Œ ๋‚ด๊ฐ€ ์ดํ•ดํ•œ๋Œ€๋กœ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ๋ช‡ ํŽธ(๋ฏธ์ •)์˜ ๊ธ€๋กœ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. (ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€ ...? ^^)

 

์•„์šฐ.. ๊ทผ๋ฐ ๊ธ€ ์ด์ œ ์–ด๋–ป๊ฒŒ ์จ์•ผํ• ์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ๋„ค.. ์ผ๋‹จ ์ ๊ณ ๋ณด์ž..!! ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฉ”๋ชจํ•  ์ˆ˜ ์žˆ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ํŒŒ์•ผ๊ฒ ๋‹ค.

'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS] ๋ฐ˜๋‚˜์ ˆ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ 91% ๊ฐ์†Œ์‹œํ‚ค๊ธฐ  (2) 2023.09.07
[Swift] Stored Property vs Computed Property vs Method  (2) 2022.11.04
[RxSwift] Disposable๊ณผ DisposeBag  (0) 2022.10.26
[LLDB ๊ด€๋ จ ๋นŒ๋“œ ๋ฌธ์ œ] warning: libobjc.A.dylib is being read from process memory. This indicates that LLDB could not find the on-disk shared cache for this device. This will likely reduce debugging performance.  (1) 2022.10.12
[iOS] Date compare(_:) ๋ฉ”์„œ๋“œ  (0) 2022.10.12
  1. ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ ์ •๋ง ์š”์ฒญ(Request)๊ณผ ์‘๋‹ต(Response)์ด ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์š”์ฆ˜ ๋” ๊ฐ•ํ•˜๊ฒŒ ๋А๋‚€๋‹ค.
  2. Builder ํŒจํ„ด์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋ ˆ์ด์–ด๋ฅผ ์ถ”์ƒํ™” ํ•ด๋ด„
  3. ์‚ฌ์šฉ ์˜ˆ์‹œ
  4. ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€
'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [iOS] ๋ฐ˜๋‚˜์ ˆ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ 91% ๊ฐ์†Œ์‹œํ‚ค๊ธฐ
  • [Swift] Stored Property vs Computed Property vs Method
  • [RxSwift] Disposable๊ณผ DisposeBag
  • [LLDB ๊ด€๋ จ ๋นŒ๋“œ ๋ฌธ์ œ] warning: libobjc.A.dylib is being read from process memory. This indicates that LLDB could not find the on-disk shared cache for this device. This will likely reduce debugging performance.
taeeekki
taeeekki
๐ŸŒฑiOS ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ํ•™์ƒ์ด ๋งŒ๋“œ๋Š” ๋ธ”๋กœ๊ทธ
taeeekki
taekki.dev
taeeekki
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • All (130)
    • ๐ŸŒฑ SeSAC (40)
    • โ˜€๏ธ 100DaysOfSwift (18)
    • ๐ŸŽ iOS & Swift (60)
    • ๐Ÿ“ฉ Essay (3)
    • ๐ŸŽ Tip (4)
    • ๐ŸŒˆ UIUX (2)
    • ๐Ÿง OOP (1)
    • ๐Ÿฅณ Side Project (0)
    • โœจ Problem Solving (1)
    • ๐Ÿ“ Note (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

iOS H.I.G
๊ฐœ๋ฐœ
tableView
PageViewController
github
์†ํŠธ
GIT
ํด๋กœ์ €
Diary App
TIL
OOTD
iOS UIUX
์Šค์œ„ํ”„ํŠธ
๊ฐœ์ธ ์•ฑ ์ถœ์‹œ
์˜ต์…”๋„
๊นƒํ—ˆ๋ธŒ
github tip
์˜ค์˜คํˆฌ๋‘
URLSession
SeSAC
CollectionView
100DaysOfSwift
์Šค์œ„ํ”„ํŠธ ๋ฌธ๋ฒ•
commit
iOS ์•ฑ ์ถœ์‹œ
network
Realm
swift
์Šค์œ„ํ”„ํŠธ๋ฌธ๋ฒ•
IOS

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLOยท Designed By์ •์ƒ์šฐ.v4.5.3
taeeekki
[iOS] ๋„คํŠธ์›Œํฌ ํ†ต์‹  ํ†บ์•„๋ณด๊ธฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—(0)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.