상세 컨텐츠

본문 제목

[iOS, 트러블 슈팅] 소켓 데이터의 순서가 뒤바뀌어 들어와요

개발썰

by Mr.Garlic 2023. 6. 1. 12:06

본문

iOS 트러블슈팅 - 소켓 데이터의 순서가 안 맞아요

한동안 일하면서 겪은 트러블 슈팅을 블로그 글로 남겨봐야 겠다는 생각이 들어서 트러블 슈팅 시리즈를 좀 써보려고 합니다.

아무래도 일하면서 겪은 일을 일기처럼 쓰는거다 보니까~ 내용이 막 알맹이 있거나 구체적으로 코드를 보여주거나 할 수는 없을 것 같아요!

그래도 기억에 남고 재미있으니까 한번 적어보도록 하겠습니다~

 

문제 제기

오늘의 트러블슈팅은 "데이터 순서가 안맞아요" 입니다.

제가 다니는 회사에서는 소켓을 정말 다양하게 사용하고 있는데요, 이번에 제가 작업한 기능에도 소켓이 들어갔습니다. 소켓 특성상 데이터가 정말 빠르게 우다다다 들어오기도 하는데요. 간헐적으로 데이터의 순서가 바뀐다는 QA 이슈가 나왔습니다. 간헐적이라니! 정말 이상한데요~

 

파악

일단 순서가 안맞는다? 소켓 데이터가 들어오는 쪽을 확인해 보았습니다. 들어올 때는 정상적인 순서로 들어오는군요~

그렇다면? 데이터를 처리하는 곳을 확인해 보겠습니다.

 

음~ 이쪽에서 DispatchQueue.global()을 사용하고 있네요... ㅠㅠ
global 큐는 concurrent 이기 때문에 작업 순서를 보장하지 않습니다. 참고) 애플 개발자 문서

 

이 queue 대신에 커스텀으로 serial queue를 하나 만들어서 교체해주니 순서가 잘 보장되는군요~!!!

와우~ 

 

그 대신 데이터를 받아서 처리하는 쪽에서 Main스레드에서 작업하도록 안전하게 처리를 추가적으로 해줘야 하는데 깜박해서 워닝을 좀 봤습니다. 

 

쓰레드를 잘 챙겨주도록 합시다~ 그리고 작업의 성질에 맞는 queue를 사용하는 것이 참 중요하다는 것을 느꼈습니다~!

 

그럼 이만~~~

 

 

관련글 더보기