일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 라이브러리 없이
- react
- 리액트 네이티브
- 명시적 정체성
- data driven construct
- 앱 성능 개선
- 3b52.1
- 뷰 생명주기
- 구조적 정체성
- launchscreen
- 스켈레톤 통합
- panorama view
- 360도 뷰어
- React Native
- ios
- 파노라마 뷰
- react-native-fast-image
- SwiftUI
- 리액트
- 360도 이미지
- Android
- launch screen
- React-Native
- 360도 이미지 뷰어
- 네이티브
- 뷰 정체성
- native
- requirenativecomponent
- ssot
- privacyinfo.plist
- Today
- Total
목록2024/12 (8)
Neoself의 기술 블로그
오늘은 제가 출시한TyTE라는Todo 관리 앱에 오프라인 동기화 시스템을 도입하면서 배운 점들을 공유하고자 합니다. 특히 데이터 무결성 보장과 불변성 원칙을 지키면서도 사용자 경험을 해치지 않는 구조를 설계하는 과정에서의 고민들을 다뤄보겠습니다. 0. 기존 구현사항기존 TyTE의 모든 비즈니스 로직은 모두 네트워크 통신에 의존하고 있었습니다. 따라서, 네트워크 연결이 불안정하거나 없는 상황에서는 사용자가 할 일을 수정하거나 삭제하는 등의 기본적인 CRUD 작업도 수행할 수 없었습니다. 그러던 중, 일정관리를 보조하는 Notion 앱에서는 오프라인 상황에서도 일정 수정 및 이동을 지원하는 것을 보게 되었습니다. Notion을 사용하면서 오프라인 상황에서도 끊김 없이 작업할 수 있는 UX가 얼마나 중요한지..
이 글을 통해 전동 킥보드 대여 서비스 iOS 앱을 팀원들과 함께 개발하면서 겪었던 경험과 기술적 고민들을 공유하고자 합니다. 가장 먼저 전동 킥보드 대여 서비스를 만들기 위해 사용했던 기술 스택입니다.1. 기술 스택UI Framework: UIKit, SnapKitArchitecture: Clean Architecture + MVVM/MVCState Management: CombineDatabase: CoreDataMap Services: MapKit, CoreLocationSecurity: CryptoKit (비밀번호 암호화)2. 아키텍처 설계2.1 Clean Architecture와 각 레이어프로젝트를 시작하면서 가장 큰 고민은 아키텍처 설계였습니다. 초기에는 단순 MVC 패턴으로 시작했지만, 다음..
이 글은 제가 개발한 TyTE 앱의 캘린더 위젯 구현 과정을 공유하기 위해 작성한 글입니다. WidgetKit을 처음 사용하고자 하는 개발자에게 도움이 되었으면 합니다. 1. WidgetKit의 핵심 구성요소 이해 struct CalendarWidget: Widget { let kind: String = "CalendarWidget" var body: some WidgetConfiguration { ... }}가장 먼저 위젯을 구현하기 위해서는 아래 요소들로 구성된 Widget 프로토콜을 최상단 뷰에 상속해야합니다.- 필수) WidgetConfiguration을 반환하는 body 속성- 필수) kind 속성: 위젯의 고유 식별자 역할 / 인스턴스 구분, 상태 관리, 업데이트 처..
이 글은 SwiftUI 관련 WWDC 세션들의 주요 내용을 기초부터 심화까지 포괄적으로 다루고 있습니다. SwiftUI를 처음 접하시거나, 익숙치 않은 분들에게 도움이 되었으면 합니다. 0. 목차더보기1. SwiftUI 소개1.1 SwiftUI의 핵심 특징1.2 저수준 API1.3 앱 정의에도 사용되는 SwiftUI2. 선언형 UI의 특성2.1 예측 가능한 상태 관리2.2 스레드 안정성2.3 성능 저하 요소 최소화2.4 넓은 범위의 적응성(Adaptivity)3. SwiftUI의 상태 관리3.1 상태 기반 UI 뷰 업데이트 사이클3.2 Property Wrapper와 의존성 관리3.3 Single Source of Truth (SSOT)3.3.1 데이터 모델과 UI(ViewModel)의 분리3.3.2 데..
이글은 Tree구조의 알고리즘 문제를 풀고자할때, 제가 취했던 접근방식들을 정리하고자 작성한 글입니다. 미숙한 점이 아직 많지만, 정리가 되는대로 업데이트를 진행하고자 합니다. 알고리즘을 풀기 이전 가장 먼저 정해야할 것은 탐색 방식을 결정하는 것입니다.DFS: 경로찾기, 사이클 탐지와 같이 한 경로를 끝까지 탐색한 후 다른 경로를 탐색하는 방식의 경우 사용BFS: 최단 경로 문제나 레벨 단위 처리와 같이 같은 레벨의 노드들을 먼저 탐색하는 방식의 경우 사용탐색방식이 결정되었다면, 어떤 패턴을 사용할 수 있는지 확인합니다.Bottom-up 접근최하단 노드부터 루트로 올라가는 방식:트리의 높이 구하기, 트리의 지름구하기와 같은 케이스에 유용Top-down 접근경로의 합구하기, 레벨 순회와 같이 루트에서 시..
컴퓨터 시스템의 구성요소CPU컴퓨터의 두뇌 역할을 하는 중앙처리장치로, 실제 연산과 명령어 처리를 담당합니다. 산술논리연산장치(ALU)와 제어장치(CU)로 구성되어 있습니다. RAM주기억장치로, CPU가 직접 접근할 수 있는 고속의 휘발성 메모리입니다. 실행 중인 프로그램과 데이터를 임시로 저장합니다. 저장장치HDD나 SSD와 같은 비휘발성 메모리로, 전원이 꺼져도 데이터가 유지됩니다. CPU와 메모리 간의 데이터 교환은 버스 시스템을 통해 이루어집니다. 여기서 버스는 전기적 신호를 전달하는 물리적 와이어들의 집합이라고 이해하면 쉽습니다. 버스는 아래와 같은 유형으로 나뉩니다.데이터 버스: 양방향 통신을 지원하며, CPU 및 다른 장치들 사이의 실제 데이터를 전송합니다.주소 버스(Address Bus):..
최근 iOS 앱의 소셜 기능 개발 과정에서 복잡한 API 호출 체인을 다루게 되었습니다. 사용자의 피드를 구성하기 위해 여러 API를 순차적으로 호출하고 데이터를 조합해야 했는데, Combine을 사용한 기존 접근 방식에서 여러 한계점을 경험했습니다. 이 글에서는 우리가 겪은 문제점들과 Swift Concurrency로의 전환을 통해 이를 해결한 과정을 공유하고자 합니다. 1. 기존 코드의 구조와 한계점소셜 피드를 구현하기 위해 다음과 같은 연쇄적인 API 호출이 필요했습니다:func fetchFriendsWithCalendarData(yearMonth: String) { isLoading = true // 1. 친구 목록 가져오기 socialService.getFriends() ..
앱의 QA 과정 도중, TagEditView에서 태그를 수정하게될 경우, 로딩 인디케이터가 무한히 표시되며 다른 상호작용이 동작하지 않는 특이한 현상을 발견했습니다. 로딩 인디케이터가 표시된 이후, 다른 상호작용에 의한 뷰업데이트가 진행되지 않았던 것을 미루어 보았을때, UI 업데이트를 책임지는 메인쓰레드를 다른 작업이 항시 점유하고 있다는 것을 예상해볼 수 있었습니다. 따라서 XCode에서 제공하는 Instrument 도구의 Time Profiler 기능을 활용해 메인쓰레드를 점유하는 작업이 무엇인지 프로파일링해보았습니다.1. XCode Instrument 툴을 활용한 뷰 재구성 이슈의 시작점 파악1.1 쓰레드 점유 작업 확인그 결과, TagEditView에서 태그정보에 대한 변경이 완료되는 17초 ..