SWIFT 30

[Swift/iOS] DispatchQueue와 Task의 차이 — 두 AI와 대화로 정리한 Swift 동시성

회사에서 DispatchQueue와 Task에 대해 이야기하다가 의문이 생겼다. 신규 코드에서는 DispatchQueue를 쓸 일이 더 이상 없는 걸까. 처음에는 Claude와 대화하면서 개념을 정리해 보았고, 그 결과를 다시 Gemini에게 리뷰받으며 한 번 더 검증했다. 그 다음 다시 또 Claude와 이야기를 이어갔다. 두 AI가 서로 다른 관점에서 짚어준 부분이 있었고, 그 과정에서 처음에는 보이지 않았던 함정과 미묘한 결론에 도달하게 되었다. 그 모든 과정을 시간 순서대로 정리해 본다.1. Claude와의 첫 대화: 기본 개념 정리먼저 Claude에게 DispatchQueue와 Task가 어떻게 다른지 물었다. 답변을 정리하면 다음과 같다.한 줄 요약항목DispatchQueueTask등장GCD ..

[Swift/iOS] (Base) XML Parser를 만드는 과정, 설계부터 고민까지

Swift로 XML Parser 만들기, 설계부터 고민까지1. 이야기의 시작프로젝트에서 XML 응답을 파싱해야하는 일이 생겼습니다. 주로 API로부터 응답은 JSON 포맷으로 받게 되지만 어쩌다 한번씩 XML 포맷으로 응답을 받는 경우가 있습니다.흔하지 않은 경우이기도 해서 그때마다 필요한 데이터나 정보에 맞게 Parser를 만들었습니다.하지만 생각보다 XML 포맷의 응답이 많아지고 있었습니다.Swift의 XMLParser의 불편한 문제기본으로 제공하는 XMLParser는 실제로 사용하는데 몇가지 불편한 점이 있습니다.XMLParser는 데이터를 한 줄, 한 줄 읽으면서 파싱을 하게 됩니다.현재 어느 위치에서 파싱이 진행되는지 알 수 없기 때문에 이 위치를 알기 위해서는 수 많은 추가 작업들이 필요합니다..

[Vapor/Swift] 프로젝트 생성부터 NAS 배포까지: with 트러블슈팅

[Vapor/Swift] 프로젝트 생성부터 Synology NAS 배포까지: with 트러블슈팅클라이언트 개발자들은 항상 서버, 백, API에 굶주리곤 합니다.개인적으로 사용할 서비스에서 스케줄링 작업이 필요했습니다.주 언어인 Swift, Swift에서 사용할 수 있는 웹 프레임워크 Vapor, 집에서 사용중인 NAS를 이용해서 배포한 과정을 공유합니다.(Swift로 백엔드 개발하는 사람이 여기있네)자세한 설치 방법은 공식문서를 참고해주세요.전체적인 배포 흐름과 트러블슈팅을 중심으로 글이 작성되었습니다.사용하는 프로젝트도 vapor 생성 시 준비되는 기본 todo 프로젝트입니다.1. 프로젝트 시작하기터미널에서 프로젝트를 생성할 디렉토리로 이동한 뒤 아래 명령어를 입력합니다.vapor new sampleV..

programming/Server 2026.03.14

[Swift/iOS] 토큰 데이터를 KeyChain에 안전하게 저장하기

앱에서 로그인 후, 서버에서 반환되는 사용자 인증토큰(accessToken과 refreshToken)을 저장하려고 합니다.CoreData를 사용하기에는 너무 단순한 형태이고,UserDefaults에는 간단한 설정값을 저장하는데 주로 사용하기 때문에,인증토큰처럼 보안이 중요한 경우에는 다른 방법을 찾아보는게 좋다는 생각이 들었습니다. KeyChain은 암호화된 저장소로 토큰 데이터를 저장하기에 알맞다고 판단한 후 앱에서 사용해보았습니다. UserDefaults가 키-값 쌍으로 데이터를 저장하고 불러오는 것처럼, 키체인도 사용할 수 있습니다.다만 KeyChain은 데이터와 속성을 묶고 추가적인 보안 속성을 함께 사용할 수 있습니다. 키체인 서비스 KeyChain Service사용자를 대신해서 안전하게 작은 ..

[Swift/iOS] 애플 로그인 후 반환 값 ASAuthorizationAppleIDCredential From 공식문서

