<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Tilltue</title>
  <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0" />
  <author>
    <name>tilltue</name>
  </author>
  <subtitle>Ios 개발자입니다</subtitle>
  <id>https://brunch.co.kr/@@1YN0</id>
  <updated>2016-05-20T04:06:53Z</updated>
  <entry>
    <title>AI Agentic Coding - Agentic Coding 경험과 앞으로의 개발자 역할</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/89" />
    <id>https://brunch.co.kr/@@1YN0/89</id>
    <updated>2025-10-10T01:36:12Z</updated>
    <published>2025-10-09T23:00:39Z</published>
    <summary type="html">본격적으로 AI 와 함께 코딩한건 2025년 3월로 기억한다. 그때 나는 처음으로 Cursor 를 사용했고, 이후 5월부터는 Claude code CLI, 그리고 GPT-5 모델이 나왔을 때부터는 Codex CLI까지 병행하게 됐다. 이 글은 그동안 AI와 함께 코딩하며 쌓은 경험과, 그 속에서 얻은 교훈과 시행착오를 정리해보려 한다  2025년 2월 vi&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2F52Fa0XqHz9SFwGi2x8tWlfxY2_0.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>테스트 자동화 활용 - Github Actions</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/85" />
    <id>https://brunch.co.kr/@@1YN0/85</id>
    <updated>2022-03-23T23:39:17Z</updated>
    <published>2022-01-31T03:02:36Z</published>
    <summary type="html">* 이 글은 Swift 5를 기준으로 작성했다. * 글의 목적: &amp;quot;클라이언트 개발자의 TDD&amp;quot; 매거진은 그동안 테스트를 위해 학습을 했던 것을 공유하고자 한다.   테스트 자동화에 대해 살펴보자. 테스트 작성을 팀 단위로 실천하기 위해서 즉각 고려해야 했던 것은&amp;nbsp;자동화 테스트였다. 프로젝트 크기가 크지 않은 상황에서는 로컬 빌드와 테스트 수행에 비용이 얼마&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FapkJdooeR5wD4ui5WwSX2dKmzy0.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>테스트 시작하기 #2 - 인터페이스 확장 시 테스트 코드의 변경</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/84" />
    <id>https://brunch.co.kr/@@1YN0/84</id>
    <updated>2022-01-30T03:47:51Z</updated>
    <published>2022-01-29T13:57:35Z</published>
    <summary type="html">* 이 글은 Swift 5를 기준으로 작성했다. * 글의 목적: &amp;quot;클라이언트 개발자의 TDD&amp;quot; 매거진은 그동안 테스트를 위해 학습을 했던 것을 공유하고자 한다.  지난 글('테스트 시작하기') 에 이어  로거의 다음 요구사항에 대한 테스트를 작성해보자. &amp;quot; 로그 레벨, 종류 ( network , 일반 등), 검색 키워드에 따라 필터링되도록 한다. &amp;quot;  로그&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FB2bxP3BW4pjzKJmmLZI-Vm-PYRE.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>테스트 시작하기 - 무엇을 테스트해야 하며 어떻게 시작해야 할까?</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/82" />
    <id>https://brunch.co.kr/@@1YN0/82</id>
    <updated>2022-01-27T11:41:21Z</updated>
    <published>2022-01-15T14:46:56Z</published>
    <summary type="html">* 이 글은 Swift 5를 기준으로 작성했다. * 글의 목적: &amp;quot;클라이언트 개발자의 TDD&amp;quot; 매거진은 그동안 테스트를 위해 학습을 했던 것을 공유하고자 한다.   테스트 대상에 대한 고민  테스트를 시작했을 때 가장 첫 번째 고민은 &amp;quot;무엇을 테스트해야 하는가?&amp;quot;였다. 사실 우리가 작성한 코드는 모두 테스트 대상이다. 하지만 아직 테스트에 능숙하지 않다면 &lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FRec6GGc_nNaRhhedmzo5okq2vOk.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Custom Publisher 만들기 - Swift Combine</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/79" />
    <id>https://brunch.co.kr/@@1YN0/79</id>
    <updated>2022-12-05T04:16:57Z</updated>
    <published>2021-12-05T17:10:48Z</published>
    <summary type="html">* 이글은 Swift 5 기준으로 작성했다.   비동기 작업을 Combine Puslisher 로 만들고 싶다면 어떻게 만들어야 할까? 아주 좋은 예제인 Alamofire 의 Publisher 를 살펴보자 https://github.com/Alamofire/Alamofire/blob/e0edbf64d4a69327ffb8e0f7cfe4e5a4fe36d124/&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FDkyyjNUVNcdYSXnEz_ikG2PJkV4.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Swift의 lazy var - lazy var ,  global var, Type Properties</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/71" />
    <id>https://brunch.co.kr/@@1YN0/71</id>
    <updated>2023-01-12T00:23:36Z</updated>
    <published>2021-06-03T16:47:01Z</published>
    <summary type="html">Swift Document의 Properties의 lazy var를 설명하는 부분에 note 가 있다. Swift의 lazy var는 멀티 thread에서 접근시 이니셜라이즈가 한번 불릴것을 보장하지 않다는 내용이다.  의문의 시작은 이렇다..  Kotlin In Action 책을 읽다가 아래와 같은 내용을 알게 됐고 Kotlin에서는 기본적으로 lazy &lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fn7Pqz8nJ9zjmMAeIS5AzdFcVE-8.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>회고: 현업에서 TDD 실천하기 #1 - 회사 프로젝트에서 TDD 실천하기</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/69" />
    <id>https://brunch.co.kr/@@1YN0/69</id>
    <updated>2021-10-28T08:36:50Z</updated>
    <published>2021-05-16T15:43:57Z</published>
    <summary type="html">2018년 6월의 글이다.  글의 말미에 &amp;quot;약 1년간 TDD를 공부해왔는데, 무엇보다 현업 프로젝트에 TDD를 도입하게 되었던 것이 가장 큰 수확이다. 개인 프로젝트에서 많이 연습한 내용을 바탕으로 이제 현업 프로젝트에서 TDD를 수행할 텐데, 이 과정에서 얻을 수 있는 것들이 어떤 것들이 있었는지, 회고할 날을 기대해 본다.&amp;quot; 이렇게 언급했었다.  약 3&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fhb4btFHpzrfUhQDRE-zMidR3Ce4.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Swift Combine 변형 Operators - collect, map, replace, scan</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/67" />
    <id>https://brunch.co.kr/@@1YN0/67</id>
    <updated>2022-05-14T09:15:13Z</updated>
    <published>2021-05-01T16:22:44Z</published>
    <summary type="html">* 이글은 Swift 5 기준으로 작성했다.  Combine 의다양한 Transform&amp;nbsp;Operators 들을 알아보자  1. Collect finish 될때까지 이벤트를 모두 모아준다. * 주의: 갯수에 한계치가 없으므로&amp;nbsp;메모리 관리에 주의해야 한다.  subject.collect().sink { print($0) } receiveValue: { prin&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2F-zp-OMivkMePAwPYW_NBql-BZKU.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Publishers, Subscribers 알아보기 - Swift Combine</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/66" />
    <id>https://brunch.co.kr/@@1YN0/66</id>
    <updated>2022-05-14T09:13:05Z</updated>
    <published>2021-04-24T04:41:46Z</published>
    <summary type="html">* 이글은 Swift 5&amp;nbsp;기준으로 작성했다.  Publishers, Subscribers 는 Combine 을 시작하고&amp;nbsp;주요하게 접하게 되는 것들이다.   1. Publisher Protocol  애플 문서 :&amp;nbsp;https://developer.apple.com/documentation/combine/publisher Publisher 프로토콜은 시간이 지남&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fn-p5_lxwzzkC4XM2i5zrCzBK36c.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Swift Combine, 시작하기 - Combine 기본 개념</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/65" />
    <id>https://brunch.co.kr/@@1YN0/65</id>
    <updated>2022-11-04T05:33:09Z</updated>
    <published>2021-02-11T22:16:50Z</published>
    <summary type="html">https://developer.apple.com/documentation/Combine Apple Document 의 Combine 을 보면 다음과 같이 설명된다.  ( 번역이 미숙하지만... ) Combine  - 이벤트 처리 연산자들을 통해 비동기 이벤트들을 핸들링 할 수 있게 하는 것  개요  컴파인 프레임워크는 시간에 따른 값 처리 Swift AP&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2F5E6fue8Gd9kkoifOOtCgnz_dpZQ.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Swift Package 에 리소스 추가하기 - Swift Package Manager</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/63" />
    <id>https://brunch.co.kr/@@1YN0/63</id>
    <updated>2020-09-26T13:52:33Z</updated>
    <published>2020-09-26T06:07:36Z</published>
    <summary type="html">Swift Package Manager (이하 SPM) 에서 번들 리소스 포함이 가능하도록 변경되어서 기존에 가지고 있던 오픈소스에 SPM을 넣어보았고, 해당 내용을 공유하고자 한다.  (XCode 12 사용)  일단 할일은 Package.swift 를 소스 저장소에 위치시키기만 하면 된다. 이 Package.swift 파일에 필요항목들을 정의만 하면 끝~&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FIGyQIbjP74GONwNt137jeKIhkFc.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>반응형 프로그래밍이란 무엇인가? - Erik meijer, React 2014</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/62" />
    <id>https://brunch.co.kr/@@1YN0/62</id>
    <updated>2025-11-02T01:09:54Z</updated>
    <published>2020-08-08T19:28:29Z</published>
    <summary type="html">이 글은 에릭 메이어의 2014년 React 컨퍼런스에서 발표 영상을 좀더 이해하기 쉽게 정리해본 내용이다. [유튜브 영상링크] What does it mean to be reactive?  이 글을 쓰게된 이유  iOS 개발자로 RxSwift 를 약 5년째 사용하고 있지만, 반응형 프로그래밍을 누군가에게 명확하게 설명할 정도로 이해하고 있지는 않다고 생각&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FRur5YfTrr-QsND5eeQ72ooW8nFA.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Swift Framework 에서  C 라이브러리 사용 - modulemap, sqlcipher, c, bridging header</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/60" />
    <id>https://brunch.co.kr/@@1YN0/60</id>
    <updated>2020-06-14T22:10:42Z</updated>
    <published>2020-05-29T18:21:26Z</published>
    <summary type="html">Swift framework 에서 C 라이브러리를 사용하는 방법에 대해서 정리하려고 한다.  시간이 부족하신 분들을 위해 결론부터 말하자면 굉장히 쉽다. 아래의 링크의 글대로 진행하면 된다.   아래의 글은 위의 방법으로 SQL cipher 라이브러리를 적용한 과정을&amp;nbsp;정리해봤다.  작업이 필요한 프로젝트는 아래와 같은 구조의&amp;nbsp;내부 Repository fra&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FfcJJWUTJgXfrmLRueO96tL1MNVY.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>RxSwift Scheduler Anatomy - Combine observable, Thread, Subject</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/59" />
    <id>https://brunch.co.kr/@@1YN0/59</id>
    <updated>2019-12-10T03:07:48Z</updated>
    <published>2019-12-09T16:28:02Z</published>
    <summary type="html">* 이 포스트는 RxSwift 5.0.1, swift 5.1 버전을 기준으로 작성되었습니다.  Scheduler 관련 RxSwift 코드를 살펴보는 중에 다음과 같은 의문이 생겼다. 서로 다른 scheduler 에서 수행되는&amp;nbsp;Observable의 이벤트는 합성될때 어떤 Scheduler를 기준으로 이벤트가 발생될까? 몇가지 실험을 해보았고 해당 내용으로 글&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FWOZhtJcgJh8SLO5HjDVk3TXgndE.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Swift Package Manager를 적용하며 - cocoapods, carthage, spm</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/58" />
    <id>https://brunch.co.kr/@@1YN0/58</id>
    <updated>2020-09-01T16:28:02Z</updated>
    <published>2019-11-17T16:34:48Z</published>
    <summary type="html">* 이글은 XCode 11.2.1 , Swift 5.1.2 에서의 환경을 기준으로 작성했습니다. * 이 글은 Swift Package Manager ( 이하 SPM ) 을 설명하는 글은 아닙니다.   SPM을 프로젝트에 적용하면서 발생했던 문제점들에 대해 공유하고자 한다. 먼저 왜 SPM을 사용하고자 했는지 정리해봤다. - Catalyst 를 사용해서 ma&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FWyMUYetvL6Iyx_fW0tLU891Xv5A.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Flutter 앱 개발후기 - 개발후기, Flutter, Dart, 세관이</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/56" />
    <id>https://brunch.co.kr/@@1YN0/56</id>
    <updated>2023-11-08T07:16:28Z</updated>
    <published>2019-08-21T13:43:10Z</published>
    <summary type="html">제주에서 한달간 집중근무 프로젝트를 수행하러 내려가기 약 일주일전 한달간 무언가 공부해볼까 고민해보던 차에, 종종 같이 공부했던 친구에게 Flutter 강의를 하나 소개받았다. 서로 끝까지 공부할수 잇도록 학습에 대한 자극을 주면서 진행해보자고 이야기 하고 공부하기 시작했다.  아래 강좌이다. 구글의 지원으로 가격이 단돈 10달러!  한달반에 걸쳐 강좌를 &lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2Fak-gRe29XA2HXzvSBowU7Tl7LFE.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>iOS 오픈소스 유닛테스트 톺아보기 - Alamofire, Kingfisher, promiseKit</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/57" />
    <id>https://brunch.co.kr/@@1YN0/57</id>
    <updated>2021-10-28T08:45:52Z</updated>
    <published>2019-08-20T16:01:38Z</published>
    <summary type="html">약 5개월전, 네트워크 관련 이슈를 검색하다가 우연찮게 Alamofire PR 하나를 보게되었다. travis-ci 에서 테스트가 실패해서 병합이 안되고있는 상황에 놓여있는 PR이었는데, 어떤 테스트인지 관심이 생겨 Alamofire 테스트 코드를 조금 살펴보았는데, 매우 촘촘하게 짜여지고 깔끔하게 잘 작성된 테스트였다. * travis ( 오픈소스에 한해&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FD-3IvaEQW3vIuGM9kEK5x6XKnhg.jpg" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>Test Doubles 정리 - Dummy, Fake, Stub, Spy, Mock</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/55" />
    <id>https://brunch.co.kr/@@1YN0/55</id>
    <updated>2022-06-29T05:02:00Z</updated>
    <published>2019-07-31T15:34:53Z</published>
    <summary type="html">테스트 더블이란? 실제 객체를 대신해서 테스팅에서 사용하는 모든 방법을 일컬여 호칭하는 것이다. (영화 촬영시 위험한 역활을 대신하는 스턴트 더블에서 비롯되었다.) 예를 들면 네트워크 API를 통해 어떤 정보를 받아서 수행하는 로직을 테스트 한다고 할때, 실제 네트워크 API를 그대로 사용하면, 테스팅은 네트워크 연결에 영향을 받을것이고, 항상 같은 조건에&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FNb77f1fPWaUqSDQxAclZqIUnI6k.jpg" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>옵셔널 타입 클로저 매개변수  파고들기 - swift, escape, noescape, closure agument</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/52" />
    <id>https://brunch.co.kr/@@1YN0/52</id>
    <updated>2019-08-21T13:55:50Z</updated>
    <published>2018-09-18T16:14:10Z</published>
    <summary type="html">시작하기 전에...이 글은 escape&amp;nbsp;와&amp;nbsp;&amp;nbsp;noescape 를 설명하는 글은 아니다.  사건의 발단 얼마전 알고지내는 개발자들이 모여있는 채팅방에서 재미있는 주제가 던져졌다.  func execute(handler: @escaping (() -&amp;gt; Void)?) { }  Swift 4 에서 위와 같이 작성하게 되면 에러가 발생한다. @escaping att&lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2FBbomwuxq9FO_0yleXJ4c0V6vrjo.png" width="500" /&gt;</summary>
  </entry>
  <entry>
    <title>두번째 개인프로젝트 '세관이'의 성과 - 앱스토어 추천시 노출은 얼마나 될까? 프로모션 아트워크 진행과정</title>
    <link rel="alternate" type="text/html" href="https://brunch.co.kr/@@1YN0/50" />
    <id>https://brunch.co.kr/@@1YN0/50</id>
    <updated>2021-11-04T10:31:32Z</updated>
    <published>2018-07-29T16:45:54Z</published>
    <summary type="html">앱스토어 링크  계기 작년에 유럽여행에서 쇼핑을 하고 돌아 오면서 세관신고 예상 세액을 계산해주는 앱이 있었으면 좋겠다&amp;hellip; 라는 여자친구(지금은 아내)의 아이디어에서 출발한 앱이다.  원래 TDD,MVVM-C를 공부하면서&amp;nbsp;어썸블로그처럼 오픈소스로 공개할 예정이었는데 환율 API 키, Firebase appid 등과 재미를 위한 이스터에그 등이 포함되다 보니 &lt;img src= "https://img1.kakaocdn.net/thumb/R1280x0/?fname=http%3A%2F%2Ft1.daumcdn.net%2Fbrunch%2Fservice%2Fuser%2F1YN0%2Fimage%2F2apCF0eqV-RqAPqajywzO69JIdQ.png" width="500" /&gt;</summary>
  </entry>
</feed>
