์ƒˆ์†Œ์‹

๐Ÿ“ฑ iOS/-- UIKit

(iOS) ๋„คํŠธ์›Œํฌ ํ†ต์‹  , RESTful API , SOAP , JSON , XML

  • -

๋„คํŠธ์›Œํฌ ํ†ต์‹ ๊ณผ API

 

๋„คํŠธ์›Œํฌ ํ†ต์‹ ์˜ ์ข…๋ฅ˜

  • ์†Œ์ผ“๋ฐฉ์‹์˜ ์—ฐ๊ฒฐ์„ฑ ํ†ต์‹  : TCP/UDP
  • ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•œ ๋น„์—ฐ๊ฒฐ์„ฑ ํ†ต์‹  : HTTP, HTTPS, SMTP

 

์†Œ์ผ“ ๋ฐฉ์‹์˜ ์—ฐ๊ฒฐ ์ง€ํ–ฅ ํ†ต์‹ 

์†Œ์ผ“์„ ์ด์šฉํ•œ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์€ ๋ณดํ†ต ์ €์ˆ˜์ค€(Low-level) ํ†ต์‹ ์„ ํ†ตํ•˜์—ฌ ๊ตฌํ˜„๋œ๋‹ค. ์†Œ์ผ“์€ ์ „๊ตฌ๊ฐ€ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฐœ๋…์„ ๋”ฐ์˜จ๊ฒƒ์ด๋‹ค. ์•ฑ๊ณผ ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด ํ•œ์ชฝ์—์„œ ์—ฐ๊ฒฐ์„ ๋Š๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ณ„์† ์—ฐ๊ฒฐ์ด ์œ ์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๊ฒฐ ์ง€ํ–ฅ ํ†ต์‹ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

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

TCP๋Š” ์†๋„๋Š” ๋Š๋ฆฌ์ง€๋งŒ, ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์™„์ „ํ•œ ์ „์†ก์„ ๋ณด์žฅํ•œ๋‹ค.

UDP๋Š” ์†๋„๋Š” ๋น ๋ฅด์ง€๋งŒ, ๋ฐ์ดํ„ฐ์˜ ์™„์ „ํ•œ ์ „์†ก์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

๋น„์—ฐ๊ฒฐ ์ง€ํ–ฅ ํ†ต์‹ 

๋น„์—ฐ๊ฒฐ์„ฑ ํ†ต์‹ ์€ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ HTTP/HTTPS ํ”„๋กœํ† ์ฝœ์ด ์žˆ์œผ๋ฉฐ, ์›น ์„œ๋น„์Šค์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์†Œ์ผ“ ํ†ต์‹ ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์‘๋‹ต์„ ๋ณด๋‚ธํ›„ ๋ฐ”๋กœ ์—ฐ๊ฒฐ์„ ๋Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋น„์—ฐ๊ฒฐ์„ฑ ์ด๋ผ๊ณ  ํ•ด์„œ ์—ฐ๊ฒฐ์ด ์•„์˜ˆ ์—†๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์™„๋ฃŒํ•œ ํ›„์— ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š์„ ๋ฟ์ด๋‹ค.

์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์ผ“ ๋ฐฉ์‹ฑ๊ฒŒ ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์†๋„๊ฐ€ ๋Š๋ฆฌ์ง€๋งŒ, ๋„คํŠธ์›Œํฌ ๋Œ€์—ญ ์†Œ๋ชจ๋ฅผ ๋งŽ์ด ๊ฐ์†Œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„ ๋ถ€ํ•˜๋„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.

 

 

์›น ์„œ๋น„์Šค (Web service)

์ผ๋ฐ˜์ ์œผ๋กœ HTML์„ ์ด์šฉํ•˜๋Š” ์›น ํŽ˜์ด์ง€๋„ HTTP/HTTPS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋งŒ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋ชจ๋“ˆ์„ ๋งํ•œ๋‹ค. ์›น ์„œ๋น„์Šค์—๋Š” SOAP ๋ฐฉ์‹๊ณผ Restful๋ฐฉ์‹์ด ์žˆ๋‹ค.

 

 

