Notice
Recent Posts
Recent Comments
Link
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

Alamofire ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ( + CocoaPods ๊ฐœ๋…) ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ• ๋ณธ๋ฌธ

โš ๏ธ deprecated โš ๏ธ/๊ผผ๊ผผํ•œ ์žฌ์€์”จ(์‹ค์ „)

Alamofire ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ( + CocoaPods ๊ฐœ๋…) ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2021. 4. 23. 11:38

Alamofire๋Š” HTTP ๋„คํŠธ์›Œํ‚น์„ ์œ„ํ•ด ์Šค์œ„ํ”„ํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋œ ๋น„๋™๊ธฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, URLRequest + URLSession ๊ฐ์ฒด๋ฅผ ๋ž˜ํ•‘ํ•œ ๊ฐ„๊ฒฐํ•œ ๊ตฌ์„ฑ ๋•๋ถ„์— ๋ชจ๋ฐ”์ผ ์„œ๋ฒ„์™€ HTTPํ†ต์‹ ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ API ํ˜ธ์ถœ ์—ญ์‹œ Alamofire๋ฅผ ์ด์šฉํ•˜๋ฉด ๋” ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์žฅ์ ์€ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ์š”์ฒญ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

์„œ๋ฒ„์˜ ์‘๋‹ต ์ปจํ…์ธ  ํƒ€์ž…์— ๋งž์ถ”์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ ์ œ๊ณต

์˜ˆ๋ฅผ๋“ค๋ฉด JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์ „์šฉ ๋ฉ”์†Œ๋“œ๋ผ๋˜๊ฐ€, ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์ „์šฉ ๋ฉ”์†Œ๋“œ, ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ๋‚ด๋ ค๋ฐ›๊ธฐ ์œ„ํ•œ ๋‹ค์šด๋กœ๋“œ ๋ฉ”์†Œ๋“œ ๋“ฑ

ํŠนํžˆ JSON ์ „์šฉ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒฐ๊ณผ๊ฐ’์„ ์†์‰ฝ๊ฒŒ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ ๋‹ค์šด๋กœ๋“œ ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ๋‹ค์šด๋กœ๋“œ ์ง„ํ–‰ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์šด๋กœ๋“œ ๊ณผ์ •์„ ์ค‘๊ณ„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

์‚ฌ์šฉ๋ฒ•

1. Xcode ๋ฉ”๋‰ด์—์„œ [Source Control] --> [Clone] ์„ ํƒ

2. https://github.com/Alamofire/Alamofire.git ์ž…๋ ฅํ•˜์—ฌ ๋‚ด๋ ค๋ฐ›๊ธฐ

3. ์ €์žฅ์œ„์น˜๋ฅผ ์„ ํƒํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑ

--> ์ด๋•Œ ์ €์žฅ์œ„์น˜๋Š” ์•ฑ ํ”„๋กœ์ ํŠธ์˜ ํ•˜์œ„๋กœ ์žก์•„์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์€๋ฐ ์™œ๋ƒํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ์„ ์ง์ ‘ ๋ณต์‚ฌํ•ด๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํƒ€๊นƒ ์˜์กด์„ฑ ์„ค์ •์„ ํ†ตํ•ด ์•ฑ ์ปดํŒŒ์ผ ์‹œ ์ž๋™์œผ๋กœ Alamofire๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜๊ฒŒ ํ•  ์˜ˆ์ •์ด๋ผ ์ด ์—ฐ๊ฒฐ์€ ๋™์ ์ด์–ด์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์˜ฎ๊ฒจ์ ธ์„œ๋Š” ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ** ์ด๋ฅผ Alamofire ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์„œ๋ธŒ ๋ชจ๋“ˆ๋กœ ์„ค์น˜ํ•œ๋‹ค ๋ผ๊ณ  ํ‘œํ•œํ•œ๋‹ค.

ex)

   appFolder

        - Alamofire

        - my-app

        - my-app.xcodeproj

4. ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•˜๊ณ  ํƒ€๊นƒ ์˜์กด์„ฑ์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ƒ์„ฑ๋œ Alamofire ํ”„๋กœ์ ํŠธ๋ฅผ ํƒ์ƒ‰๊ธฐ๋กœ ์—ด๊ณ , Alamofire.xcodeproj ํŒŒ์ผ์„ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ๋“œ๋ž˜๊ทธ ํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ๋‹ค.

5. ํƒ€๊นƒ์˜์กด์„ฑ ์„ค์ •์„ ์œ„ํ•ด

 5-1) Xcode ๋„ค๋น„๊ฒŒ์ดํ„ฐ์—์„œ ๋‚ด๊ฐ€ ์ง„ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒ

 5-2) ์ค‘์•™์˜ ํŽธ์ง‘์ฐฝ ์ขŒ์ธก ํŒจ๋„์—์„œ TARGETS ์˜์—ญ์˜ ํŒŒ์ผ์„ ์„ ํƒ

 5-3) Builds Phases๋ฅผ ์„ ํƒ

 5-4) Dependencies ํ•ญ๋ชฉ์˜ ๋‚ด๋ถ€์—์„œ [+]๋ฅผ ํด๋ฆญํ•˜์—ฌ ๋‚ด๊ฐ€ ๋งŒ๋“œ๋Š” ๊ฒƒ์˜ ํŠน์„ฑ์— ๋งž๊ฒŒ (ios,macos ๋“ฑ) ์„ ํƒํ•˜์—ฌ ์ถ”๊ฐ€

6. ์ดํ›„์— viewController.swift ์— import Alamofire ์ž‘์„ฑ ํ›„ ์ปค๋งจํ‹ฐ+b ๋ฅผ ํ†ตํ•˜์—ฌ ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฃจ์–ด ์ง€๋Š”์ง€ ํ™•์ธ.

 

 

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ CocoaPods์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ  ๊ฐ€์ž

CocoaPods์ด๋ž€? ์ฝ”์ฝ”์•„ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์˜์กด์„ฑ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์œ ํ‹ธ!

๊ณผ๊ฑฐ์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์™ธ๋ถ€๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ ๊ด€๋ฆฌ๋Š” ์ˆœ์ „ํžˆ ๊ฐœ๋ฐœ์ž์˜ ์„ฑ์‹ค์„ฑ์— ๋‹ฌ๋ ค ์žˆ์—ˆ๋‹ค. ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์—…๋Žƒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊พธ์ค€ํžˆ ๊ด€์‹ฌ์„ ๊ฐ–๊ณ  ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์•ผ ํ–ˆ๋‹ค. ๊ฐ„ํ˜น ์†Œํ™€ํ•  ๊ฒฝ์šฐ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค.

 

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

 

๋Œ€ํ‘œ์ ์ธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ๋„๊ตฌ๋Š” CentOS ๊ณ„์—ด์˜ ๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” yum, Fedora ๊ณ„์—ด์˜ ๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” apt-get, ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” pip, ๋ฃจ๋น„ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” gem, node.js ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” npm, ์ž๋ฐ”์˜ MAVEN ๋“ฑ์ด ์žˆ๋‹ค. ์ด๋“ค์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคํ™”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชฉ๋ก์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด์ค‘์—์„œ ์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๊ฐ„ํŽธํ•˜๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์• ํ”Œ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ๋Š” ์ฝ”์ฝ”์•„ํŒŸ์„ ์ œ์™ธํ•˜๊ณ  2๊ฐœ๊ฐ€ ๋” ์žˆ๋Š”๋ฐ,

Carthage์™€ ์Šค์œ„ํ”„ํŠธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž (Swift Package Manager , SPM) ์ด๋‹ค.

 

์ฝ”์ฝ”์•„ํŒŸ์€ ๋ฃจ๋น„ ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ํŒจํ‚ค์ง€ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ์„œ, ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ Pod์ด๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ๋‹ค๋ฃฌ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”์ฝ”์•„ํŒŸ์ด๋ผ๋Š” ์ด๋ฆ„์€ ์ฝ”์ฝ”์•„ ๊ฐœ๋ฐœํ™˜๊ฒฝ + ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

 

