2024.08.19 - [◽️ Programming/T I L] - Swift의 async/await에 대해서 알아보자 Swift의 async/await에 대해서 알아보자Swift 5.5부터 도입된 async/await는 기존의 비동기 처리방식인 DispatchQueue나 completionHandler를 사용해 처리했지만 더욱 직관적이고 관리하기 쉽게 만들어 주는 기능이다. 기존의 비동기 처리 방식과 비dongdida.tistory.com 이전에 async/await 에 대해서 알아보는 시간을 가졌지만 이번엔 Task는 어떤 역할을 담당하고 있는지 한번 살펴보자 TaskTask는 Swift Concurrency에서 비동기 작업을 나타내며, async/await 문법과 결합하여 동기 코드처럼 읽히면서도 ..
이번엔 실시간 데이터 스트리밍 로직을 한번 공부해보기 위해 WebSocket의 대한 개념과 Starstream에 대한 내용을 한번 알아보고자 한다!먼저 WebSocket은 클라이언트와 서버 간의 전이중 통신을 지원한다. 이 말의 뜻은 양측이 동시에 데이터를 주고 받을 수 있음을 의미하며, 실시간 채팅, 금융 데이터 스트리밍, 온라인 게임 등 빠른 응답이 필요한 앱에서 주로 사용되곤 한다. HTTP는 요청-응답 방식으로, 매번 새로운 연결을 생성하지만, WebSocket은 초기 핸드쉐이크를 통해 한 번 연결이 성립되면 그 연결은 지속적으로 유지되는 특징을 가지고 있다. 이로 인해 반복적인 연결 설정 비용이 줄어들고, 실시간 데이터 전송에 최적화 된다!! 아주 중요한 개념이니 꼭 잊지 말도록 하자. WebS..
이번에 OpenSMILE이라는 C언어 기반의 라이브러리를 연동해 기능을 구현해야하는 상황이 생겨 Objective-C 코드를 Swift에서 연결해 사용하는 방법에 대해 설명하려고 한다 🙂먼저 Swift에서는 C 또는 Objective-C 코드를 직접 “import”해서 사용할 수 없다 대신 Bridging Header라는 특별한 헤더 파일을 만들고 그 안에 연결하고 싶은 오브젝티브씨 파일을 입포트해 구문을 작성하면 Swift 컴파일러가 해당 언어들을 인식하여 Swift 코드에서 사용할 수 있게 된다. Bridging Header는 Objective-C에서 정의된 클래스, 함수, 상수들을 Swift에서 쓸 수 있게 해주는 다리역할을 한다고 생각하면 된다 🙂먼저 파일을 생성해주기 위해 Command+N ..
오늘은 fastlane를 활용해서 배포 자동화를 통해 테스트플라이트 혹은 배포 시 수월하게 할 수 있는 툴을 사용해보고자 한다. 또한 협업하는 과정에서 인증서를 개별적으로 관리하게 되면 번거로울 뿐 만 아니라 많은 문제가 생겨 시간을 잡아먹을 수 있는데 fastlane의 match를 활용해서 하나의 인증서로 팀원들도 배포자동화를 할 수 있는 환경을 한번 세팅해보자! fastlane 설치하기먼저 fastlane를 설치하기 위해 홈브루를 활용해 간편하게 설치한다brew install fastlane터미널에 넣어주면 간편하게 설치가 완료된다. 그 다음 프로젝트 루트로 이동해서 해당 하는 프로젝트에 fastlane를 초기화 해준다현재 fastlane를 적용할 프로젝트로 이동 후 → fastlane 초기화 fas..
요즘 Swift Concurrency에 대해서 공부를 하고 있는 중인데 그 중 MainActor의 역할이 아주 중요하게 작용하는 것 같아 한번 정리하고 넘어가고자 한다!!https://developer.apple.com/documentation/swift/mainactor/ MainActor | Apple Developer DocumentationA singleton actor whose executor is equivalent to the main dispatch queue.developer.apple.com 기본적으로 MainActor는 메인 스레드에서 실행되어야 하는 코드가 백그라운드 스레드에서 실행되지 않도록 보장하는 역할을 담당한다.이 역할과 동작방식에 대해서 한번 자세히 알아보도록 하자 Mai..
오늘은 현재 구현하고 있는 Chatbot 프로젝트에서 이미지를 올려 말하는 것 처럼 할 수 있고 이미지의 텍스트를 인식해 보여줄 수 있는 OCR 기능에 대해 찾아보던 중 Vision 프레임 워크가 있다는 것을 알게돼 한번 알아보려고 한다 🙂먼저 Vision 프레임워크는 머신 러닝 기술과 Swift의 동시성 기능을 결합해 앱에서 컴퓨터 비전 작업을 수행할 수 있다. 인간 혹은 동물의 신체 자세 또는 물체의 궤적을 추적한다거나, 텍스트를 인식 하거나, 눈 코 입 등 얼굴의 랜드마크를 감지하는 등 다양한 기능을 제공한다. 먼저 Vision 작업은 요청과 핸들러를 통해 실행되게 되는데 주요 핵심 클래스는 다음과 같다.VNImageRequestHandler : 정적 이미지 요청을 처리하는 클래스VNSequenc..
현재 HaruFit이라는 개인 프로젝트를 진행하면서 추후 유저 간의 커뮤니티 기능과 각각의 계정 별 저장된 운동 기록 및 정보들을 관리하기 위해 계정 정보를 관리하기 위해 사용자를 인증하는 과정을 추가해야 한다. 이를 위해 알아야 하는 개념인 JWT의 기본 개념에 대해서 먼저 정리해보도록 하자 머저 JWT는 JSON Web Token의 약자로 서버-클라이언트 간 인증을 위해 널리 사용되는 토큰 기반 인증방식이다! 서버가 로그인 성공 시 사용자 정보를 기반으로 토큰을 생성하면, 클라이언트는 이후 API 요청 마다 이 토큰을 HTTP 헤더에 포함해 보내게 되고, 서버는 이 토큰을 검증해 사용자를 인증하게 된다.JWT의 3가지 구성 요소Header어떤 해싱 알고리즘을 쓰는지JWT 타입{ "alg": "HS2..
오늘은 Swift Format , Swift Lint를 활용해 팀프로젝트 시 혹은 일관된 코드 스타일을 유지하고 좋은 코드 스타일을 유지하는데 큰 도움이 되는 방법을 알게 되어 한번 정리 해보고자 한다! 먼저 SwiftFormat, Swift Lint는 무엇이냐면 코드 스타일과 품질을 관리하는 도구! 라고 생각하면 된다. 각각 다른 성격을 가지고 있다!Swift Format : 코드의 일관된 스타일을 유지하고 가독성을 높여줄 수 있도록 자동으로 설정Swift Lint : 잘못된 코딩 스타일, 버그, 비효율적인 코드를 찾아 경고 혹은 오류를 통해 일관된 코드 스타일을 유지할 수 있도록 도와준다.둘 다 비슷하지만 다른 성격을 가지고 있어 나는 두개 다 사용하는 방식을 설정했다. 먼저 이 두가지는 SPM을 지..
오늘은 SwiftUI를 활용해 Pagination 하는 법을 구현하였다. 이 페이지네이션은 앱 개발을 진행하면서 어떤 항목에서 필수로 들어가야하는 부분인 것 같다. UIKit을 통해서 구현할때는 조금 애를 먹었는데 SwiftUI는 보다 손쉽게 구현이 가능한 것 같다. 먼저 페이지 네이션이 필요한 이유는 간단하게 말하자면 성능 최적화에 있다. 대량의 데이터를 한번에 로드하면 앱 성능 저하와 메모리 사용량이 증가할 수 있다. 예를 들어 1000개의 리스트가 업데이트 되어야하는데 이용자가 보는건 10개 정도라면 나머지 990개는 보이지도 않는데 호출이 되어버린다고 했을때 쓸모없는 메모리 사용량이 많이 증가하고 그 만큼 앱 성능은 떨어질 수 있기 때문이다. 또한, 한번에 많은양을 로딩하는 것이 아닌 스크롤 하면..
24년도에는 참 많은 일이 있었던 한해인 것 같다. 개발하겠다고 시작해서 지금 글을 쓰고 있는 12월 말까지 정말 열심히 살았던 것 같아 오랜만에 뿌듯한 한해다. 24년도에 내가 했던 목표와 그걸 얼마나 이뤘는지 그리고 25년도에는 어떤 목표를 가지고 성장해 나갈건지 한번 쭉 되짚어보자~! 2024년도에 들어서 개발을 하겠다고 마음먹은 뒤 나는 몇가지 목표를 세웠다. 첫번째. 적어도 1년은 아무리 힘들어도 포기하지 않고 끝까지 해보기두번째. 내가 해온걸 꾸준하게 기록으로 남겨두기세번째. 취업에 성공하기 크게보면 이렇게 세가지 목표가 있었다. 먼저 첫번째 목표는 지금 이 회고글을 쓰는 것과 같이 아무리 힘들고 벽이 느껴져도 포기하지 않고 끝까지 해왔다는 점이다. 나는 뭐든 초반 배움이 빠른 스타일이었다. ..