[Swift] Userdefaults에 대한 고찰

유경박·2023년 8월 24일
1

*먼저 내용소개에 앞서 최적의 로컬DB 저장을 위한 구축(백그라운드 스레드 큐나 배치큐와 같은 처리 작업이나 UI Thread와의 동기화작업을 한다던지 등)은 생략 함

간단하게 TodoList앱을 만드는 도중 에뮬레이터에서 데이터를 UserDefaults로 저장 후 바로 종료하고 다시 빌드를하여 실행을 했을 경우 데이터가 안바뀌는 문제가 있었음

(하지만 이미 빌드된 앱을 통해 저장후 바로 종료시 정상적으로 작동했으며, 에뮬레이터상에서 변경사항을 UserDefaults로 저장후 몇초의 시간을 두고 다시 빌드하면 정상적으로 작동됨)

여기서 추측이 가능했던 상황은 분명 에뮬레이터상에서 UserDefaults를 저장하는 폴더가 있을것이고 이곳에 데이터가 빨리 저장되는지 확인하고 싶었는데 한참을 찾다가 Xcode상으로 확인할수 있는 방법을 찾아냄

방법은 아래와 같다.

1) xcode상에서 임의로 브레이크 포인트를 잡아 hit되는곳을 잡는다.

2)우측하단 콘솔에 (lldb)가 쓰여진곳 옆에 커서를 focus 하고 po NSHomeDirectory()를 쓰면 디바이스가 설치된 경로가 표시되는걸 확인한다.

3)Finder에서 우클릭후 "폴더로 이동"을 눌러 콘솔로그창에 경로를 복붙한다.
Documents Library SystemData tmp 폴더 총 4개가 보이는데

Library -> Preferences를 들어가면 (appname).plist로 저장된 userdefaults파일이 생성되고 열어보면 값이 들어있는것을 확인할수 있다.

자, 그러면 한번 확인해보자. 에뮬레이터로 저장후 값이 제대로 들어가는지 말이다.

요렇게 create에 쓰일 데이터를 만들고 완료하고 바로 저장시 UI에 변경되는 모습과 pinfo에 저장되는 데이터를 확인해보자.

영상에서 보면 알수있듯이 userdefaults 데이터가 상당~히 저장이 느리다. 물론 빌드된 실제 앱의 경우 폴더로 접근하여 저장하는 방식이 아닌 앱 컨테이너에서 저장을 처리하기때문에 바로 적용이 되지만 에뮬레이터로 할경우 디스크에 쓰는속도가 느리기에 바로껐다가 빌드하면 저장이 안되기때문에 주의를해야할것같다.

profile
으아아

1개의 댓글

comment-user-thumbnail
2023년 8월 25일

와우 이번 포스팅도 매우 흥미있네요!

답글 달기