์ž ๊ทธ๋Ÿผ CocoaPod์„ ์ด์šฉํ•˜์—ฌ ์„ค์น˜ํ•ด๋ณผ๊นŒ? ์šฐ์„  ์•ž์„  ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด Alamofire.xcodeproj ์„ MoveTrash๋กœ ์‚ญ์ œํ•˜๊ณ  ํด๋”๋ฅผ ์—ด์–ด์„œ Alamofire๋ฅผ ์ง€์šด๋‹ค์Œ์— ์‹คํ–‰ํ•ด๋ณด์ž

 

์„ค์น˜์ˆœ์„œ

1. ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์„œ sudo gem install cocoapods 

sude : root ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•˜๋ผ

gem : ๋ฃจ๋น„ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋ผ

install cocoapods : ์ฝ”์ฝ”์•„ํŒŸ์„ ์„ค์น˜ํ•˜๋ผ๋Š” ์˜ต์…˜ gem์€ macOS์— ๊ธฐ๋ณธ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ ๊ณผ์ • ์—†์ด ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

** ๊ฐ„ํ˜น ๋งฅ์„ ์ฒ˜์Œ ์„ค์น˜ํ•ด์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฃจํŠธ ํŒจ์Šค์›Œ๋“œ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฃจํŠธ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ณผ์ •์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

2. ๋‹ค์Œ์€ Alamofire ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ

 2-1) ์šฐ์„  ํ„ฐ๋ฏธ๋„์—์„œ cd ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‚ด ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™ํ•œ๋‹ค.

 2-2) ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™ํ–ˆ์œผ๋ฉด pod init ์„ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•œ๋‹ค.

 2-3) vi Podfile ๋กœ ํŽธ์ง‘๊ธฐ ์—ด๊ณ 

 2-4) ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

์‚ฌ์ดํŠธ์—์„œ README ํŒŒ์ผ์˜ ๋ฒ„์ „์„ ์ฐธ์กฐํ•ด์•ผํ•œ๋‹ค.

2-5) pod install ์ž…๋ ฅํ•œ๋‹ค.

    ** ๋งŒ์•ฝ ์„ค์น˜์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์ฝ”์ฝ”์•„ํŒŸ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ pod repo update ํ†ตํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

2-6) ์„ค์น˜ ๊ณผ์ •์ด ๋๋‚˜๋ฉด *.xcworkspace ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ Pods ํด๋” ๊ทธ๋ฆฌ๊ณ  Podfile ๊ด€๋ จ ํŒŒ์ผ๋“ค์ด ์ถ”๊ฐ€๋˜์–ด์žˆ๋‹ค.

3. *.xcworkspace ์—ด์–ด์„œ ์ž‘์—…ํ•œ๋‹ค.

์ฃผ์˜ํ•  ์  : ์ฝ”์ฝ”์•„ํŒŸ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ Xcode์˜ ์‹คํ–‰ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋œ๋‹ค. *.xcodeproj ๋Œ€์‹ ์— *.xcworkspace ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ์กด์˜ xcodeproj ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด์„œ ๋นŒ๋“œ์‹œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. 

 

 

 

์ž ๊ทธ๋Ÿผ ๊ธฐ๋ณธ ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

 

Request

import Alamofire // import ๋จผ์ € ํ•˜๊ธฐ

Alamofire.request("ํ˜ธ์ถœ URL") // HTTP์˜ ๊ธฐ๋ณธ๊ฐ’์€ GET ๋ฐฉ์‹

Alamofire.request("ํ˜ธ์ถœ URL", method: .post) // POST ๋ฐฉ์‹์œผ๋กœ ์ „์†กํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ธ์ž๊ฐ’ ์ถ”๊ฐ€

