5월, 2020의 게시물 표시

[Swift-30-Projects] 01. IOS 클론코딩 GoodAsOldPhones

이미지
[Swift-30-Projects] IOS 클론코딩 GoodAsOldPhones Good As Old Phones 앱을 구조 살피기 앱 레이아웃 구성 Products Details Contact Us 앱을 구조 살피기 화면은 크게 2개의 Tab Bar로 구성되어있다. Products 와 Contact Us. 상품의 목록을 나열하는 Products는 테이블 뷰로 이루어져있다. 각각의 상품을 입력하면, 상세페이지로 넘어간다. 상세페이지에는 카트에 추가할 수 있는 버튼이 있다. Contact Us 페이지는 하나의 UIView이며, 연락처가 적혀있다. 앱 레이아웃 구성 앱 동선은 Storyboard를 이용해서 구성해준다. 먼저 크게 Tab Bar 컨트롤러로 두 화면을 갈라준다. 그리고 각각의 Tab Bar의 Item의 이름을 Products와 Contact Us로 변경해준다. 간단한 Contact Us 페이지에는 UIView를 넣어준다. Products 페이지에는 Navigation Controller와 TableView를 추가해준다. TableView의 Cell 선택시에는 UIView로 이동할 수 있도록 해준다. Contact Us 간단한 페이지 부터 구현한다.(개인취향이기 때문이다.) Custom Class로 ContactUsViewController를 추가해주고 하나 생성해준다. override func viewDidLoad() { super.viewDidLoad() setupScrollView() setupContents() } ContactUsViewController를 만들어준다. Storyboard에서 해당 UIView를 컨트롤 할 컨트롤러로 UIViewController를 지정해준다. 뷰가 로드되는 시점에 스크롤 뷰를 하나 생성하고, 뷰를 하나 생성한다. 뷰에 스크롤뷰를 추가하고, 스크롤 뷰에 뷰를 서브뷰로 추가한다. func set...

데이터야 난 떠난다!

이미지
데이터야 난 떠난다! 선생님 서비스 개발이 하고 싶어요! 와디즈에 데이터 분석가로 입사를 하고 2년이 지난 시점 새로운 제안이 들어왔다. IOS개발을 해보면 어떻냐는 제안이었다. IOS 개발 인력이 부족하다는 사실 이외에 앞, 뒤로 아무 개연성 없이받은 제안이었다. 당시 담당하고 있었던 업무는 크게 두 가지였다. 하나는 새로운 데이터 파이프라인을 만드는 업무였고, 또 하나는 GA(GoogleAnalytics)와 관련된 전반적인 관리와 개선작업 이었다. 물론 담당하고 있는 업무에 불만은 없었다. 하지만 계속 누군가를 위해 일하는 느낌으로 하던 업무를 하고 있었던 것도 사실이다. 데이터 기반의 의사결정을 위한 데이터를 만드는 것은 나지만 의사결정권은 1도없는 일들을 예로들 수 있다. 요청을 받으면 요청을 처리해주고, 또 더 문제가 생기면 해결해주는 일이었다. 이런 상황에서 서비스 개발직무로의 변경 제안은 솔깃했고, 직접 서비스를 개발하고 싶다는 생각을 심어주었다. IOS개발자로 전향 한 후 어려웠던 점 태어나서 처음 하는 모바일, IOS개발을 시작해야 했기 때문에 알아야 할 것들이 너무 많았다. 애플에서 지원하는 인증서의 개념부터 시작해서 언어, 라이프 싸이클까지 모르는 것 투성이였다. 또한 개발자로서의 기본기가 전혀 갖춰져 있지 않았다. 지식만 있었고 경험이 없었다. 피쳐 브랜치는 어떤 이름으로 따서 어디에 PR을 날려야 하는지 몰랐고, 처음보는 종류의 에러메시지는 이유를 알 수가 없었다. 공부만 하는 것은 현실적으로 불가능 한 부분이라, 아무것도 모르는 상태로 실제 코드를 수정하면서 작업을 해야하는 두려움도 있었다. 프로젝트 중간에 들어가서 진행 과정을 보고 개발을 했던 것은 엄청난 스트레스를 가져다 주었다. 재미있던 점 서비스의 한 부분을 만드는 느낌을 많이 받았다. 버튼을 추가하더라도 와디즈의 색상코드로, 안내문구와 이모지도 와디즈스럽게 만들어야 했다. 누군가 꼭 이렇게 해야한다라고 해서 만든...

