네트워크 기본 개념

네트워크란 둘 이상의 컴퓨터가 연결되고 소통하는것을 말한다. 아이폰도 하나의 컴퓨터, 서버도 하나의 컴퓨터로 생각할 수 있기에 서버와 아이폰과의 통신도 네트워크 통신이라 할 수 있다.
인터넷이란 전세계 컴퓨터를 연결하는 거대한 네트워크를 말한다. 인터넷 연결을 하기 위해서는 와이파이 연결이 되어있거나 데이터가 켜져 있어야 한다.
Swift 로 서버와 통신하는 코드를 작성할 수 있다.
Json
Json(JavaScritpt Object Notation) 은 데이터를 표현하는 방식 중 하나로 key-value 형태를 가진다.
예를 들어 이름과 전화번호를 가지고 있는 Json은 아래와 같다.
[
{
"name": "User1",
"phoneNumber": "010-1111-2222"
},
{
"name": "User2",
"phoneNumber": "010-3333-4444"
},
{
"name": "User3",
"phoneNumber": "010-5555-6666"
}
]
이 Json 데이터는 리스트 [ ] 안에 3개의 전화번호부 데이터를 표현한다.
Json 은 특정한 프로그래밍 언어 안에 속하지 않으며, 대부분의 프로그래밍 언어에서는 Json 포멧의 데이터를 다룰 수 있는 기능을 제공한다.
API
API(Application Programming Interface) 를 이해하기 위해서는 우선 Interface 에 대해서 이해해야 한다.

개발용어에서 인터페이스는 항상 창구를 의미한다. 이 뜻은 Client 가 API 서버에 대한 내부 로직이 어떻게 생겼는지, 작업은 어떻게 하는지 정확히 알 필요 없이 그저 서버에서 뚫어준 창구를 통해서만 소통하면 된다는 뜻이다.
예를 들어 TV 리모컨 이 있다고 가정을 했을 때 리모컨의 전원버튼, 채널버튼, 음량버튼 은 TV를 컨트롤 하기위한 창구(API)이다. 우리는 사용하면서 실제 버튼들의 내부 회로 및 하드웨어가 어떻게 동작하는지 알 필요가 없듯이 API도 마찬가지인 것이다.
API에 대해 정리하자면 API는 직역 그대로 Application Programming 에 필요한 Interface 이다. 즉, 어떤 프로그램 개발을 할 때 원하는 기능들을 제공해주는 창구, 설명서, 도구 이다.
Codable
Swift 의 인코딩과 디코딩
- 인코딩: 데이터를 특정 형식으로 변환하는 것.
- 디코딩: 인코딩 된 데이터를 다시 원본으로 변환하는 것.
Swift 의 Codable 프로토콜을 채택한다는 것은 인코딩과 디코딩이 될 수 있음을 의미한다. Codable 내부 코드를 살펴보면 Decodable & Encodable 로 구현되어있는것을 확인할 수 있다.
서버와 통신하기 위해서는 Json 형식으로 인코딩을 많이한다.
struct PhoneBook: Codable {
let name: String
let phoneNumber: String
}
Codable 을 채택함으로써 인코딩과 디코딩이 가능한 객체가 된다.
Json 형식의 데이터에서 Swift 로 데이터를 디코딩해서 추출하는 과정
import Foundation
struct PhoneBook: Codable {
let name: String
let phoneNumber: String
}
// string 으로 json 모양의 데이터를 생성.
let jsonString = """
[
{
"name": "User1",
"phoneNumber": "010-1111-2222"
},
{
"name": "User2",
"phoneNumber": "010-3333-4444"
},
{
"name": "User3",
"phoneNumber": "010-5555-6666"
}
]
"""
// jsonString 으로 jsonData 를 생성.
let jsonData = jsonString.data(using: .utf8)!
// Swift 가 제공하는 JSON 디코더.
let jsonDecoder = JSONDecoder()
// JSON -> Codable 디코딩 진행.
do {
let phoneBooks = try jsonDecoder.decode([PhoneBook].self, from: jsonData)
for phoneBook in phoneBooks {
print("name: \(phoneBook.name), phoneNumber: \(phoneBook.phoneNumber)")
}
} catch {
print("JSON 디코딩 실패")
}
이 코드를 실행하면 아래 처럼 데이터가 출력될 것이다.
name: User1, phoneNumber: 010-1111-2222
name: User2, phoneNumber: 010-3333-4444
name: User3, phoneNumber: 010-5555-6666
URL 구조