/*
 ์ „๋‹ฌํ•ด์•ผ ํ•  ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์ธ parameters๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. 
 ์ด ๋ณ€์ˆ˜๋Š” ํ‚ค-๊ฐ’ ํ˜•์‹์˜ ํƒ€์ž…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.
*/
let param : Parameters = [
	"userId" : "lgvv",
    "name" : "์ด๊ฑด์šฐ"
]

/*
 ์ „๋‹ฌํ•˜๋Š” ๊ฐ’์— ํŠน์ˆ˜๋ฌธ์ž๋‚˜ ํ•œ๊ธ€ ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ
 ์„œ๋ฒ„์—์„œ ์ž˜๋ชป ๋ฐ›์•„๋“ค์ด์ง€ ์•Š๋„๋ก ์ธ์ฝ”๋”ฉ ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•˜๋Š”๋ฐ,
 ์ด๋–„ request ๋ฉ”์†Œ๋“œ์˜ ๋„ค ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ encoding์ด ์‚ฌ์šฉ๋œ๋‹ค.
*/
Alamofire.request("ํ˜ธ์ถœ URL", method: .post, parameters : param, encoding : URLEncodeing.httpbody)

/*
 ๋งค๊ฐœ๋ณ€์ˆ˜ encoding์€ ํ”„๋กœํ† ์ฝœ์ธ ParameterEncoding ํƒ€์ž…์œผ๋กœ, 
 ์ด ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•œ ์—ด๊ฑฐํ˜•์ด๋‚˜ ๊ตฌ์กฐ์ฒด ๋˜๋Š” ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ธ์ž๊ฐ’์œผ๋กœ ์ž…๋ ฅ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
 ๋Œ€ํ‘œ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด URLEncoding ๊ตฌ์กฐ์ฒด๋กœ, ์ด ๊ตฌ์กฐ์ฒด์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ๊ฐ€์ง€ ์ธ์ฝ”๋”ฉ ํƒ€์ž…์˜ 
 ์ •์  ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.
 
 .methodDependent : ๋ฉ”์†Œ๋“œ์— ๋”ฐ๋ผ ์ธ์ฝ”๋”ฉ ํƒ€์ž…์ด ์ž๋™์œผ๋กœ ๊ฒฐ์ •๋จ.
 ๊ฐ€๋ น GET๋ฐฉ์‹์ด๋ฉด .queryString
 POST ๋ฐฉ์‹์ด๋ฉด .httpbody๊ฐ€ ์ ์šฉ๋œ๋‹ค.
 
 .queryString : GET ์ „์†ก์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ๋‹ค.
 
 .httpbody : POST ์ „์†ก์—์„œ ์‚ฌ์šฉ๋˜๋Š” HTTP body ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ๋‹ค.
 
 ๋งŒ์•ฝ .httpbody ํƒ€์ž…์„ ์ ์šฉํ•˜๋ฉด Content-Type ํ—ค๋”์—๋Š” ์ž๋™์œผ๋กœ 
 'application/x-www-form-urlencoded;charset=utf-8' ์ด ์ ์šฉ๋œ๋‹ค
*/
 JSON ๋ฐฉ์‹์œผ๋กœ ๊ฐ’์„ ์ „์†กํ•  ๋•Œ์—๋Š” ์ธ์ฝ”๋”ฉ ํƒ€์ž…์œผ๋กœ URLEncoding ๋Œ€์‹  JSONEncoding์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 
(์˜ˆ์‹œ๊ตฌ๋ฌธ)
let param : Parameters = [
	"userId" : "lgvv",
    "name" : "์ด๊ฑด์šฐ"
]
Alamofire.request("ํ˜ธ์ถœ URL", method: .post, parameters : param, encoding : JSONEncoding.default)

//Content-Type ํ—ค๋”์— 'application/json' ๊ฐ’์ด ์ž๋™์œผ๋กœ ์„ค์ •๋œ๋‹ค.
//Content-Length ํ—ค๋” ์—ญ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ธ์ž๊ฐ’๊ณผ ์ธ์ฝ”๋”ฉ ์„ค์ •์„ ์ฐธ๊ณ ํ•˜์—ฌ Alamofire ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.