[book] 용의자 x의 헌신

이미지
[book] 용의자 x의 헌신 탐정 갈릴레오 시리즈의 세 번째 작품. 사실상 첫 히가시노 게이고 작품을 입문하게된 책. 초기에 살인사건의 과정과 범인이 드러나고 시작하는 특이한 구성. 갈릴레오 탐정이라 불리는 주인공의 라이벌이 등장한다. 물리학자 대 수학자의 두뇌싸움이라는 구성이 마음에 들었다. 풀 수 없는 문제를 만드는 것과 그 문제를 푸는것 중 어떤게 더 어려울까라는 문제를 던져주었다. 그리고 이어서 그 문제는 사랑과 관련있음을 알려준다. 논리적인 것에 사랑이라는 더해지면 더 이상 설명하기가 힘들어진다. 왜 이런 행동을 했을까? 하지만 그 이유는 간단하다 사랑하기 때문이다. 극한의 논리로 이루어져 있는 사람이 논리적으로 사랑을 풀어가는 모습이 정말 기이하다. 어떻게 보면 논리 적이지만 그 논리 자체가 모순이다. 그 모순속에서 진정한 사랑을 볼 수 있다. 차가운 이성과 따듯한 감성이 적절하게 어우러져있는 드라마가 참 좋다.

[book] 탐정 갈릴레오

이미지
[book] 탐정 갈릴레오 탐정 갈릴레오 시리즈의 첫 번째 작품. 등장 인물에 대한 설명도 묘사도 적었다. 하지만 흥미로운건 사건의 개연성과 방법이 너무나 논리적이었기 때문에 퍼즐이 맞춰지는 쾌감이 있었다. 옴니버스로 진행되는 스토리에는 속도감이 있다. 매 스토리마다 살인사건을 해결하는데 필요한 지식들이 정말 놀라울 정도로 과학에 기반되어 보는 내내 신기했다. 또한 과학이 만들어낸 정밀한 살인사건임에도 그 스토리가 주는 오싹함 또한 좋았다. 죽은 치기공이 벼락과 합판을 이용해 자신이 죽었음을 알려 결국 범인을 잡게만든 일. 혹은 정말 유체일탈인 것 처럼 보인 빛의 굴절이 만들어낸 현상까지. 모든 현상의 원리를 정확히 알고 있기에 응용해서 글을 쓸 수 있었을 것이다. 나도 어떤 현상의 원리를 정확하게 알고있으면 이렇게 스토리와 잘 엮어서 글을 쓸 수 있을까? 추리소설이 아니더라도, 다른 사람들에게 정보를 전달하고 메세지를 주는 연습을 해야겠다. 추리소설 특성상 내용에 대한 리뷰자체가 스포일테니 기억이 나지 않으면 다시 책을 읽어보자. 다만 내용을 한 단어로 요약한 제목은 다시 제목을 보는 것 만으로 책 내용을 떠올리게 해줘 좋았다.

[book] 히가시노 게이고

