먼저 채팅 서비스를 구현해야한다고 했을때 다들 대부분 WebSocket을 사용해야하는 것은 알고있지만 어떤 이유로 웹소켓을 활용해야하는지 비교를 통해 개념을 잡아보고 iOS 에서는 어떤 방식을 사용해서 웹소켓을 구현할 수 있는지 구현 전략에 대해서 알아보고자 한다.HTTP 방식과 WebSocket의 차이 통신 방식요청 → 응답 (단방향)지속 연결 (양방향)연결 유지요청마다 새로 연결한 번 연결 후 유지데이터 전송 단위바이트 기반메시지 단위 (텍스트/바이너리)지연시간높음 (요청/응답 반복)낮음 (이벤트 실시간 처리)메시지 지향 (Message-Oriented)HTTP는 바이트 데이터를 주고 받는 방식이라 데이터 경계를 직접 구분해야 한다.WebSocket은 프레임 → 메시지로 구조화 되어있어 데이터를 한건..
오늘부터 새로운 엘런강의를 들으면서 Swift Concurrency에 대해 다시 한번 제대로 공부해 보려고 한다. 그전에 먼저 Task가 뭔지 이전에 그냥 사용해왔던 개념들을 짚어보면서 어떤 방식으로 구현되는지 등 개념적인 측면에서 한번 다시 작성해보고 넘어가보자 먼저 가장 기본이 되는 Task에 대해서 정리해보면 Task는 단순 비동기 코드가 아니라 비동기 함수를 실행하고, 그 실행 상태를 보존하며, 중단과 재시작이 가능한 일급 객채! 라고 생각하면 된다. 그렇다면 왜 Task가 필요한 걸까loadUser { user in fetchPosts(for: user) { posts in updateUI(with: posts) }}기존에 Swift에서는 Completion handler..
요즘 회사일,, 사이드 프로젝트,, 공모전까지.. 정말 너무 바쁜 한달을 보내다보니 블로그 글을 너무 오래 못쓴것같다.. 오늘은 프로젝트를 진행하면서 Swinject을 활용한 DI를 구성하는데 궁금한 내용이 있어 이 부분에 대해 공부를 좀 해보려고 한다. 먼저 왜 DI (Dependency Injection) 이 필요한 걸까? 문제 상황 예시를 한번 보자// ❌ 강한 결합 - 수정하기 어려운 코드class UserService { private let networkManager = NetworkManager() private let coreDataManager = CoreDataManager() func fetchUser(id: String) -> User? { // ..
요즘 프로젝트를 진행하면서 너무 정신없이 바쁘단 핑계로 아주 오랜만에 블로그를 남긴다.. 영상 챗봇 관련 내용을 진행하면서 AVAudioSession을 다루는데 영상을 킨상태로 음성을 다루자니 자동으로 ducking되는 현상때매 꽤나 애먹었던 기억이 있어서 AVAudioSession은 어떤 것이고 무엇을 다루고 설정할 수 있는지 정리 해놓으려고 한다. 먼저 iOS에서 AVAudioSession은 앱과 iOS 오디오 시스템인 Core Audio 사이에서 중개자 역할을 담당한다. 여기서 어떤 방법을 통해 연결하는지 알아보도록 하자AVFoundation계층에서 AVAudioSession은 AVFoundation 프레임워크 안에 구현된 클래스이다. 앱은 AVFoundation을 통해 오디오 세션을 구성하고 활성..
Tuist를 활용해 카드 정보를 API로 호출 받아 관리하는 프로젝트를 진행하게 되었는데 이전에 학습해 둔 Tuist를 바탕으로 각 모듈을 나눠 기능을 구현하게 되었다. 네트워크 기능을 제외한 모든 기능을 모듈 별로 구현한 다음 마지막으로 네트워킹을 넣게 되었는데 이 시점에서 Duplicate Symbol Error가 발생하여 해결하기 까지 아주 골치가 아팠다.. 하지만 결국 원인을 알게 되었고 해결 했으니 잊지 않기 위해 그 과정을 한번 정리해보자 Duplicate Symbol Error란 무엇인가Tuist를 활용하여 모듈을 나눠 개발을 하다가 빌드 과정에서 이런 오류를 만나게 될 때가 있다Duplicate symbol '_ExampleFunction' in: /path/ModuleA.o /..
이번에는 이전에 Tuist를 활용해 모듈화를 구성했다면 추후 모듈화를 자동화하여 편리하게 사용할 수 있는 환경 세팅을 해주기 위해 Scaffold로 자동화를 해주고 그 이후 외부 Dependency를 추가해보려고 한다. 먼저 Scaffold를 적용시켜보자! Tuist를 통해 모듈화하는 이전 세팅이 완료된 상황에서 진행해 보려고 한다.우선 Manifests/Tuist/Templates/Feature 디렉토리까지 만들어 둔 다음 Feature 내부에 Sources 그룹과 Feature.swift 파일을 만든다!mkdir -p Tuist/Templates/Feature/Sources터미널을 활용해 만들어주면 한번에 완성이 된다.그 다음 Feature.swift 파일 내 템플릿 파일을 구성해 주어야 한다.imp..