네트워크

데이터를 전송하는 대표적인 방법 : JSON과 XML
XML은 마크업 언어다. 마크업 언어는 데이터를 태그(<>)등을 사용해 표현하며 주로 데이터를 저장 및 전송하기 위해 만들어진 언어이다.
XML은 문서의 호환성이 좋아 시스템이 달라도 교환이 쉽게 가능하다. 데이터가 많아질수록 가독성이 떨어지고 용량이 커져서 JSON에 비해 전송하고 읽는 속도가 느리다고 한다.
<?xml version="1.0" encoding="UTF-8"?>
<list>
<snack>
<name>포카칩</name>
<weight>150g</weight>
<price>2000</price>
</snack>
<snack>
<name>무뚝뚝 감자칩</name>
<weight>100g</weight>
<price>3000</price>
</snack>
</list>
JSON은 JavaScript에서 객체를 만들때 사용하는 표현식을 의미한다.(언어나 문법 ❌)
XML에 비해 쉽게 데이터를 저장 및 교환할 수 있기 때문에 서버와 클라이언트가 가장 많이 사용한다.
JSON은key-value의 형태를 가진다.
[
{
"name": "Jack",
"phoneNumber": "010-1111-2222"
},
{
"name": "Jay",
"phoneNumber": "010-3333-4444"
},
{
"name": "John",
"phoneNumber": "010-5555-6666"
}
]
API (Application Programming Interface)
강의에서는 API를 창구에 비유하고있다.
내가 원하는 정보를 규칙에 맞게 작성해서 API라는 창구를 통해 서버에 요청하면, 서버도 마찬가지로 서버도 응답을 작성해서 API를 통해 보내준다고 생각하면 될 것 같다.
Client ⇠ 응답/요청 ⇢ [ API ] ⇠ 응답/요청 ⇢ ServerAPI Request 명세 예시
{
name: "Harry"
}
API Response 명세 예시
{
"name": "Harry",
"phoneNumber": "010-1111-2222",
"Mbti": "ISFJ"
}
API 명세서에 맞게 Request JSON과 Response JSON 형식을 지키면 서버에 정보를 요청할 수 있다.개발자는 API를 통하면 서버 내부의 로직을 몰라도 되기 때문에 API에도 추상화 개념이 적용된는 것을 알 수 있다.
Swift Codable

공식문서에서는 Codable을 '외부 표현으로 변환할 수 있고 외부 표현에서 다시 변환할 수 있는 유형' 이라고 소개하고있다.
swift의 Codable프로토콜을 채택하는 것은 인코딩, 디코딩을 한다는 의미이다.
서버와 통신 할 때 주로 JSON 형식으로 인코딩을 많이 한다고 한다.
import Foundation
struct PhoneBook: Codable {
let name: String
let phoneNumber: String
}
//String으로 json 모양의 데이터 생성
let jsonString = """
[
{
"name": "Adam",
"phoneNumber": "010-1111-2222"
},
{
"name": "Eve",
"phoneNumber": "010-3333-4444"
},
{
"name": "Abel",
"phoneNumber": "010-5555-6666"
}
]
"""
//jsonString으로 jsonData 생성
let jsonData = jsonString.data(using: .utf8)!
//JSON 디코더
let jsonDecoder = JSONDecoder()
do {
//[PhoneBook].self : self까지 붙여야 타입을 의미한다
let phoneBooks = try jsonDecoder.decode([PhoneBook].self, from: jsonData)
for phoneBook in phoneBooks {
print("name: \(phoneBook.name), phoneNumber: \(phoneBook.phoneNumber)")
}
} catch {
print("JSON 디코딩 실패")
}
name: Adam, phoneNumber: 010-1111-2222
name: Eve, phoneNumber: 010-3333-4444
name: Abel, phoneNumber: 010-5555-6666
URL (Uniform Resource Locators)

http, https → 인터넷 통신 규약을 의미google, naver와 같이 url 의 정체성을 나타낸다key=value 형식으로 표현되며, 여러 개의 매개변수는 &로 구분