본문 바로가기

전체 글

(65)
WWDC 2021 Meet AsyncSequence 정리 어제 시청중이던 WWDC영상의 마지막에 Meet AsyncSequence에 대한 이야기가 나와 다음날 바로 정리하는게 좋겠다 생각이 들어빠르게 정리해본다. @mainstruct QuakesTool { static func main() async throws { let endpointURL = URL(string: "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.csv")! //비동기 처리를 순차적으로 처리해주는 지난번 글에 정리한 for try await 구문 for try await event in endpointURL.lines.dropFirst() { let va..
WWDC 2021 Explore structured concurrency in Swift 정리 WWDC 정리글 2차 어제 async await 영상을 정리했는데 관련 영상인 Swift의 구조화된 동시성 영상도 여유가 있을때 미리 정리해두려고한다. 프로그래밍은 시간이 지나면서 위에서 아래로 코드를 읽는 형태로 발전해나갔고 구조화잘되있고 정리가 잘 된 위 -> 아래 코드블럭은 개발자의 가독성이 높아진다. func fetchThumbnails( for ids: [String], completion handler: @escaping ([String: UIImage]?, Error?) -> Void) { guard let id = ids.first else { return handler([:], nil) } let request = thumbnailURLRequest(for: id) ..
WWDC 공부 정리 1차 Meet async/await in Swift WWDC를 하나씩 정리해야할 필요성을 느끼게 되고 현재 재직중인 회사에서 네트워크 계층을 리팩토링하는 과정중기존의 비동기코드의 completion Block을 async/await 새롭게 리팩토링하게되었고 async/await에 대한 지식이 필요하고 기존에는async/await는 completion Block을 간단하게 쓸려고 async/await 아니야? 정도만 알고있던 지식의 견문을 넓히기 위해 나 자신을 위해 블로그글을 작성합니다.  Swift async/await가 탄생한 배경 completion Block / clouser의 코드는 너무 복잡하고 개발자들을 힘들게 하였고 이를 문제삼아 async/await가 탄생되었다.그리고 completion Block / clouser 보다 더 안전하게 개발..
내부 DB 종류와 간단한 정리 Swift 에서 사용하는 내부 DB 대표적인 3가지를 정리해본다  1. 사용해본적은 없지만 옛날에 백앤드를 잠깐 공부했을때 들어본 SQLite DBMS SQLite는 C 언어로 구현되어 있습니다. 이는 다음과 같은 특징을 가지고 있습니다:경량화: 크기가 작고 메모리 사용이 적습니다.서버 없음: 클라이언트/서버 아키텍처가 없어서 앱 내에서 직접 사용됩니다.자체 포함형: 데이터베이스 파일 하나에 모든 데이터가 저장됩니다.트랜잭션 지원: ACID 특성(원자성, 일관성, 고립성, 지속성)을 지원합니다.크로스 플랫폼: iOS 뿐만 아니라 Android, Windows 등 다양한 플랫폼에서도 사용 가능합니다.ACID의 각 특성원자성 (Atomicity):트랜잭션의 원자성은 "전체 또는 아무것도"라는 의미입니다. 즉..
[모듈화] 프로젝트에 모듈화를 진행하면서 현재 진행중인 프로젝트에 Tuist를 도입을 진행한 후 대규모적인 구조 개편을 진행 할 수 있는 환경이 프로젝트내에 만들어져 본격적으로 모듈화를 진행을 할 수 있게되었다. 모듈화를 진행하게된 이유는 현재 진행하고있는 프로젝트의 iOS 개발자들의 수도 늘어나게되고 앱이 점점 거대해짐에 따라 한번에 프로젝트 전체를 파악하기에는 큰 무리가 있고 개발을 진행할때 걸리는 제약들이 너무많아 전체적인 개발속도, 안정성등이 떨어져 이 해당부분을 보완하기위해 모듈화를 진행하게되었다. 처음부터 모듈화를 하지 않고 추후에 리팩토링을통해 모듈화가 진행된 이유는 처음에는 현재 프로젝트의 앱이 이렇게 큰 규모의 앱이 아니였고 iOS 개발자들의 수가 급격하게 늘어난것도 1년정도 되지않았기 때문에 모듈화의 필요성이 따로 없었다. 왼..
2022년 늦은 개발자 회고록 2022년 회고록 2022년을 보내고 쓰는 회고 올해 있었는지, 어떤 목표를 이뤘는지 내년에는 무슨 목표를 가질지를 적어놓을 필요를 느껴 회고를 적는다 1월 작년 8월 휙고라는 킥보드 공유 서비스를 운영하는 회사에 입사하여 회사 내부의 iOS 프로젝트를 동시에 진행하며 꾸준한 리팩토링을 통해 iOS 앱의 퀄리티를 향상 시키는 과정을 진행하였고 회사 내부의 DevOps 개발자와 CI / CD 관련하여 꾸준한 리서치와 공부를 통한 iOS CI / CD 환경을 구축하기 위해 노력했다. 2월 iOS CI / CD 환경을 구축한 뒤 실질적으로 iOS 프로젝트에서 원활한 CI / CD를 구축하기 위해 물리 Mac이 필요하다는 것을 인지하여 githubAction을 이용한 가상머신에서 CI / CD를 구축하는 것으로..
[Tuist] 회사 프로젝트에 Tuist 를 도입하고 난 후 주저리주저리 블로그에 글을 얼마만에 쓰는 건지 모르겠다 한동안 회사에 적응하고 회사에 Tuist를 도입하는 담당자가 되어서(내가 해보겠다고 지원했다) 무사히 마무리를 하고 그 도입기? 같은것을 간단하게 적어볼려고한다. iOS 프로젝트를 팀단위로 관리하고 있는조직이라면 다들 .xcodeproj의 깃 컨플릭으로 고생해본적 있을 것이다. 그래서 많은 iOS 개발자들이 이러한 불편한점을 개선하기위해 많은 기술들이 연구및 도입이 되고있었고 과거에는 XcodeGen 요즘은 한국에서 Tuist 라는 (민소네님이 적극적으로 홍보한) 프로젝트 관리 툴이 사용으로 .xcodeproj의 깃 컨플릭 을 해결한 팀들이 많다고 들었다. 나도 이번에 새로운 회사에 들어가 랜딩기간의 프로젝트 일환으로 특정기능들을 리팩토링하고, 특정페이지 전체를..
ReactorKit Pulse 분석 기존의 Reactor Kit 에서 state의 값을 사용하게 되면 모든 mutation에 반응하여 state 값이 트리거가 생기게 되고 해당 실행되게 된다. 그래서 의도하지않는 state에 따른 함수 실행을 막기위해 아래와 같이 .distinctUntilChanged() 을 사용하여 방지하였다. reactor.state.map { $0.overseasEmpty } .distinctUntilChanged() .filterNil() .bind(with: self, onNext: { owner, data in owner.myListPager.setEmptyView(index: FavoriteTabItem.overseaRoom.index) }).disposed(by: disposeBag) 매번 새롭게 코드..