이번에 넥스터즈 면접 중 기술 면접을 진행하고 나서 내가 아직 많이 부족하다고 느낄 수 있었다.. Race Condition, Dead lock, Priority Inversion 등 멀티 스레드를 운용하면서 일어날 수 있는 문제점 등에 대해서 제대로 개념을 잡아두지 않아 답변에 어려움이 있었다.. 처음엔 조금 속상했지만 그래도 이런 경험을 통해 이러한 키워드, 개념들을 잡고 갈 수 있는 기회가 될 수 있으니까 모르면 배우면 되지~ 하는 마음으로 단계별로 개념을 정리해보도록 하자. 먼저 오늘은 멀티쓰레드 환경에서 Race Condition에 대해서 알아보도록 하자!Race Condition그래서 레이스 컨디션이 뭘까 도대체 경쟁 상태라고 해석할 수 있는 이 상태는 두개 이상의 쓰레드나 프로세스가 공유 자..
회사에서 웹뷰를 활용한 챗봇을 만드는 프로젝트가 시작해 Swift에서 웹뷰를 사용하는 방식에 대해서 기록으로 남겨두려고 한다. 요즘 많은 프로젝트에서 웹뷰를 활용한 개발이 많이 이뤄지고 있는데 사실 제대로된 웹뷰를 사용해보지 않아 이번 기회에 공부해보려고 한다.iOS에서 웹뷰를 사용하기 위해서는 주로 WKWebView를 사용한다. 하지만 나는 SwiftUI로 개발을 진행하고 있기 때문에 이 SwiftUI에서는 WKWebView를 사용할 수 없어 UIViewRepresentable를 활용해 UIKit에서 가져와 사용하는 방식으로 구현하려고 한다. UIViewRepresentable 사용UIViewRepresentable은 UIKit의 뷰를 SwiftUI에서 사용할 수 있도록 해주는 프로토콜이다. WKWeb..
오늘은 AppStorage를 처음 사용해보면서 이전에 알고 있었고 사용했었던 UserDefaults와의 차이 및 특징에 대해서 알아보려고 한다. 먼저 UserDefaults는 이전에 UIKit에서 부터 자주 사용하던 개념이기 때문에 먼저 정리하고 넘어가보자!UserDefaults는 iOS에서 데이터를 영구적으로 저장하고 읽어오는데 가장 흔하고 쉽게 사용된다. 큰 데이터를 저장할 순 없고 주로 간단한 설정의 저장값 혹은 사용자의 로그인 정보 정도의 값을 저장하는데 쉽게 구현할 수 있기 때문에 자주 사용되었다. UserDefaults는 주로 Bool, String, Int , Double, Date, Array, Dictionary 등 저장이 가능하고 이 UserDefaults에 데이터를 저장하게 되면 iO..
오늘은 지금까지 수집한 데이터를 JSON 파일로 변환시켜 서버로 보내는 방식에 대해서 기록해두려고 한다 🙂 iOS 에서는 앱 내 데이터를 JSON 파일로 변환시켜 파일을 관리 할 수 있도록 지원하고 있다. 주로 JSONEncoder와 JSONDecoder를 사용해서 데이터를 JSON으로 변환하거나 JSON을 Swift객체로 변환할 수 있도록 잘 구현되어있다. https://developer.apple.com/documentation/foundation/jsonencoder/ 이때 데이터 모델은 Codable 프로토콜을 준수해야하고 이 안에 Encodable , Decodable 프로토콜을 포함하고 있다! 그렇기 때문에 이전에 구현해 둔 데이터 모델에 해당 프로토콜을 추가해주도록 하자!// MARK: -..
오늘은 앱에서 디바이스 내 캘린더에 접근하고 일정을 확인 혹은 추가 , 삭제할 수 있는 방법에 대해서 알아보려고 한다. 먼저 그렇게 하기 위해서는 EventKit을 사용해야하는데 이 EventKit 프레임워크는 사람들이 앱에서 캘린더 항목을 만들고, 검색, 편집할 수 있도록 데이터에 대한 엑세스를 제공한다. 내가 어떤 앱을 만들었을때 캘린더 관련 기능을 사용하면서 디바이스 내 캘린더도 동시에 관리할 수 있게 되는 아주 아주 유용한 방식이니 한번 알아보자! 먼저 당연하게 이용자의 캘린더에 접근할 수 있는 권한이 필요하다. 그렇기 때문에 infoPlist로 들어가 다음과 같은 설정을 넣어주면 된다! Key : NSCalendarsUsageDescriptionValue : “앱에서 캘린더에 접근해 이벤트를 관..
SensorKit 데이터를 수집할 때 background 환경에서도 데이터를 수집할 수 있도록 하기 위해 앱 내 백그라운드 작업이 가능하도록 하는 로직을 구현하였다.!오늘은 백그라운드를 통해 작업을 수행할 수 있도록 하는 방식을 기록으로 남기려고 한다! 먼저 백그라운드 작업을 하기 위해 Signing & Capabilties에 백그라운드 Capability를 추가한 다음 사진에 보이는 두가지를 체크해야한다.그 다음 infoPlist 내 백그라운드 작업이 진행 될 identifier를 넣어주어야 하는데BGTaskSchedulerPermittedIdentifiers com.yourapp.sensordatafetch이와 같이 본인 앱의 번들아이디를 넣어준 뒤 코드 내 기재해 둔 identifier를 넣어..