Data transaction

Yk velog·2024년 8월 8일

Swift

목록 보기
5/8

Swift에서의 네트워킹은 URLSession을 통해 처리되며, URLRequest를 사용하여 요청을 생성하고, URLSessionDataTask를 통해 요청을 실행

  1. URLSession: URLSession을 사용하여 웹 서버와 데이터를 주고받음
  2. URLRequest: 네트워크 요청에 대한 구체적인 정보를 포함하는 클래스. URL, HTTP 메서드(GET, POST 등), 요청 헤더, 요청 바디 등을 설정
  3. Completion Handler: 네트워크 작업이 완료된 후 호출되는 클로저. 보통은 비동기적으로 실행되며, 요청이 성공했을 때는 데이터나 객체를 받아와 처리하고, 실패했을 때는 에러를 처리
  • APIClient.swift

    구조체 Memo

    • struct Memo: JSON 데이터를 매핑할 구조체.
      - id: 메모의 고유 ID (옵셔널).
      - content: 메모의 내용.
      - timestamp: 메모가 생성된 시간을 나타내는 문자열.

      APIClient 클래스

    • 네트워크 요청을 처리하는 클래스.

      performGetRequest 메서드

    • 기능: GET 요청을 수행하여 데이터를 가져오는 메서드.

    • 인자:

      • url: 요청할 URL.
      • completion: 클로저로 결과를 전달하는데 사용되는 핸들러.
    • 동작:
      - URLSession을 생성하여 요청을 보냄.
      - 데이터가 있는 경우, JSONDecoder를 사용하여 Codable 형식으로 디코딩하여 결과를 성공 또는 실패로 완료 핸들러로 전달.

      performPostRequest 메서드

    • 기능: POST 요청을 수행하여 데이터를 전송하는 메서드.

    • 인자:

      • url: 요청할 URL.
      • body: POST 요청 시 전송할 데이터.
      • completion: 클로저로 결과를 전달하는데 사용되는 핸들러.
    • 동작:
      - URLSession을 생성하여 요청을 보냄.
      - 데이터가 있는 경우, JSONEncoder를 사용하여 Codable 형식으로 인코딩하여 요청의 본문으로 설정.
      - 데이터가 있는 경우, JSONDecoder를 사용하여 Codable 형식으로 디코딩하여 결과를 성공 또는 실패로 완료 핸들러로 전달.

      getMemo 메서드

    • 기능: Memo 객체들을 가져오기 위해 API를 호출하는 메서드.

    • 인자:

      • completion: 클로저로 결과를 전달하는데 사용되는 핸들러.
    • 동작:
      - "http://localhost:3000/api/memo_content" URL에 대한 GET 요청을 수행.
      - performGetRequest 메서드를 사용하여 요청을 처리하고, Memo 객체 배열을 성공 또는 실패로 완료 핸들러로 전달.

      postMemo 메서드

    • 기능: 새 Memo 객체를 서버에 POST하기 위해 API를 호출하는 메서드.

    • 인자:

      • body: POST 요청 시 전송할 Memo 객체.
      • completion: 클로저로 결과를 전달하는데 사용되는 핸들러.
    • 동작:

      • "http://localhost:3000/api/memo_content" URL에 대한 POST 요청을 수행.
      • performPostRequest 메서드를 사용하여 요청을 처리하고, Memo 객체를 성공 또는 실패로 완료 핸들러로 전달.
  • TableViewController.swif

    Properties

    • private let apiClient = APIClient(): Memo 데이터를 가져오고 저장하기 위한 API 클라이언트 인스턴스.

    • private var data: [Memo] = []: 화면에 표시할 메모 데이터 배열.

    • private let tableView = UITableView(frame: .zero, style: .insetGrouped): 메모 리스트와 입력 필드를 표시할 테이블 뷰 인스턴스.

    • private var inputTextField: UITextField?: 사용자 입력을 받을 텍스트 필드.

      viewDidLoad()

    • 뷰가 처음 로드될 때 호출되는 메서드.

    • setupTableView() 메서드 호출로 테이블 뷰 설정.

    • fetchDataFromAPI() 메서드 호출로 API를 통해 메모 데이터를 가져옴.

      setupTableView()

    • 테이블 뷰를 설정하고, 데이터 소스 및 델리게이트를 ListViewController로 지정.

    • Auto Layout을 사용하여 테이블 뷰의 제약 조건을 설정.

    • UITableViewCell을 등록하여 재사용할 셀을 설정.

      fetchDataFromAPI()

    • API를 통해 메모 데이터를 비동기로 가져와서 성공 시 데이터를 업데이트하고 테이블 뷰를 다시 로드함.

    • 실패 시 에러 메시지를 출력.

      postMemo(content:)

    • 새로운 메모를 입력받아 API를 통해 서버에 전송하는 메서드.

    • 성공 시 업데이트된 데이터를 다시 가져오고 입력 필드를 비움.

    • 실패 시 에러 메시지를 출력.

      UITableViewDataSource Extension

    • numberOfSections(in:): 입력 섹션과 메모 리스트 섹션을 위한 2개 섹션 반환.

    • tableView(_:numberOfRowsInSection:): 입력 섹션은 1개, 메모 리스트 섹션은 메모 데이터의 개수 반환.

    • tableView(_:cellForRowAt:): 입력 섹션에서는 입력 텍스트 필드를 포함한 셀을 반환하고, 메모 리스트 섹션에서는 메모 데이터를 표시하는 셀을 반환.

      UITableViewDelegate Extension

    • 추가적인 델리게이트 메서드 구현은 생략되어 있음.

      UITextFieldDelegate Extension

    • textFieldShouldReturn(_:): 텍스트 필드에서 리턴 키를 눌렀을 때 호출되는 메서드.

      • 텍스트 필드를 비활성화하고, 입력된 내용이 있으면 postMemo(content:)를 호출하여 새로운 메모를 생성함.

0개의 댓글