최근 챗봇을 구현하는 과정에서 단일 프로젝트 내 클린아키텍처만 적용해 구현 하는데, 진행을 하다보니 구현 기능들이 추가되었고 점점 크기가 커져 나가는 것을 느꼈다. (다른 큰 프로젝트 비해서는 아주 작은 편이지만..) 모듈화에 관련한 스터디를 진행하게 되면서 이참에 기능 단위로 로직을 모듈화해 다른 프로젝트에서도 재사용성을 높히는 방법을 한번 적용해보려고 한다. 모듈화 방향성?모듈화를 진행하면서 느끼는 건 어떤 방식으로 모듈화를 진행하는지에 대한 정답은 딱 정해져 있지 않은 것 같다. 그때 그 프로젝트, 개발 환경 등 각 요소에 맞춰 어떤 방향으로 모듈화를 진행할지, 유지 보수, 재사용성에 맞춰 진행을 방식도 있고, 협업 시 기능 구현을 나눠 충돌없이 개발이 진행 가능한 환경을 조성하던지.. 등등 아래의..
Mash-Up 동아리 활동이 슬슬 시작되면서 프로젝트 팀 구성은 아직 되지 않았지만 스터디가 개설되었다. 나는 두가지의 스터디에 참여하게 되었는데 Tuist를 활용한 모듈화 스터디와 TCA 이렇게 두가지를 선택했다. 다른 동료들은 어떻게 모듈화를 해 나가는지, TCA를 공부할때 혼자 공부하니 잘 되지 않았던 것을 이번 기회에 둘 다 얻어가고싶어 신청하게 되었다. 먼저 오늘은 본격적인 모듈화 스터디가 시작되기 전에 어떤 방식으로 모듈화가 이뤄지는지, 모듈화 아키텍처가 왜 필요한지, 강점은 무엇인지 등 아주 기초적인 개념 정리를 하기 위해 블로그를 작성하게 되었다. 그럼 이제 하나하나 기초부터 알아보자 모듈화 아키텍처란?모듈화 아키텍처는 애플리케이션의 기능과 책임을 여러 독립된 모듈로 분리하여 개발하는 설계..
오늘은 현재 챗봇 기능을 구현하고 있는 과정에서 실제 현업에서는 이렇게 진행되진 않지만 다이렉트로 GPT API 와 연동해 챗봇 기능을 구현하는 방식에 대해 작성하려고 한다. 일단 기능만 구현해둔 뒤 추후 서버와 연결하여 값을 받는 형태로 진행하기 때문에 클린아키텍처 구조를 활용해 별도의 네트워크 연결 라우터를 두고 해당 라우터를 Moya를 활용해 보다 간편하고 유지보수 및 추후 수정사항이 용이하도록 구조를 짜 구현하게 되었다. 먼저 Moya란 무엇인가!!Moya는 Swift에서 네트워크 요청을 간편하게 관리하기 위해 사용되는 라이브러리이다! Alamofire를 내부적으로 사용하여 HTTP 요청을 수행하지만, TargetType 프로토콜을 통해 API의 각 엔드포인트를 구조적으로 관리할 수 있게 해주는 ..
SwiftUI를 사용하면서 한번씩 네비게이션 플로우 구현이 UIKit에서 사용했을때보다 다소 불편하고 적용이 어렵다고 느껴지는 경우가 있었다. 이 글을 정리하면서 어떤 방식으로 SwiftUI에서 네비게이션을 적용하면 좋을지 한번 알아보도록 하자 기존 Navigation 방식이전 방식에서 SwiftUI는 NavigationView, NavigationLink를 사용해 네비게이션을 통한 뷰 이동을 구현했다. 하지만 이 방식에는 몇가지 문제가 있다고 느껴졌는데 먼저 NavigationView 내부에 내장된 네비게이션 상태는 암묵적인 상태로 관리되었기 때문에 프로그램적으로 뒤로가기 , 특정화면으로 이동 등 과 같은 제어가 다소 어려운 측면이 있었다. 예를 들어 동적 컨텐츠를 다루거나 딥링크로 특정 화면으로 이동..
2025.02.28 - [◽️ Programming/iOS] - Static Dispatch & Dynamic Dispatch (1/2) Static Dispatch & Dynamic Dispatch (1/2)오늘은 Static Dispatch & Dynamic Dispatch의 대해 개념적으로 이해를 하고 넘어가보자 이번 면접을 통해 해당 개념을 질문 받았는데 명칭이 생소하다고 느껴서인지 어느정도 개념은 알고 있었지만 제대dongdida.tistory.com 그럼 오늘은 스태틱 디스페치와 다이나믹 디스페치의 두번째 알아보는 시간!! 이전에 내용을 참고하고 추가적으로 해야할 내용이 있는 것 같아서 또 쓰게 됐다 이 내용을 쓰기전에 먼저 Overloading과 Overriding의 차이에 대해서 제대로 명..
오늘은 Static Dispatch & Dynamic Dispatch의 대해 개념적으로 이해를 하고 넘어가보자 이번 면접을 통해 해당 개념을 질문 받았는데 명칭이 생소하다고 느껴서인지 어느정도 개념은 알고 있었지만 제대로 정리가 되어있지 않아 아예 대답을 하지 못했다 ㅠㅠ 끝나고 나와서 찾아보니 아~ 맞다 이런 느낌.. 그래도 이제라도 정리하고 제대로 정리하는 기회를 가져보자! 먼저 Static Dispatch & Dynamic Dispatch에 들어가기 전에 Dispatch에 대해서 먼저 짚고 넘어가자면 메소드나 함수 호출 시점에서 어떤 구현이 실행될지를 결정하는 어떠한 메커니즘이다 정도로 알고 넘어가면 될 것 같다. 내가 호출한 함수를 컴파일 타임에 결정하냐, 런타임에 결정하냐에 따라 방식이 정해지는..
https://developer.apple.com/documentation/swift/sendable/ Sendable | Apple Developer DocumentationA thread-safe type whose values can be shared across arbitrary concurrent contexts without introducing a risk of data races.developer.apple.com SendableSendable은 Swift Concurrency 환경에서 여러 스레드나 액터 간에 안전하게 값을 전달할 수 있음을 보장하기 위한 프로토콜이다. 이는 데이터 경합(data race)과 관련된 문제를 방지하고, 동시성 안전성을 확보하는데 중요한 역할을 한다. Send..
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 ..