이미지
[book] 히가시노 게이고 - D표시는 Drama. 연속드라마로 영상화된 작품 - SP표시는 Special Drama. 단편드라마로 영상화된 작품 - M표시는 Movie. 영화로 영상화된 작품 시리즈 가가 쿄이치로 시리즈 졸업 : 설월화 살인 게임 - 시리즈 첫작품 잠자는 숲 (SP) 둘 중 누군가 그녀를 죽였다 악의 (D) 내가 그를 죽였다 거짓말, 딱 한 개만 더(SP)[10] 붉은 손가락 (SP) 신참자 (D) 기린의 날개 (M) 기도의 막이 내릴 때 (M) 탐정 갈릴레오 시리즈 탐정 갈릴레오 (D) 예지몽(소설) (D) 용의자 X의 헌신 (M): 제6회 본격 미스테리 대상 소설부문 및 제134회 나오키 상 수상작. 성녀의 구제 (D) 갈릴레오의 고뇌 (D) 한여름의 방정식 (M) 허상의 도화사 (D): 국내 미출간 금단의 마술 (D): 국내 미출간 침묵의 퍼레이드: 국내 미출간. 갈릴레오 시리즈 20주년 작품 닛타 고스케 시리즈 매스커레이드 호텔 (M) 매스커레이드 이브 : 매스커레이드 호텔의 프리퀄 매스커레이드 나이트 명탐정 덴카이치 시리즈 명탐정의 규칙 (D) 명탐정의 저주 설산 시리즈[11] 백은의 잭 (SP) 질풍론도 (M): 2016년 11월 26일 아베 히로시 주연 영화 개봉. 눈보라 체이스: 국내 소미미디어로 출간. 연애의 행방: 원제는 <사랑의 곤돌라>. 시노부 선생 시리즈 오사카 소년탐정단 (D) 시노부 선생님, 안녕! 라플라스의 마녀 시리즈 라플라스의 마녀 (M) 마력의 태동: 라플라스의 마녀의 프리퀄 소설. 장편 방과 후 11문자 살인사건 (SP) 가면산장 살인사건: 반전소설계의 대명사로 알려진 대표작 중 하나. 직접 보기를 권한다. 게임의 이름은 유괴 (M): 영화명은 g@me. 공허한 십자가 나미야 잡화점의 기적 (M): 제7회 일본 중앙공론문예상 수상작, 201...

[IOS] AppDelegate는 뭐하는 녀석이지?

이미지
[IOS] AppDelegate AppDelegate.swift 는 swift로 IOS 개발을 시작하면서 부터 보였고, 계속 궁금해서 이 기회에 정리해놓으려한다. 공식문서 참고 UIApplicationDelegate AppDelegate.swift 크게 두가지 기능을 한다. AppDelegate 클래스를 정의 어플리케이션이 그려질 window를 생성하고, 상태가 변할 때 반응 할 수 있게 한다. 또한 AppDelegate 클래스는 UIApplicationDelegate 프로토콜을 채택해야한다. 앱에 대한 진입 점과 입력 이벤트를 앱에 전달하는 실행 루프를 생성 이 작업은 파일 상단에 나타나는 UIApplicationMain 의 특성이다. (@UIApplicationMain)에 의해 수행된다. 하지만 IOS13부터는 AppDelegate.swift , SceneDelegate.swift 두 파일로 나뉘어 생긴다. 그렇기 때문에 여러 소스를 보았을 때 혼란을 야기했다. 이전에는 (~ IOS12) 아래와 같은 구조였다. AppDelegate Process Lifecycle App Launched App Terminated UI Lifecycle Entered Foreground Become active 하지만 지금은 (IOS13) 아래와 같다. Session Lifecycle에 대한 역할이 추가되었다. AppDelegate Process Lifecycle Session Lifecycle Session Created Session Discarded SceneDelegate UI Lifecycle Entered Foreground Become active AppDelegate 클래스에 있던 프로퍼티인 window가 SceneDelegate로 옮겨졌다. 하지만 하나의 화면에서 여러개의 다중 화면을 지원하면서 scene 개념이 추가...

[book] 소프트웨어 장인이 되기 위한 길

