IMCAT.DEV
로그인 가입
Swift 중급 네트워크

Swift 네트워크 요청 처리

Swift 네트워크 요청 처리 — 중급

네트워크 요청 처리

1. 도입 (왜 배워야 하는가)

네트워크 요청 처리는 현대 애플리케이션 개발에서 필수적인 요소입니다. 모바일 앱이든 웹 서비스든 사용자와 서버 간의 데이터 통신이 필요합니다. 예를 들어, 쇼핑몰 애플리케이션에서는 상품 정보를 서버에서 받아와야 하고, 소셜 미디어 앱에서는 사용자 피드를 업데이트하기 위해 서버와의 통신이 이루어져야 합니다.

이 토픽을 모르면, 사용자에게 필요한 데이터를 제때 제공하지 못하거나, 서버와의 데이터 통신에서 발생할 수 있는 다양한 문제를 해결하지 못하게 됩니다. 이는 사용자 경험에 큰 영향을 미치고, 결과적으로 앱의 성공에도 부정적인 영향을 미칠 수 있습니다.

2. 핵심 개념 설명

  • URLSession: 네트워크 요청을 관리하는 클래스입니다. 마치 우체국처럼, 요청을 보내고 응답을 받는 역할을 합니다.
  • DataTask: URLSession을 사용하여 데이터를 요청하는 작업입니다. 이는 물건을 배달하는 우편물과 같아서, 요청한 데이터가 도착하기까지 기다려야 합니다.
  • JSON: 서버와의 데이터 통신에서 많이 사용되는 데이터 형식입니다. 이는 마치 인형의 설명서처럼, 데이터를 쉽게 이해할 수 있도록 구조화된 방식입니다.
  • 용어설명
    URLSession네트워크 요청을 처리하는 클래스
    DataTask데이터를 요청하는 작업
    JSON데이터 전송을 위한 경량 형식

    3. 기본 코드 예제

    가장 기본적인 GET 요청을 보내는 코드 예제를 살펴보겠습니다.

    import Foundation
    
    let url = URL(string: "https://api.example.com/data")! // 요청할 URL 생성
    let task = URLSession.shared.dataTask(with: url) { data, response, error in // 데이터 요청
        if let error = error { // 에러가 발생한 경우
            print("Error: \(error.localizedDescription)") // 에러 메시지 출력
            return
        }
        guard let data = data else { // 데이터가 없는 경우
            print("No data received")
            return
        }
        if let jsonString = String(data: data, encoding: .utf8) { // 데이터가 유효한 경우
            print("Received data: \(jsonString)") // 데이터 출력
        }
    }
    
    task.resume() // 요청 시작

    실행 결과:

    Received data: {"key": "value"}
  • let url = URL(string: "https://api.example.com/data")!: 요청할 URL을 생성합니다.
  • let task = URLSession.shared.dataTask(with: url) { ... }: URLSession을 통해 데이터 요청 작업을 생성합니다.
  • if let error = error { ... }: 요청 중 발생한 에러를 확인합니다.
  • guard let data = data else { ... }: 반환된 데이터가 있는지 확인합니다.
  • if let jsonString = String(data: data, encoding: .utf8) { ... }: 데이터를 문자열로 변환하고 출력합니다.
  • task.resume(): 요청을 시작합니다.
  • 4. 실전 활용 예제

    예제 1: 쇼핑몰에서 장바구니 정보 요청

    쇼핑몰 애플리케이션에서 장바구니 정보를 서버에서 가져오는 경우입니다.

    let cartURL = URL(string: "https://api.example.com/cart")!
    let cartTask = URLSession.shared.dataTask(with: cartURL) { data, response, error in
        // 동일한 에러 처리 로직
        // JSON 데이터 처리 로직
    }
    cartTask.resume()

    예제 2: 소셜 미디어 피드 요청

    소셜 미디어 애플리케이션에서 사용자 피드를 요청하는 경우입니다.

    let feedURL = URL(string: "https://api.example.com/feed")!
    let feedTask = URLSession.shared.dataTask(with: feedURL) { data, response, error in
        // 동일한 에러 처리 로직
        // JSON 데이터 처리 로직
    }
    feedTask.resume()

    5. 흔한 실수와 주의사항

  • 실수 1: URL이 잘못된 경우
  • - 잘못된 URL: let url = URL(string: "htp://invalid-url")! - 올바른 URL: let url = URL(string: "https://valid-url.com")!

  • 실수 2: 데이터가 없는 경우 처리를 하지 않음
  • - 잘못된 코드: if let json = String(data: data, encoding: .utf8) { ... } - 올바른 코드: guard let data = data else { print("No data received"); return }

    6. 정리

  • 네트워크 요청 처리의 중요성을 이해하자.
  • URLSession과 DataTask의 역할을 알고 활용하자.
  • JSON 형식의 데이터를 효과적으로 처리하자.
  • 다음에 학습하면 좋은 주제: 비동기 프로그래밍, URLSession의 다양한 메소드 (POST 요청 등), Alamofire 라이브러리 활용.