본문 바로가기
스파르타코딩 클럽/기초

Swift | 네트워크 쉽게 이해하기(with URLSession)

by UDDT 2025. 4. 17.

네트워크(Network)

     개발자는 네트워크를 이용해 서버에서 데이터를 받아오곤 한다.

   서버로부터 데이터를 요청(request)하면, 서버는 해당하는 데이터를 응답(response)해준다.

   우리의 생각은 다양하므로 데이터를 요청하고, 응답받는 과정에 규칙이 없다면 난장판이 된다.

 

    예를 들어, "오늘 날씨 알려줘" 라는 요청을 할 때에도

   야 오늘 날씨 좀 / 오늘 날씨 어때 /  오늘 날씨 정보 부탁드립니다 등의 방식으로 다 다르게 말할 수 있고,

   응답이 올때도

   오늘의 날씨는 17도입니다 / 개더움 / 오늘 17도 등의 방식으로 다르게 응답이 올 수 있다.

 

   이러한 혼란이 없으려면, 통신을 위한 '규칙'이 있어야할 것 같다.

  그 규칙이 바로 데이터 형식이다.

 JSON

JSON (JavaScript Object Notation) 은 데이터를 표현하는 형식 중 하나

 
   JSON은 그냥 통신을 위한 약속(데이터 형식) 중 하나다

  서버와 클라이언트가 가장 많이 사용하는 데이터 형식이 JSON이고,

  JSON은 key - value 형태로 이루어져 있다.

[
    {
        "name": "Adam",
        "phoneNumber": "010-1111-2222"
    },
    {
        "name": "Eve",
        "phoneNumber": "010-3333-4444"
    },
    {
        "name": "Abel",
        "phoneNumber": "010-5555-6666"
    }
]

 

   엥? 근데 뭔가 Swift랑 다르게 생겼는데? 하며

  Swift에서는 못쓸거 같지만, 앞서 말했듯 서버와 클라이언트가 가장 많이 사용하는 데이터 형식이며

  프로그래밍 언어들은 대부분 인코딩과 디코딩을 지원한다

 Codable

     Swift의 Codable을 보면, Encodable과 Decodable을 지원하고 있다.

 

     Encodable은 말 그대로 해당 형식으로 인코딩할 수 있는거고,

     Decodable은 해당 형식을 원본의 형태로 바꾸는 것이다.

 

     쉬운 예시로 원본이 mp4 파일을 avi로 인코딩할 수 있고,

    avi로 된 파일을 mp4인 원본으로 디코딩할 수 있다.

 

     만약, JSON 형식의 데이터를 Swift 언어로 바꾼다면 디코딩이 되는 것이고,

    Swift 언어를 JSON 형식으로 바꿀 때는 인코딩이 되는 것이다.

    물론 주체에 따라 서버 입장에서는 JSON 형식으로 디코딩 받는 것이겠지만.....

    ( 약간 코에 걸면 코걸이 귀에 걸면 귀걸이 느낌쓰??)

 

 API 명세

     근데 그러면 대체 뭘 인코딩하는거고, 뭘 디코딩하는걸까?

    https://reqres.in/api/users/1

 

    이 링크를 누르면, 다음과 같은 데이터가 보인다.

 

  우리가 앞서 봤던 JSON 형태다.

 

   이런게 API 명세이고,

  API를 쉽게 생각하면, 서버에서 클라이언트(앱이라고 치자)와 통신하기 위한 통로를 열어둔 것이다.

  보통, 창구라고 하는데 서버가 어떻게 생겼는지 구조가 어떻게 되었는지와 상관없이

  그냥 이 통로를 통해서 데이터를 주고 받으면 된다.

 

  Swift는 JSON 형식이 아니기 때문에,

 이 데이터를 가져와서 Swift 형식으로 디코딩해줘야 한다.

 

  그러면 디코딩해줬다고 치고,

 이 데이터 어떻게 주고받고 할 수 있을까?

 

URLSession 기본

     Swift에서는 서버와 통신하기 위해 URLSession이라는 클래스를 제공해준다.

   우리는 이 URLSession을 사용해서 데이터와 통신하면 된다.

   

    끝!

     .

     .

     .

    하면 좋겠지만, URLSession은 그렇게 간단하지는 않다.

    최대한 흐름을 타고 이해해보면 좋을 거 같다.

 

    URLSession에 딸려오는 중요한 개념은,

    1. URLSessionConfiguration과 2. URLSessionTask가 있다

    1은 URLSession의 환경설정을 해주는 메서드이고,

    2는 Task라는 이름에서 볼 수 있듯 어떤 일을 수행할 것인가 결정하는 메서드이다.

 

    우리가 서버로부터 데이터를 받아오려면 어떤 과정을 거쳐야할까?

     

 서버로부터 데이터를 받아오는 과정

     "서버에서 데이터를 받아오고 싶어" 라는 전제가 있다는 것은,

     사실 다음의 요건들을 충족하는 것이다.

      1. 서버가 데이터를 가지고 있다는 것을 알고 있고,

      2. 내가 필요한 데이터가 무엇인지 알고 있는 것

     

      그렇다면 1, 2번은 우리가 어떻게 알고 있을까?

     바로 API 명세 덕분이다.

 

      그렇다면 첫번째 과정이 나왔다. 

      - API 명세 확인하기

 

      API 명세를 확인하면 개발자는 해당 데이터를 담아올 준비를 해야한다.

     struct Type으로 데이터를 담을 공간을 마련해준다.

      - 데이터 구조체 만들기

 

     데이터 구조체는 만들어졌고,

    이제 서버에서 데이터를 불러와야 한다.

    어떻게 하면 될까?

    Swift는 URLSession이라는 클래스로 서버와 통신할 수 있다고 했다.

     -  URLSession 만들기

 

    URLSession을 만들면, 기본적으로 환경설정을 해줘야한다.

     -  URLSession Configuration 설정하기

 

     환경 설정이 된 URLSession으로 URL에 요청을 하면 된다.

    그런데, 이 요청(requset)을 할 때 결국에 url이 필요하다.

     - URL 명시하기

 

     이제 명시된 url을 사용해서 요청(request)을 하면 된다

    요청을 할 때는 method가 있으므로 API에서 명시되어 있는 메소드를 사용하면 된다.

    - GET할지 POST할지 등의 method 명시하기

 

     이제 GET할지 POST할지는 정해졌고,

     내가 보내는 요청이 어떤 Type의 요청인지 명시해줘야 한다.

    - 보내는 요청이 JSON임을 명시하기

 

      이제 URLSession을 사용할 준비가 끝났으므로,

     일을 시키면 된다

     - URLSession.dataTask로 일 시키기

 

1. API 명세 확인하기
2. API 명세에 따라 데이터 구조체 만들기
3. URLSession 만들기
4. URLConfiguration으로 URLSession 세팅하기
5. URLSession에서 사용할 url 만들기
6. URLSession에서 사용할 method 설정하기
7. method 동작을 할 때 보내는 요청이 JSON임을 명시하기
8. URLSession한테 일 시키기

 

최근댓글

최근글

skin by © 2024 ttuttak