이미지
[book] 소프트웨어 장인이 되기 위한 길 개발을 하면서 꾸준히 새로운 것을 배워야 한다는 것에 동의하지 않는 사람은 없을 것이다. 그럼에도 나는 꾸준히 나아지고 있는지, 나아지려면 어떻게 해야하는지, 무엇이 나아지는 것인지에 대한 궁금증이 이 책을 읽게 했다. 이 중에서 내가 직면한 문제와 관련된 부분을 직어 놓는다 카타 펫프로젝트 오픈소스 페어프로그래밍 컨퍼런스 내가 저 5가지를 할 수 있는 방법에 대해 고민해보아야 한다. 카타 프로그래밍, 알고리즘을 공부할 때 쓰는 방법으로 계속 갈고닦아야 한다. 문법적으로 부족하거나, 자료구조에 대해 공부할 때 쓰면 좋을 방법이다. 매일매일 하면 좋기에 아주 짧은 시간이라도 매일 하는 시간을 만들어야겠다. 주로 집중이 잘 안돼는 오전이른 시간에 하겠다. 펫프로젝트 실력을 늘리기에 가장 좋은 방법이다. 만들고 싶은 것을 만들고, 이 때 필요한 지식들을 익히고 정리한다. 테스트 코드 작성도, TDD도 여기에서 연습하면 좋아보인다. 다만 시간이 많이 필요한데 언제 이 프로젝트에 투자할지를 정하는 것이 힘들어보인다. 오픈소스 사실상 펫프로젝트와 같은 맥락과 같은 부분이다. 다만 남이 짠 코드를 볼 수 있다는 메리트가 있다. 프로젝트 하나를 붙잡고 시간을 들여 소스코드 분석을 해 보는 것도 많은 것을 배울 수 있어보인다. 페이즈를 잡고 펫프로젝트와 다른 기간에 진행해보자. 페어프로그래밍 이건 어디서 어떻게 해야할지 감이 안온다. 일단 페어프로그래밍을 할 수 있는 멤버를 구해보자. 하고 꼭 후기를 남겨야겠다. 컨퍼런스 어딘가에서 발표를 하기위한 준비를 항상 해 놓자. 내가 발표할 수 있는 주제를 발표자료로 만들어서 공유하자. 또한 밋업이나 스터디가 있다면 찾아서 적극적으로 참여하자. 내가 만날 수 있는 사람의 유형이다. 어떻게 대해야 하는지 알아보며, 나는 이 중 어디에 속하는지 알아야한다. 무지 : 잘 모르기 때문에 사용하지 않는다. 대중 : 더...

[GA] 번갯불에 콩 구워먹듯이 GA! - 도입

이미지
[GA] 번갯불에 콩 구워먹듯이 GA - 도입 본 포스팅을 구글 애널리틱스를 이용해 빠르게 실무에서 보고서를 작성해야만 했던 경험의 시행작오를 기록하려 한다. 무작정 문제를 마주하면서 궁금한 부분에 대하여 찾아보면서 문제를 해결하는 방식으로 진행된다. 처음 부터 차근차근 모든 것을 알아가고 싶다면 다음 페이지를 모두 읽어 보는 것을 추천한다. 구글 애널리틱스를 공부하는 방법은 크게 3가지가 있다. Analytics Academy 애널리틱스 고객센터 애널리틱스 개발자 애널리틱스 아카데미는 강의를 들으면서 내용을 이해 할 수 있지만 너무 방대하기에 빠르게 스킬을 익혀야 한다면 비추천이다. 애널리틱스 고객센터는 실제 원하는 것을 얻어가면서 구글링의 결과로 만나게 될 것이다. 애널리틱스 관련 서적을 사는 것보다 이 곳 에서 검색을 하는 것이 훨씬 효율적이다. 책은 이 고객센터를 친철하게 번역해서 출력해 놓은 느낌이다. 애널리틱스 개발자 페이지는 실제 개발하지 않으면 잘 들어가지 않는다. GA는 데이터의 수집 -> 데이터 전처리 -> 설정 -> 보고서 작성 의 순서로 동작한다. 자세한 동작원리는 다음 포스팅에 작성하겠다. 우리는 GA도 없고, 데이터를 수집할 웹페이지도 없다. 그렇기에 구글에서 제공해주는 데모 페이지와 데모 GA를 사용해 스킬업을 한다. 데모 GA 데모 페이지 처음 GA의 메인 페이지를 열었을 때의 느낌이 아직도 생생하다. 멋진 그래프에 많은 숫자들이 이미 대단한 것을 이룬 것 같은 느낌을 주었다. 하지만 그 다음에 어떤 정보를 봐야 하는지를 몰라 탭을 누르는 순간 펼쳐지는 수십개의 하위 페이지들. 각각의 페이지가 주는 정보들이 다 의미가 있기 때문에 원하는 정보를 자유롭게 다루러면 모든 탭을 열어서 모든 정보가 의미하는 바를 보는 것이 맞다. 하지만 그러면 우리는 당연히 야근행일 것이다. 야근을 하지 않기위해. 빠르게 결과물을 보기위해 이 포스팅...

