안녕하세요. 후르륵짭짭입니다.
이번에는 모바일 앱과 서버와의 통신을 필수 요소인 HTTP 통신에 대해서 알아갈려고 합니다!!!
1) URL 생성하기
보통 URL을 읽어 올 때는 아래와 같은 방법으로 URL을 해줍니다.
하지만 아주 큰 단점이 있는데요. query에 한글이 들어가면 서버가 그 한글을 읽을 수 없다는 거죠.
그래서 서버와 통신이 안되고 보안성 또한 취약하다고 해요,
그래서 이번에는 URL을 활용하는 방법이 아니라 URLComponents를 통해 다뤄볼까 합니다.
URLComponent 객체를 생성하고 String 부분에 쿼리 이전 까지를 넣습니다.
그리고 Dictionary로 구성된 URLQueryItem을 하나하나 생성해준 다음 URLComponent 객체에 넣어주면 됩니다.
그리고 urlCompoents.url ~ url.queryItems.removeAll은 옆에 결과 보면 알 수 있을 겁니다.
그런데,,,, queryItmes을 하나하나 추가해주기 귀찮습니다. 그래서 다음과 같은 방법으로 해주면 더욱 편합니다.
딕셔너리 배열을 만들어주고 그 그 배열을 이렇게 고차함수를 사용해서 URLQuerryItem으로 형변환을 모두 해주고 queryItmes로 넣어주는 방법입니다.
이렇게 된다면 딕셔너리가 key : value로 구성되어 있기 때문에, value를 바꿔주기 더욱 편하게 됩니다.
2) URLSession 선언하기
기존에는 URLSession을 이렇게 받아 왔습니다. URLSession.shared.dataTask 를 사용해서 서버와 연결하였는데,
이번에 새로 배운 것은
이것과 같은 방식입니다.
URLSessionConfiguration이란 URLSession을 통해 어떠한 행동(download, upload)을 할 것인지 정의 해주는 겁니다.
defualt 외에도 ephemeral, backgroud가 있는데, 사용해보진 않았습니다.
3) Codable형식으 구조체 생성하기
이제 Codable 형식인 구조체를 선언해줍니다. Codable 프로토콜은 Encode와 Decode 방식이 둘다 가능한 방법입니다. 따라서 변수 이름만 같다면 자동으로 매칭시켜 해독 시켜줍니다. 아주 유용하져
그런데 변수가 틀릴 수도 있을 때는 CodingKey라는 프로토콜을 사용해서 변수를 다시 매칭 시켜주도록 해줍니다.
서버로 받아오는 변수와 Codable로 해독하는 변수가 일치하지 않을 경우에는 오류가 생기기 때문이져.
4) Get 방식으로 데이터 읽어 오기
그리고 아래와 같이 동일한 방법으로 해주면 됩니다.
상태 코드 일치 여부 확인 -> 받아온 data를 JSONDecoder()로 통해 해독을 하는 것!
어렵지 않습니다. 그리고 꼭 마지막에 resum()을 넣어주는거 잊으면 안됩니다.
5) POST로 데이터를 서버로 전송하기
POST로 전송하기 위해서는 URLRequest(url:) 을 사용해줘야합니다. 그러면 이 URL을 요청한다.
어떠한 방법으로(httpMethod)?
Header 필드 부분은 어떤 형식으로? (addValue)
어떤 내용을 담아서?(httpBody)
이렇게 해주면 됩니다.
request를 정의해주고 JSONEncoder를 통해서 보낼 데이터를 인코딩 해주세요.
그리고 나서 session.dataTask(with: ) 이 부분에 우리가 정의한 request를 넣어주면
내용이 서버로 POST 방식으로 전송이 됩니다, 그리고 POST에서 Response를 보내주면 그 내용을 해독해서 다루면 됩니다.
지금 까지 Swift의 HTTP 통신에 대해서 알아봤습니다.
모두 즐코 하세요!!
'Xcode > Swift - PlayGround' 카테고리의 다른 글
PlayGround) Struct 와 Class의 차이 그리고 Protocol (1) | 2020.07.23 |
---|---|
PlayGround) SQLite를 이용하여 데이터를 저장하자! (0) | 2020.07.18 |
PlayGround) Closure에 대해서 알아보자 2부 (nonEscaping) (0) | 2020.07.17 |
PlayGround) Closure에 대해서 알아보자 1부 (Expression) (0) | 2020.07.16 |
PlayGround) Delegate에 대해서 알아보자 (0) | 2020.07.04 |
댓글