- URL (Uniform Resource Locators): 웹에서 특정 위치를 나타내는 주소.
- Protocol: http, https → 인터넷 통신 규약을 의미.
- Domain: 자원이 위치한 서버(컴퓨터)의 이름. 예를 들어 google, naver . url 의 정체성을 나타낸다.
- Port: 구체적으로 어떤 서버를 이용할지 번호로 결정. HTTP 의 경우 80. HTTPS 는 443.
- Path: 서버에서 제공하는 자원의 경로를 나타냄.
- Query: 자원에 대한 추가적인 매개변수를 전달하는 데 사용됨. 주로 key=value 형식으로 표현되며, 여러 개의 매개변수는 &로 구분.
- Fragment: 자원 내에서 특정 부분을 가리킬 때 사용.
REST API
REST API 는 전세계에서 대표적으로 널리 쓰이는 API 중 하나로 상태(State)를 표현해서 정보를 주고 받는 API 이다. REST API는 HTTP URL 을 통해서 자원을 명시하고 HTTP Method(GET, POST, PUT, DELETE) 를 통해 해당 자원을 어떻게 할 것인지를 결정한다.
REST API도 결국 API 이기 때문에 데이터를 주고 받는 형식, 창구라고 생각할 수 있다.
URLSession
URLSession 은 Swift 에서 서버와 통신하기 위해 제공되는 클래스로, URLSession 을 다루기 위해서는 크게 아래 2가지 개념을 알아야 한다.
1) URLSessionConfiguration
Configuration 은 환경 설정을 의미한다. URLSession 으로 네트워크 통신을 하되, 여러가지 커스텀한 설정들을 설정할 때 URLSessionConfiguration 을 이용한다.
예를 들어 네트워크 통신의 타임아웃 시간설정, 네트워크 통신 캐시 정책 설정 등을 세팅할 수 있다.
URLSession 객체를 사용하려면 URLSessionConfiguration 을 항상 파라미터로 넣어줘야 한다. 아래와 같이 default configuration 을 활용해 URLSession을 생성할 수 있다.
let defaultUrlSession = URLSession(configuration .default)
2) URLSessionTask
URLSessionTask 으로 네트워크 통신을 할 때 어떤 태스크를 수행할 것 인지 결정할 수 있다.
- URLSessionDataTask: GET 요청. 서버로부터 데이터를 가져오거나 서버에 데이터를 전송할 때 사용.
- URLSessionDownloadTask 파일 다운로드를 처리할 때 사용. 백그라운드 다운로드 지원.
- URLSessionUploadTask: 파일 업로드를 처리할 때 사용. 백그라운드 업로드 지원.
URLSession 을 사용해 서버의 데이터를 GET 해오는 방식의 예제 코드는 아래 깃허브에서 확인할 수 있다.
iOS-Proficiency-Week/URLSessionProject at main · sh990920/iOS-Proficiency-Week
iOS 앱개발 숙련주차 블로그 정리 자료. Contribute to sh990920/iOS-Proficiency-Week development by creating an account on GitHub.
github.com
'swift' 카테고리의 다른 글
| iOS 코디네이터 패턴 (0) | 2025.05.19 |
|---|---|
| Swift Delegate 패턴 (0) | 2024.07.09 |
| CoreData 와 UserDefaults (0) | 2024.07.09 |
| 메모리 관리 이해 (0) | 2024.07.09 |
| UIViewController 생명주기 (3) | 2024.07.09 |