//HTTP ๋ฉ”์‹œ์ง€์— ๋ณ„๋„์˜ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ headers ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
//์ด๊ฒƒ๋„ ์—ญ์‹œ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•์‹์„ ๋”ฐ๋ฅธ๋‹ค.
(์˜ˆ์‹œ๊ตฌ๋ฌธ)
let headers: HTTPHeaders = [
	"Authorization" : "Basic QWxhZGRpbjpvcGVuIHNc2FtZQ==",
    "Accept" : "application/json"   
]
Alamofire.request("ํ˜ธ์ถœ URL", method: .post, parameters : param, encoding : JSONEncoding.default, headers : headers)




 

 

Response  Alamofire๋Š” ์„œ๋ฒ„์˜ ์‘๋‹ต ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‘๋‹ต ์ฒ˜๋ฆฌ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
response() ์‘๋‹ต ๋ฉ”์‹œ์ง€์— ํŠน๋ณ„ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์Œ.
๊ธฐ๋ณธ ํ˜•ํƒœ์ด์ง€๋งŒ URLSession ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ„๋ฐ˜ ์ฐจ์ด๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.
responseString() ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌํ•œ ํ›„ ์ „๋‹ฌ
responseJSON() ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ JSON ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „๋‹ฌ
responseData() ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „๋‹ฌ

 

Alamofire๋Š” ๋น„๋™๊ธฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋„คํŠธ์›Œํฌ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ response ๋ฉ”์†Œ๋“œ์˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋ฐ›์„ ์ˆ˜ ์—†๋‹ค. ๊ทธ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์ด ๋„์ฐฉํ–ˆ์„ ๋•Œ ์‹คํ–‰ํ•  ๋กœ์ง์„ ํด๋กœ์ €๋กœ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•˜์—ฌ ์œ„ ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๊ฐ’์œผ๋กœ ๋„ฃ์–ด ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ผ์ข…์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋‹ค.

Alamofire๋Š” ์„œ๋ฒ„์—์„œ ์‘๋‹ต์ด ๋„์ฐฉํ•˜๋ฉด ์ด๋ฅผ DataResponse ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ, ์ด๋ฅผ ํด๋กœ์ €์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋‹ด์•„ ํ˜ธ์ถœํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ’์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

//Response ์˜ˆ์‹œ์ฝ”๋“œ

// GET ๋ฐฉ์‹
let url = "http://~~"
AF.request(url).responseString() { response in
	// response์— ์žˆ๋Š”๊ฑด api์˜ ์„ธ๋ถ€ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด ๋ด์•ผ ํ•œ๋‹ค.
	print("\(reponse.result.isSuccess)")
   	print("\(reponse.result.value!)")
}

// POST ๋ฐฉ์‹

let url = "http://~~"

let param : Parameters = [
	"userId" : "lgvv",
    "name" : "gw"
]

let alamo = AF.request(url, method: .post, parameters : param, encoding : URLEncoding.httpBody)

alamo.responseJSON() { response in
	// response์— ์žˆ๋Š”๊ฑด api์˜ ์„ธ๋ถ€ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•ด ๋ด์•ผ ํ•œ๋‹ค.
	print("JSON = \(try! reponse.result.get())")
   	if let jsonObject = try! response.result.get() as? [String:Any] {
    	print("uesrId = \(jsonObject["uesrId"]!)")
        print("name = \(jsonObject["name"]!)")
}

// ์‹คํ–‰๊ฒฐ๊ณผ
JSON = {
	name = "\Uc7ac\Uc740\Uc528";
    result = SUCCESS;
    timestamp = "2020-04-23 12:41:22";
    userId = lgvv;
}
userId = lgvv
name = gw

/*
 echo API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์–ป์€ ๊ฒฐ๊ณผ
*/

 

Comments