[IOS] IOS 디자인 패턴 - MVC(Model-View-Controller) 맛보기

이미지
[IOS] IOS 디자인 패턴 - MVC(Model-View-Controller) Model - 데이터에 관한 로직 View - 사용자에게 보여지는 화면 Controller - Model과 View 사이의 동작관리 사용자가 블로그 앱에 글을 작성했을 때, View가 변하게 된다. 이때 Controller는 View에서 입력된 값들을 모델로 전달 해준다. 만약 필요한 경우 Model에서 값을 계산해야 한다면, 결과값을 Controller에게 전달한다. Controller는 전달 받은 값을 바탕으로 View를 업데이트 한다. MVC 디자인 패턴은 이렇게 역할에 따라 구조가 나뉜다. UI를 바꾸고 싶으면 View를 수정하면되고, 데이터 처리 로직을 수정하고 싶으면 Model을 손보면 된다. 위에서 설명 했듯이 Model에서 View로 접근하는 일은 없다. 반대로 이야기 하면, Controller가 중간에서 Model에게 View가 보낸 값을 전달해주고, Model의 결과값을 View로 전달 해 업데이트 할 수 있게해야한다. View -> Controller : Delegate를 사용하여 해결(Controller가 View의 변경사항에 대응할 수 있음) Model -> Controller : Notification을 사용하여 해결(Model의 값이 변경되었을 때 Controller에게 전달) Controller -> View : 업데이트 한다. Controller -> Model : 업데이트 한다. 역할을 단순하게 나누어 빠르게 구현할 수 있으나, View lifeCycle 코드가 Controller에 위치하기 때문에 Controller가 커진다.

[dev] 오픈소스 기행문 - 문서번역 (만화로보는 https 동작원리)

이미지
[dev] 오픈소스 기행문 - 문서번역 오픈소스 기행문 - 문서번역 만화로보는 https 동작원리 오픈소스에 어떻게 기여하면 좋을지 계속 고민하던 중 처음 기여하기 좋다는 번역을 할 기회가 생겼다. 읽어보면 좋을만한 문서라고 소개받았는데, 원서였다. 읽어봤을 때 내용이 굉장히 마음에 들었다. 한글로 된 자료가 있으면 좋을텐데라는 생각을하다가 내가 번역을 하면 되겠지라는 생각이들었다. git에 바로 기여할 수 있는 형태가 아니라 관리자에게 번역문의를 했고, 흔쾌히 수락 해주었다. 문서는 만화였고, 생각보다 길었다. 번역작업을 하는 중 돈도 안받고 번역을 하는 이유는 정말 공익을 위해서구나 라는 생각을 많이 했다. 나도 한글로 된 문서를 많이 읽었으니, 누군가를 위해 한글로 된 자료를 남기고 싶다 라는생각이 많이 들었다. 나의 번역에 대해 어떻게 검증을 하는지는 잘 모르겠으나, 보내준대로 게시해주었다. 엄청 부끄럽고 창피하기도 했으나, 많은 사람들이 공유하는 것을 보고 내 생각보다 더 의미있는 일을 했다는 생각에 뿌듯했다. 또한 게시 후에 티셔츠와 작은 선물을 보내줄테니 주소를 달라는 요청을 받았다. 코로나 때문에 언제 올지는 모르지만 오면 착샷이라도 남겨야겠다. 처음 기여를 해보니 오픈소스에 기여하는 재미와 이유가 좀 더 명확해졌다. 조금 더 찾아보고 다음에는 버그픽스 정도의 기여를 할 수 있기를 바라본다.