SOAP (Simple Object Access Protocol)

  • XML ํ˜•ํƒœ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋„๋ก ๊ตฌํ˜„๋œ ํ”„๋กœํ† ์ฝœ์„ ๋งํ•œ๋‹ค.
  • SOAP ๋ฉ”์‹œ์ง€์˜ ๊ตฌ์กฐ๋Š” Envelop / Header / Body ์„ธ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • SOAP์˜ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์€ HTTP์ด์ง€๋งŒ, ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ํ™•์žฅ์ด ์šฉ์ดํ•˜๋‹ค.
  • ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ธ ํ†ต์‹ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ํ”Œ๋žซํผ ๊ฐ„์—๋„ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์ด ํŽธ๋ฆฌํ•˜๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ์ œ์•ฝ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

 

XML (Extensible Markup Language)

SOAP์—๋„ , RESTful API์—๋„ ๋ชจ๋‘ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. XML์€ ๋‹ค๋ชฉ์  ๋งˆํฌ์—… ์–ธ์–ด์ด๋ฉฐ, HTML์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ๊ทธ๋ž˜์„œ HTML์ฒ˜๋Ÿผ ํƒœ๊ทธ(Tag)ํ˜•ํƒœ์˜ ๋งˆํฌ์—… ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค. ํƒœ๊ทธ๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

iOS์—์„œ๋Š” XML์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•ด XMLParser๋ผ๋Š” ํŒŒ์„œ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•˜๊ณ ์žˆ๋‹ค.

 

RESTful(Representational State Transfer)

  • REST๋Š” ์‹ค์งˆ์ ์ธ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์„ ๋งํ•œ๋‹ค๊ธฐ ๋ณด๋‹ค๋Š”, ๋„คํŠธ์›Œํฌ ์ž์›์„ ์ •์˜ํ•˜๊ณ  ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ ๊ด€๋ฆฌ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค.
  • SOAP์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Envelope/Header/Body์™€ ๊ฐ™์ด ๋ณ„๋„์˜ ๊ทœ์•ฝ ์—†์ด ์ฃผ๊ณ ๋ฐ›์œผ๋ฉด ๋œ๋‹ค.
  • URI ๋Š” ์ •๋ณด์˜ ๋ถ„๋ฅ˜์ฒด๊ณ„๋งŒ ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๋™์ž‘์— ๋Œ€ํ•œ ๋ช…์„ธ๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š”๊ฒƒ์ด ์ข‹๋‹ค.

RESTful API์—์„œ์˜ HTTP Method

URI์— ๋™์ž‘์— ๊ด€ํ•œ ๋ช…์„ธ๋ฅผ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ—ค๋”๋ถ€๋ถ„์— HTTP Method๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ž‘์„ ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค.

 

JSON (JavaScript Object Notation)

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

  • JSON๊ฐ์ฒด๋Š” key์™€ Value๊ฐ€ ํ•œ์Œ์ด ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ๋”•์…”๋„ˆ๋ฆฌํ˜•ํƒœ์ด๋‹ค.
  • ๋ฌธ์ž์—ด์ธ ๊ฒฝ์šฐ ์ฟผ์šฐํŒ…(Quoting)์ด ํ•„์š”ํ•˜๋‹ค. (๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์ฃผ๊ธฐ) , ์ •์ˆ˜๋‚˜ ์‹ค์ˆ˜, bool ํƒ€์ž…์€ ํ•„์š” ์—†์Œ
  • ๋Œ€๊ด„ํ˜ธ [ ]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ array๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JSON object ๋‚ด๋ถ€์— ๋˜๋‹ค๋ฅธ object๋ฅผ ๋„ฃ์„ ์ˆ˜๋„์žˆ๋‹ค. { }

 

{
    "version": "https://jsonfeed.org/version/1",
    "title": "My Example Feed",
    "home_page_url": "https://example.org/",
    "feed_url": "https://example.org/feed.json",
    "items": [
        {
            "id": "2",
            "content_text": "This is a second item.",
            "url": "https://example.org/second-item"
        },
        {
            "id": "1",
            "content_html": "<p>Hello, world!</p>",
            "url": "https://example.org/initial-post"
        }
    ]
}

 

 

NSDictionary / NSMutableDictionary

Swift์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋”•์…”๋„ˆ๋ฆฌ์•ˆ์— ๊ฐ™์€ ํƒ€์ž…๋“ค์˜ ์š”์†Œ๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ Foundation ํ”„๋ ˆ์ž„์›Œํฌ์— ์ •์˜๋˜์–ด์žˆ๋Š” NSDictionary NSMutableDictionary ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•œ ์†์‹ค์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

(Mutable์ด ๋ถ™์€ ํƒ€์ž…์€ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป์ด๋‹ค.)

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.