일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 Native
- 뷰 생명주기
- privacyinfo.plist
- 360도 이미지
- react
- panorama view
- 뷰 정체성
- data driven construct
- SwiftUI
- launch screen
- 명시적 정체성
- 360도 뷰어
- 리액트 네이티브
- 구조적 정체성
- React-Native
- 리액트
- react-native-fast-image
- ssot
- 앱 성능 개선
- 파노라마 뷰
- native
- launchscreen
- 라이브러리 없이
- 네이티브
- 360도 이미지 뷰어
- requirenativecomponent
- Android
- 스켈레톤 통합
- ios
- 3b52.1
- Today
- Total
목록2025/01 (10)
Neoself의 기술 블로그
1. 기존 시스템의 한계점초기 도서 매칭 시스템은 GPT가 제공하는 도서 정보의 정확성을 전제로 설계되었습니다. 시스템은 단순히 제목, 저자, 출판사 간의 텍스트 유사도 비교에만 중점을 두었습니다. 하지만 테스트 과정에서 GPT가 실제로 존재하지 않는 도서를 추천하는 케이스가 상당수 발견되었습니다.2. 데이터 기반 개선 전략 수립2.1. GPT 오류 케이스 패턴 분석GPT의 잘못된 도서 추천 케이스들을 분석한 결과, 각 속성별 유사도 점수에서 특징적인 패턴이 발견되었습니다. 다음은 존재하지 않는 책이 반환되어 잘못 매칭된 대표적인 케이스들입니다:// 존재하지 않는 책 반환으로 인해 잘못 매칭된 책 케이스들[0.33, 1.00, 0.00], // 심리학의 모든 것[1.00, 0.00, 0.00], // 심..
저번 게시글에서는 도서 매칭 시스템에 대한 테스트 환경 구축을 비롯해 설계를 진행하였으며, 해당 게시글에서는 본격적인 구현 과정을 다루고 있습니다.1. 도서 매칭 시스템 개요2. 검색 결과 반환 로직 구현 - 메서드 구현 - 테스트 환경 구축 - 트러블 슈팅3. 엣지케이스 처리를 통한 검색 결과 반환 확률 개선 - 빈 스트링 값 처리 - 부제가 잘못된 케이스 처리 - 영문 책 한글 제목 검색 문제 해결 - 코드 캡슐화4. GPT 연동 및 유사도 측정 구현 - ChatGPT API 연동 - 검색 결과 유사도 연산 - 최종 매칭 로직 구현5. 테스트와 성능 개선 - ExactMatchStrategy와 ContainsStrategy 구현 - 레벤..
tearDown(): 에러를 throw할 수 없습니다tearDownWithError() throws: throws 키워드가 있어 에러를 throw할 수 있습니다tearDownWithError(): Xcode 11.4부터 도입된 새로운 메서드입니다 Codable 프로토콜: Encodable과 Decodable 프로토콜을 함께 구현한 타입별칭(typealias) Encodable: 데이터를 JSON Plist 등의 형식으로 변환 가능한 프로토콜*Encoding: 데이터를 특정 형식으로 변환하는 과정(ex. String을 URL이나 Base64로 변환)struct User: Encodable { let name: String let age: Int // JSON으로 인코딩 let..
ChatGPT api를 활용해 사용자가 제시한 질문에 적합한 책을 추천하는 로직을 개발하면서 발생한 기술 도전과제의 해결과정을 정리한 글입니다.ChatGPT 반환값의 후가공 과정에 대한 이해도를 높히고자 하는 개발자분들께 도움이 되었으면 좋겠습니다. 0. 배경구현이 필요한 핵심로직은 아래 2개로 정리할 수 있습니다.책 추천: AI를 활용해 사용자의 질문에 답이 될 수 있는 책을 추천하고, 앱 내 서재 탭에 추가할 수 있도록 하기책 추가: 사용자가 책표지를 촬영할 경우, OCR촬영된 책 앱 내 서재 탭에 추가하기위 기능을 구현하기 위해선 결국 아래와 같은 기술적 고민으로 이어졌습니다.1. 사진촬영을 통해 책을 인식하는 로직2. ChatGPT로 책을 추천받는 로직1번과 2번 로직의 경우, ChatGPT만을 ..
1. 동시성동시성 프로그래밍은 엄밀히 따지면, 동시성과 병렬성을 모두 포함하는 개념이라고 볼 수 있습니다. 즉, 여러 작업을 동시에 처리하는 프로그래밍 방식입니다. 여기서 동시성 프로그래밍(Concurrent Programming)과 병렬성 프로그래밍(Parrallel Programming)의 가장 큰 차이는 무엇일까요? 둘다 여러 작업을 동시에 처리한다는 방향을 공유하고 있지만, 동시성이 한번에 하나의 작업을 번갈아가며 처리를 하는 방식이라면, 병렬성은 멀티코어 환경을 바탕으로 여러작업을 실제로 동시에 처리하는 방식을 일컫습니다.즉 동시성 프로그래밍은 소프트웨어적 쓰레드에서 동시에 일을 하는 개념이기 때문에, 보다 개발자 개입이 중요한 처리방식입니다. 아래 다이어그램을 보면 동시성과 병렬성의 동작방식..
이 글에서는 제가 클린 아키텍처를 공부하고, 이를 실제 프로젝트에 적용하면서 겪은 경험을 공유하고자 합니다. 클린 아키텍처 자체에 대한 이해도를 높히고 싶으신 개발자 분들께 도움이 되었으면 합니다. 배경Todo 앱을 개발하면서 가장 신경 쓴 부분은 오프라인 상태에서도 앱이 정상적으로 동작하는 것이었습니다. 사용자가 지하철에서 Todo를 추가하거나 수정하더라도, 네트워크가 복구되면 자연스럽게 서버와 동기화되어야 했죠. 이를 위해 CoreDataSyncService라는 동기화 전담 서비스를 구현했습니다. 하지만 시간이 지날수록 이 서비스는 점점 더 많은 책임을 떠안게 되었습니다. CRUD 작업마다 로컬 저장소 처리, 네트워크 요청, 위젯 업데이트까지... 모든 로직이 긴밀하게 얽혀있었죠.func update..
RxSwift는 ReactiveX 프로그래밍 패러다임을 Swift로 구현한 라이브러리입니다. 이 글에서는 RxSwift의 핵심 컴포넌트들이 어떻게 상호작용하며 동작하는지 실제 소스 코드를 통해 살펴보겠습니다. 아래 사진은 RxSwift 라이브러리의 내부 구현파일들의 의존성을 표현한 그래프입니다. 해당글을 통해 다루게 되는 파일들은 검정색 및 빨간색 줄처리하였습니다. RxSwift의 기본이 되는 타입 계층 구조는 다음과 같습니다:1. 핵심 타입 계층 구조1.1. ObservableConvertibleType모든 Observable 타입의 기본이 되는 프로토콜입니다.public protocol ObservableConvertibleType { associatedtype Element func as..
앱이 실행될 때, 성능에 영향을 주는 요소는 아래와 같이 나열해볼 수 있습니다.AllocationReference CountingMethod Dispatch 0.배경먼저 Swift가 제공하는 Value 타입과 Struct 타입을 먼저 설명드리겠습니다.값 타입 (Value Type)참조 타입 (Reference Type)structClassenumClosure기본 데이터 타입(Int, Double, String, Bool 등)Function컬렉션 타입들(Array, Dictionary, Set) 튜플 이 두 타입은 아래와 같은 차이가 있습니다. 1.1 메모리가 할당되는 위치값 타입: 실제 데이터가 Stack에 저장 참조 타입: 실제 데이터는 Heap에, 8바이트(운영체제 워드길이)길이의 데이터의 주소는 ..
안녕하세요. 본 게시글은 RxSwift 라이브러리의 공식문서 내용을 정리한 글입니다. RxSwift는 ReactiveX 라이브러리를 Swift 문법으로 사용할 수 있도록 제작된 라이브러리입니다.ReactiveX는 뭔가요?ReactiveX는 Microsoft사에서 제작된 라이브러리이며, 아래 문장으로 라이브러리를 소개하고 있습니다.옵저버블 스트림으로 비동기 프로그래밍을 돕는 API비동기 프로그래밍과 옵저버 패턴을 사용하기 쉽도록 돕는 라이브러리라고 이해하면 쉬울 것 같습니다.ReactiveX 배경ReactiveX의 동작방식은 Observable이 발행하는 하나 또는 연속된 항목에 Observer가 반응한다는 옵저버 패턴 기반의 동작원리에서 부터 시작됩니다.코드가 작성된 순서에 따라 실행되고, 완료되는 일..
시간복잡도에 가장 큰 영향을 주는 N값의 범위가 1let N = Int(readLine()!)!var arr = [Int]()for _ in 0..)print(arr[4])하지만, 위 코드로 성공했으면 실버 3이 아니겠죠. 위 코드의 시간복잡도는 아래와같이 분석해볼 수 있습니다. 1. 입력 처리 부분: 이중 For문으로 append() 실행O(N^2) 2. 정렬 부분 : sort()여기서 sort 메서드느 O( n log n )를 가지며, arr 크기는 N^2입니다O(N^2 * logN^2) = O(N^2 * 2logN) = O(N^2 * logN) 따라서 전체 시간복잡도는 아래와 같습니다.O(N²) + O(N² log N) + O(1) = O(N² log N) 그다음으로 시도해본 것은 우선순위 큐를 ..