본문 바로가기
정보

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

by 밤새는 탐험가89 2024. 7. 30.
728x90
SMALL

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()

 

728x90
LIST