공부 연습장 :-)

서버에서 데이터를 받아서 처리할때 에러인 경우

|

엄청난 많은 경우의 수가 있겠지만 일단 일하면서 생각해본 몇 가지의 상황을 정리하고싶었다.
서비스를 운영하면서 서버에서 데이터를 받아올때 크래시/혹은 에러가 발생할 수 있는 상황들을 생각해본다면,

인터넷이 안되는 경우

  • 이건 실제로 활성화되어있는 서비스의 경우 앱 내의 옵저버가 있어서 네트워크 변경이 감지된 순간 알림이나 block액션이 나올 확률이 크지만, 네트워크 요청을 하는 순간 사용자의 네트워크 환경이 변화될 수도 있다.

타입이 다른 경우

  • 서버에서 데이터를 잘못 내려줘서 혹은 클라이언트에서 다른 타입으로 파싱을 시도해서 크래시 나는 경우
  • 데이터 자체는 받아왔으므로 http response 코드도 정상이고, request를 요청하는 메소드의 비동기 블럭 내에서도 success클로저를 실행한다.
  • 따라서 http요청과 응답 자체는 정상이지만, 데이터의 타입이 다른데 파싱을 시도해서 크래시나는 경우이다.

데이터 객체의 내부 프로퍼티가 nil인데 접근하려는 경우

  • 서버에서 데이터가 내려와서 객체로 파싱되었을때 내부 프로퍼티가 nil인 경우가 좀 헷갈리는 경우였는데,
  • 데이터자체는 잘 내려와서 response코드도 200이지만 내부 프로퍼티가 nil이기때문에 데이터가 잘못 내려온 경우이다. 이때는 fail블럭에서 에러가 감지되지 않는다.
  • 이 경우엔 success블럭에서 파싱된 데이터 객체의 내부 프로퍼티를 가져와서 쓸때 nil인 경우도 체크해야한다.
  • 요약: 데이터가 내려와서 object로 파싱된 객체내의 item이 nil이어도 http response는 정상코드로 내려올 수 있다. 따라서 fail블럭에서 걸러지지 않는 에러 발생 할 수 있음. 객체 내의 프로퍼티를 사용할때 자체의 검증도 필요하며, 일반 fail블럭에서 처리되는 에러와 동일한 방향으로 처리할지/말지는 여러 파트(기획/서버/클라)와 논의해서 결정하는 것이 좋을듯!

Comments