작업내역 1주차 금요일 - donggeonoh/bithumb-techcamp-ios-1st GitHub Wiki

작업 내역

  • 동건
    • JSONParser 테스트 코드 작성
    • Custom segment control 구현에 대한 고민
    • 입출금 현황 컬렉션 뷰 셀 xib 작성
    • 입출금 현황 컬렉션 뷰 화면 구성
      • 입출금 현황 컬렉션 뷰 DiffableDataSource 사용
      • 입출금 현황 컬렉션 뷰 Compositional layout - ListConfigration 적용
  • 제로
    • CoinList 화면 구현
  • 허황
    • 네트워크 통신(HTTP) 피드백 반영
    • API 모델 구현(Ticker, Orderbook 등)
    • 네트워크 통신(WebSocket) 기본 구현 (추상화 예정)

고민 및 해결

  • 동건
    • Segmented control을 디자인 했던 것으로 커스텀 하려고 했으나 몇 가지 문제가 발생하였습니다.

      Segmented Control의 선택된 뷰의 커스텀이 불가합니다. (선택 시 움직이는 뷰) Segmented Control의 background에 image가 기본적으로 깔려있어서 배경을 투명하게 하기 어렵습니다. 따라서 Segmented control의 커스텀은 일단 보류하고, 다른 방법으로 Segmented control과 비슷한 뷰를 구현 하도록 하고 일단 기능부터 구현하는 것으로 하였습니다.

  • 제로
    • coinListCollectionView의 datasource 클래스가 코인의 정렬과 같은 기능을 담당할지 고민

      datasource클래스가 정렬기능을 가지면 ViewController의 일을 줄일 수 있기 때문에 좋을것이라고 예상 더 나아가 datasource클래스가 통신 기능을 가지면 굳이 MVVM패턴을 사용하지 않고 MVC패턴에서도 ViewController의 비대화를 막을 수 있을 것이라고 예상

  • 허황
    • test_URL이_유효하지않을때_Error가_나오는지 Unit Test

      잘못된 URL인 경우 시스템에서 어떤 에러를 반환하는지 명확하게 알 수 없기 때문에 XCTAssertEqual(error, .statusCodeError(400)) 테스트를 XCTAssertNotNil(error)로 변경했습니다.

    • 비동기 Unit Test

      NetworkService Unit Test를 작성할 때 작업이 비동기일 경우 테스트 케이스를 거치지 않고 함수가 종료되어 성공한 테스트가 된다. XCTestExpectation, fulfill(), wait(for: )를 통해 개선했습니다.

    • WebSocket 구현

      라이브러리를 사용하지 않는 WebSocket 자료를 찾기 힘들어 공식문서를 토대로 구현했습니다.

      간단한 정리

      class URLSessionWebSocketTask : URLSessionTask

      • URLSessionWebSocketTask는 URLSessionTask 상속받음.
      • resume(), cancel() 등 메서드를 사용할 수 있음.

      URLSession.webSocketTask(with: url):

      • 메서드로 URLSessionWebSocketTask를 생성할 수 있음.
      • URL에 접속할 주소를 넣으면 됨.
      • [링크]

      resume() : task(dataTask, websocketTask)를 시작할 때 사용함. send()

      send(
          _ message: URLSessionWebSocketTask.Message
          , completionHandler: @escaping (Error?) -> Void)
      • 메세지를 보낼 때 사용함

        • message : URLSessionWebSocketTask.Message 열거형 타입

          case data(Data)

          데이터 블록이 포함된 WebSocket 메시지입니다.

          case string(String)

          문자열을 포함하는 WebSocket 메시지입니다.

        data로만 테스트 해봣음, String는 테스트 할 예정

      cancel(): 작업 취소

      receive()

      func receive(
          completionHandler: @escaping (Result<URLSessionWebSocketTask.Message, Error>) -> Void)
      • 메세지을 받을 때 사용됨.
⚠️ **GitHub.com Fallback** ⚠️