애플 로그인(Apple Authentication Services)를 적용시킨 후 반환되는 값에 대해서 살펴보고자 합니다.유저가 첫 로그인에 성공하면, 가입 후 애플 서버로부터 받은 유저 정보를 서비스하는 서버에 전달해야 합니다.서비스에서도 일부 정보를 사용하고 저장해야하기 때문입니다.(애플 서버가입 여부는 아이폰 기준, 설정 - Apple ID - 암호 및 보안 - Apple로 로그인 - Apple ID를 사용하는 앱에서 확인 가능) 서버 쪽에서는 이 전달받은 데이터를 다시 검증하는 것으로 알고 있습니다.authorization.credential as? ASAuthorizationAppleIDCredential첫 로그인 시 확인할 수 있는 값 중 identityToken과 authorizationCo..

[Swift/iOS] CoreData 사용하기(4) - 속성값 유무에 따른 데이터 저장, 속성의 optional 타입

https://modelinspring.tistory.com/92 [Swift/iOS] CoreData 사용하기(3) - 데이터 저장하기, 데이터 불러오기 기초https://modelinspring.tistory.com/91 [Swift/iOS] CoreData 사용하기(2) - CoreData Stack 설정하기 From 공식문서! 공식문서를 참고한 글입니다.https://developer.apple.com/documentation/coredata/setting_up_a_core_data_stack https://modemodelinspring.tistory.com위 포스트에 이은 CoreData 네 번째, 마지막 포스트입니다. 이전 포스팅에서는 Object에 값을 채운 후 데이터를 저장했습니다. 모든..

[Swift/iOS] CoreData 사용하기(3) - 데이터 저장하기, 데이터 불러오기 기초

https://modelinspring.tistory.com/91 [Swift/iOS] CoreData 사용하기(2) - CoreData Stack 설정하기 From 공식문서! 공식문서를 참고한 글입니다.https://developer.apple.com/documentation/coredata/setting_up_a_core_data_stack https://modelinspring.tistory.com/90 [Swift/iOS] CoreData 사용하기(1) - 프로젝트 중간에 추가하기, Entity 만들기Coremodelinspring.tistory.com위 포스트에 이은 CoreData 세 번째 포스트입니다. Core Data 데이터 저장하기이전 포스트에서 Car Entity를 만들어놓았습니다.이제..

[Swift/iOS] CoreData 사용하기(2) - CoreData Stack 설정하기 From 공식문서

! 공식문서를 참고한 글입니다.https://developer.apple.com/documentation/coredata/setting_up_a_core_data_stack https://modelinspring.tistory.com/90 [Swift/iOS] CoreData 사용하기(1) - 프로젝트 중간에 추가하기, Entity 만들기CoreData를 사용하기 위해서는 프로젝트 생성시에 Use Core Data를 체크하면 되지만,프로젝트 중간에 CoreData를 추가하게 되었습니다.이 과정을 살펴보겠습니다. 프로젝트 중간에 CoreData 추가하기Data Mmodelinspring.tistory.com위 포스트에 이은 CoreData 두 번째 포스트입니다.Core Data StackCore Data ..

[Swift/iOS] CoreData 사용하기(1) - 프로젝트 중간에 추가하기, Entity 만들기

CoreData를 사용하기 위해서는 프로젝트 생성시에 Use Core Data를 체크하면 되지만,프로젝트 중간에 CoreData를 추가하게 되었습니다.이 과정을 살펴보겠습니다. 프로젝트 중간에 CoreData 추가하기Data Model 파일 생성하기[command + N] 또는 [File] - [New] - [File...] 으로 Core Data의 Data Model 파일을 생성합니다. .xcdatamodeld 확장자의 파일이 생긴 것을 확인할 수 있습니다. AppDelegate 수정하기그 다음으로 AppDelegate를 수정합니다.CoreData를 import해주고,import CoreData      // MARK: UISceneSession Lifecycle메서드들 다음에 아래 코드들을 추가합니다..

[Swift/iOS/디자인패턴] 퍼사드 Facade 패턴

퍼사드 패턴이란?서브 시스템을 감싸고 단순한 인터페이스를 제공, 복잡한 시스템 구조를 단순화하는 패턴건물의 정면(Facade)을 의미다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체간편한 메소드 제공간단히 말하면특정 행동을 위해 필요한 여러 서브 클래스들의 기능을 '퍼사드라는 클래스로 단순화해서 쉽게 사용할 수 있게 한 것'입니다.서브 클래스들의 많은 기능을 다 가져오는 것이 아니라 퍼사드 클래스의 목적 수행을 위해 필요한 기능들만 가져와서 단순화합니다. 퍼사드 패턴의 구성요소퍼사드 클래스서브 시스템들을 단순화하는 역할을 함클라이언트는 서브시스템들과 직접 소통하는 것이 아니라 퍼사드 클래스만 사용함 -> 클라이언트는 서브시스템의 내부 구조를 알 필요가 없음서브시스템 클래스퍼사드 클래스에 ..