본문 바로가기

정보

iOS에서의 네트워크 통신 방식

iOS에서는 네트워크 통신을 위해 다양한 라이브러리와 프레임워크를 제공합니다.

대표적인 예로는 URLSession이 있습니다. URLSession은 HTTP, HTTPS, FTP 등의 프로토콜을 지원하며, 데이터를 비동기적으로 주고받을 수 있습니다.

 

 

HTTP와 HTTPS의 차이점

  • HTTP (HyperText Transfer Protocol):
    • 데이터를 암호화하지 않고 전송
    • 80번 포트 사용
  • HTTPS (HyperText Transfer Protocol Secure):
    • 데이터를 SSL/TLS로 암호화하여 전송
    • 443번 포트 사용
    • 클라이언트와 서버 간의 보안 통신을 보장

 

iOS에서의 보안 통신 방법

iOS에서는 보안 통신을 위해 주로 HTTPS를 사용합니다. iOS 9부터는 **App Transport Security (ATS)**가 도입되어, 앱이 기본적으로 안전한 네트워크 연결(HTTPS)을 사용하도록 권장합니다.

 

TCP와 UDP의 차이점

  • TCP (Transmission Control Protocol):
    • 연결 지향적 프로토콜
    • 데이터의 신뢰성 보장 (데이터의 순서, 손실, 중복 방지)
    • 흐름 제어 및 혼잡 제어
  • UDP (User Datagram Protocol):
    • 비연결 지향적 프로토콜
    • 데이터의 신뢰성을 보장하지 않음 (순서 보장, 손실 방지 없음)
    • 빠른 전송 속도

 

소켓 통신

소켓은 네트워크 상의 두 호스트 간의 통신을 위한 양쪽 끝점입니다. 소켓 통신은 TCP 또는 UDP를 사용하여 구현됩니다.

  • TCP 소켓: 신뢰성 있는 데이터 스트림을 제공
  • UDP 소켓: 빠른 데이터 전송을 위한 비연결형 전송을 제공

 

REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법

REST (Representational State Transfer) API는 HTTP 프로토콜을 기반으로 하는 웹 서비스 디자인 아키텍처입니다. iOS에서 REST API를 사용하여 네트워크 요청을 처리할 때는 주로 URLSession을 사용합니다.

  • 요청 생성: URL, HTTP 메서드, 헤더, 바디 등을 설정
  • 요청 전송: URLSession을 사용하여 비동기적으로 요청 전송
  • 응답 처리: 서버로부터 응답을 받고, JSON 등을 파싱하여 데이터 처리

REST API에서 Method들의 차이점

  • GET: 리소스를 조회
  • POST: 리소스를 생성
  • PUT: 리소스를 업데이트 (전체 업데이트)
  • PATCH: 리소스를 부분 업데이트
  • DELETE: 리소스를 삭제

 

iOS에서의 네트워크 통신 (URLSession 사용)

import Foundation

// Define the URL
guard let url = URL(string: "https://api.example.com/data") else {
    fatalError("Invalid URL")
}

// Create a URLSession
let session = URLSession.shared

// Create a data task
let task = session.dataTask(with: url) { data, response, error in
    // Handle the response
    if let error = error {
        print("Error: \(error)")
        return
    }
    
    guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
        print("Invalid response")
        return
    }
    
    guard let data = data else {
        print("No data")
        return
    }
    
    // Parse the JSON data
    do {
        if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
            print("JSON Response: \(json)")
        }
    } catch {
        print("JSON parsing error: \(error)")
    }
}

// Start the task
task.resume()