Archived

「 48 」

  • November 2019

  • November 18, 2019
    애플로그인 구현하기 (Firebase와 Apple Sign with Apple)

    Apple LoginiOS13에서 Sign In With Apple 이 공개되었습니다.Facebook, Google 등 Oauth를 이용한 간편로그인이 활성화 된 가운데 Apple이 개인정보보호라는 무기를 들고 Third-party login 진영에 참여했습니다. 애플에서 자랑하는 Apple Login의 장점을 먼저 짚고 넘어가봅니다. Google, ...

  • November 17, 2019
    iOS13 다크모드를 지원하는 앱 개발하기 (How to support dark mode)

    iOS13, 다크모드를 공개하다2019년 가을, iOS13이 공개되었습니다. iOS13에는 많은 변화가 있었고 앱 개발자들은 iOS13에 대응되는 앱을 출시할 때 다크모드에 대한 설정을 해야만 했습니다. 다크모드를 On하는 순간 기존 디자인들이 펑펑 신나게 터져나갔습니다. 그래서 아마 대부분의 서비스들은 plist의 UIUserInterfaceStyl...

  • November 17, 2019
    wkwebview message handler memory leak(쉽게 실수하는 WKWebView 메모리 누수 수정)

    WKWebViewUIWebView가 deprecated된 이후 웹 페이지를 렌더링 하는데 선택지는 WKWebView만이 남았습니다.WKWebView는 UIWebView보다 높은 성능을 자랑하지만, 잘못된 설계? 로 인해 쉽게 메모리 누수가 발생할 수 있습니다. 물론 잘 사용한다면 메모리 누수 없이 사용할 수 있습니다.WKWebView를 사용하면서 쉽게...

  • October 2019

  • October 06, 2019
    [iOS] iOS개발 시 주의해야 할 http status code (클라이언트 개발자도 http를 잘 알아야한다)

    iOS개발 시 주의해야 할 http status code (feat. 301, 205)iOS앱을 개발하면서 서버와 통신을 통해 데이터를 가져오는 작업을 하게 됩니다. API 명세에서 response body도 중요하지만 status code도 주의 깊게 살펴봐야 합니다.status code를 잘못 사용하면, 앱 삭제후 재설치 등 사용자 경험에 치명적인...

  • March 2019

  • March 31, 2019
    [iOS] SQLite3 Database 스키마 버전 관리의 필요성 및 방법 소개

    Database SQLite3에 스키마 버전관리가 필요한 이유앱에 신규 기능을 추가하다 보면 Database(SQLite3) 스키마에 변경이 필요한 경우가 생깁니다. 예를 들면, 현재 토이 프로젝트 “퇴근요정” 은 아래와 같은 테이블을 갖고 있습니다. 각 근무시간의 PK인 id, 근무 시작시간 start, 근무 종료시간 end, 이렇게 3개의 col...

  • February 2019

  • February 09, 2019
    [iOS] Touch Event가 View를 통해 전달되는 과정 (hitTest)

    hitTest:: 를 통해 View 계층구조를 따라 Touch가 전달되는 과정을 살펴보자서론앱을 개발하다보면 복잡한 View Hierachy를 만나게 됩니다. 거기에 Button, tableViewCell, CollectionViewCell 등 UserInteraction을 받는 View들이 겹치게 되면 기대와 달리 터치 이벤트를 받지 못하는 오류를 ...

  • February 08, 2019
    iOS의 View, ViewController Layout Cycle

    View(ViewController) Layout Cycle서론앱개발의 40% 정도는 View를 그리고 Layout을 구성하는데 있다고 생각합니다. 어떤 앱은 Frame기반 Layout을 사용하며 또 어떤 앱은 AutoLayout기반의 Layout을 이용합니다.iOS11과 iPhoneX의 등장으로 사실상 AutoLayout은 선택이 아닌 필수가 되었습...

  • January 2019

  • January 26, 2019
  • January 20, 2019
    [띵킹노트] Firebase Auth <=> DB 연동에 대한 고민

    100% 백앤드 없이 서비스 하나 만들기는 어려워 보인다. 아무리 Firebase 라도.. 현재 선택지는 2가지, Firebase Cloud Function을 이용하거나 NodeJS 하나 호스팅하거나. 갑자기 스케일이 매우 커진다.

  • January 13, 2019
    iOS앱 고도화 - Firebase Authentication 적용하기 첫번째 (이메일/비밀번호 회원가입, 로그인)

    iOS앱 고도화 - Firebase Authentication 적용하기 첫번째 (이메일/비밀번호 회원가입, 로그인)이 포스트를 시작으로 지금까지 개발했던 앱에 Firebase Authentication을 적용합니다.로그인 (인증)을 적용하는 이유는 다음과 같습니다. 유저 정보 획득 (Push Target을 디테일하게 설정, 유저 유입/이탈 확인) S...

  • January 09, 2019
    XCode Server Bot 백업 작업 (XCode Server Backup strategy)

    본문 읽기 전 3줄요약 GET https://{xcode server ip}:20343/api/bots : Bots 정보 백업 POST 메소드로 Bot 등록할 수 있도록 XCode Server 변형 POST https://{xcode server ip}:20343/api/bots/noauth : 백업한 정보를 이용해 등록 XCode Server Ba...

  • October 2018

  • October 23, 2018
    [RxSwift] 3일차, RxSwift Operator

    OperatorOperator는 Observable 객체를 구독할 때 넘어오는 event를 Filtering, Transforming, Combining 하기 위해 사용한다.Observable을 구독할 때 event의 element를 그대로 사용할 수 없는 경우, 서비스에서 사용 가능한 객체로 변환하는 과정을 담당한다. RxSwift에서는 구현에 필요...

  • October 13, 2018
    [RxSwift] 2일차, RxSwift에서 지원하는 Subject에 대한 이해

    SubjectSubject는 Observable과 Observer 두가지 역할을 한다. 즉, onNext() 메소드를 통해서 Event를 발생시키는 Observable의 역할과, subscribe 메소드를 통해 Event Sequence에서 Event를 구독하여 처리할 수 있는 Observer의 역할을 모두 수행할 수 있다. RxSwift에서는 4가지...

  • October 11, 2018
    [RxSwift] 1일차, RxSwift란, Observable에 대한 이해

    RxSwift정의 : Observable Sequense와 함수형 operator를 이용한 이벤트 기반의 비동기 프로그래밍 라이브러리. 참고) iOS SDK에서 지원하는 비동기 프로그래밍 NotificationCenter Delegate Pattern GCD (Grand Central Dispatch) Closure Rx를 시작하기 전에 해야 할 용...

  • August 2018

  • August 29, 2018
    [iOS] In-App-Purchase 인앱구매 적용기

    수익을 내보자지금까지는 AdMob을 통해 광고 수익을 소소하게 벌고 있었는데요. 이번엔 인앱구매를 통해 수익모델을 붙여보려고 합니다.보통 주로 무료앱에서는 광고 제거 버전을 인앱구매 상품으로 판매중입니다. 저도 한번 인앱구매로 광고제거 버전을 만들어 보려고 합니다. 앱 설정 변경하기지금까지 Push 등 앱에 특별한 기능을 추가하기 위해서는 애플 개발자...

  • August 28, 2018
    [iOS] AppDelegate의 역할과 메소드

    AppDelegate 의 역할UITableViewDelegate를 구현하다 => UITableView에서 필요한 기능을 대신 구현하다라는 느낌으로 AppDelegate는 App( Application ) 이 해야할 일을 대신 구현한다는 의미입니다. 여기에서 App이 해야할 일이란, Background 진입, Foreground 진입, 외부에서의 ...

  • July 2018

  • July 07, 2018
    [Swift] iOS Widget Development. 위젯 iOS 앱 개발하기

    Widget iOS11.3을 사용하고 있는 iPhone7 에서의 Widget 화면입니다. 앱 서비스 특징에 따라 위젯이 있으면 편리한 경우가 있습니다. 이번에 세번째로 52시간 근무시간 제도 시행에 맞춰 근무 시간을 체크할 수 있는 퇴근요정 앱을 배포했는데요. 다음 버전에서는 위젯도 제공하면 좋을 것 같아 공부도 할 겸 포스팅을 진행합니다. Widge...

  • July 03, 2018
    iOS Swift4 환경에서 sqlite3 DB 사용하기

    Sqlite3를 이용하여 CRUD 구현하기Serverless한 앱을 주로 만들면 데이터를 로컬에 저장하게 되는데, 주로 UserDefault를 사용합니다. 데이터가 단순하고 양이 많지 않다면 상관없지만 CRUD 횟수가 많고 데이터 양이 많다면Database 를 사용하는게 바람직합니다. iOS Swift4환경에서 Sqlite3를 이용해서 데이터 CRUD...

  • May 2018

  • May 31, 2018
    Firebase Cloud Messaging, Notification (Firebase를 이용한 iOS Push 전송)

    Firebase Cloud Messaging지난 포스팅에서는 iOS 앱의 Push Notification 기능을 추가하는 내용을 다뤘습니다.iOS APN, Push Noticifation tutorial (Push 인증서 발급, 테스트 과정) 이제 이 기능을 실제 서비스에서 사용하기 위해 Firebase 를 사용하는 방법을 소개합니다. pod '...

  • May 29, 2018
    iOS APN, Push Noticifation tutorial (Push 인증서 발급, 테스트 과정)

    푸시 인증서 발급받기iOS에서 Push 기능을 사용하기 위해서 Push Certificate, 푸시 인증서가 필요합니다. 푸시 인증서를 발급받는 방법은 개발 인증서 발급과정과 비슷합니다. Apple Developers애플 개발자센터에 로그인합니다. + 버튼을 눌러줍니다. 개발용 인증서 발급페이지와 동일합니다. 빨간색으로 표시한 부분이 Push 인증서입...

  • May 21, 2018
    Content Mode : Scale to Fill, Aspect Fit, Aspect Fill 차이 정리

    Scale To Fill (기본값) 비율 무시! 귀여운 고양이가 옆으로 퍼져버렸습니다. ImageView의 Width와 height에 이미지를 늘리고 우겨넣습니다. 디자인 가이드로 정해진 레이아웃과 이미지가 아니면 이렇게 이미지를 괴롭히면 안돼요. Aspect To Fit 비율 유지! 원본의 비율을 그대로 유지합니다. 이미지는 절대 ImageVi...

  • May 19, 2018
    iOS 앱 업데이트 (강제 업데이트, 선택 업데이트) 기능 구현 예제

    사용자에게 앱 업데이트 안내하기새로운 버전의 앱이 출시되면 AppStore에 등록되고, 설정 -> Apple ID -> iTunes 및 App Store -> 자동 다운로드(업데이트) 가 켜져있다면 보통 새벽시간에 자동 업데이트가 됩니다.하지만 사용자가 자동 업데이트 기능을 꺼두었다면? 새로운 앱 버전의 출시를 알 수 없습니다. 가장 ...

  • May 17, 2018
    Google Analytics example(구글 애널리틱스를 이용한 앱 운영)

    Analytics의 필요성iOS앱을 만들어서 많은 사용자를 보유하려면 사용자가 어떤 기능을 좋아하는지(얼마나 많이 사용하는지), 사용하지 않는 기능은 무엇인지(사용률이 적은 기능)이 무엇인지 알고 계속 개선해 나가야 합니다. 하지만 iOS앱은 AppStore에 업로드하면 개발자의 손을 떠나게 됩니다. 그렇다면 사람들이 어떤 기능을 자주 쓰는지, 필요로...

  • May 14, 2018
    iOS앱 고도화 - Firebase Remote Config를 사용한 앱 운영방법

    Firebase Remote ConfigFirebase Remote Config란, 앱 업데이트를 게시하지 않고도 앱의 동작과 모양을 변경할 수 있도록 도와주는 서비스입니다. 앱의 실행시점에 서버에서 Config를 읽어오는 비교적 쉬운 개념이지만. 이를 활용해서 다양한 응용동작을 할 수 있습니다. 비슷한 서비스로는 NHN Entertainment의 T...

  • May 14, 2018
    Storyboard autolayout 환경에서 Keyboard Event로 Height 처리하기

    Text Input이 필요한 화면에서 고려할점TextView 또는 TextField를 이용해 사용자로부터 텍스트를 입력받는 화면에서는 키보드가 나타납니다.키보드가 나타나면 그만큼 컨텐츠를 보여줄 수 있는 화면의 Height는 줄어들게 되고 그 중 일부는 키보드 밑으로 말려들어가 보이지 않게 되는 문제가 생길 수 있습니다.따라서 키보드가 나타날 때 아래...

  • May 13, 2018
    [Swift] Date to String, Date <=> String 객체간 변환

    String과 Date의 객체간 변환Date와 String의 변환은 매우 자주 사용하면서도 할 때마다 뭐였지 하고 다시 찾아보곤 합니다.또 Obj-C만 사용하다가 Swift로 넘어오면서 한번 정리하고 갑니다. 참고로 swift4 입니다 String -> Date let dateString:String = "2018-05-13 15:05:...

  • May 12, 2018
    [Swift] Optional이란? 옵셔널 이해하기

    OptionalSwift가 갖는 Optional이라는 개념은 변수의 값이 nil일 수 있다는 것을 표현하는 건데요, 반대로 Optional이 아니라면(non-optional) 해당 값은 nil이 될 수 없음을 의미합니다. Objective-C를 사용해왔다면 Optional이라는 표현이 너무나도 당연해보일 수 있지만, Swift에서는 Optional은 ...

  • May 06, 2018
    iOS 앱에서 광고 수익 얻기 (Admob 애드몹 설치, 부착, 예제)

    앱을 다 만들었다면 수익에 도전해보자모바일 어플리케이션에 광고를 부착할 수 있는 다양한 플랫폼이 있다. 그중에서도 Google의 Admob을 이용한 방법을 소개합니다. Admob 가입하기https://www.google.co.kr/admob 구글 애드몹 페이지 구글 계정으로 로그인 할 수 있습니다. 광고 생성하기우선 애드몹 페이지에서 광고를 붙일 앱을...

  • May 03, 2018
    Interface Builder IBOutlet연결에 Strong과 Weak 어떤것을 써야할까?

    IBOutlet의 Strong vs WeakInterface Builder를 사용하는 프로젝트에서 View를 코드상에서 제어하기 위해 IBOutlet으로 스토리보드 코드 를 연결하게 됩니다.Ctrl키를 누르고 View를 .m 또는 .h 파일로 가져오면 다음과 같이 IBOutlet 연결 팝업이 뜹니다. 여기에서 아마도 Property명 또는 Actio...

  • May 01, 2018
    [Objective-C] NSXMLParser로 XML Object Mapper 구현하기 (공공데이터 Response 파싱하기)

    공공데이터 Open APIdata.go.kr에서 다양한 공공데이터 정보를 얻을 수 있습니다. 단순 데이터 파일 또는 Open API형태로 제공하고 있어서 이를 이용해 다양한 서비스를 구현할 수 있습니다.지역 미세먼지 농도, 날씨 예보, 수질 정보 등등 정말 다양한 정보를 얻을 수 있는데요, 스터디용도로 이 API 중 하나를 선택해서 앱을 구현중입니다....

  • May 01, 2018
    [Objective-C] reflection(리플렉션), Introspection(인트로스펙션) Runtime 메소드 사용하기

    ReflectionObjective-C에서 자바의 Reflection 에 해당하는 기능을 Introspection(인트로스펙션) 이라고 합니다.이 기능들은 <objc/runtime.h> 헤더 파일에 선언되어 있으며, C 함수로 작성되어 있습니다. 사용할 수 있는 메소드는 애플 개발자 센터 가이드에서 확인 가능합니다.애플 개발자 센터 Runt...

  • April 2018

  • April 25, 2018
    XCode Server를 이용한 CI(continuous integration)

    CI 란?CI란 continuous integration의 약자로 지속적 통합을 뜻한다. 작업을 작은 단위로 쪼갠 뒤, 작은 단위로 개발, 지속적으로 통합하는 과정을 통한 개발 방법으로 코드 품질향상, 배포주기 단축을 목표로 한다. iOS에서의 CIiOS 앱은 실행파일(.ipa) 하나를 Export 하는데에 인증서, 프로비저닝 등 빌드 과정에 관여하는...

  • April 25, 2018
    [Objective-C] GCD를 이용한 싱글톤 객체 생성하기

    Singleton이란?싱글톤 패턴은 하나의 프로그램(정확히는 프로세스)에 하나의 인스턴스만을 사용하기 위해 사용한다.iOS 프로젝트에서는 주로 앱 전반적인 데이터를 저장하고 관리하는 매니저 객체로 많이 사용하게 된다. C++ 또는 Java 에서도 Singleton 패턴을 많이 사용해왔는데, 보통 Singleton을 아래와 같은 방법으로 만들었을 것이다...

  • April 18, 2018
    [Swift] 열거형 Enum 사용하기

    스위프트의 Enum 기본enum의 선언은 enum 키워드로 합니다. enum Languaegs : String { case Korean = "KR" case Japanese = "JP" } 위 예시 하나로도 Obj-C의 Enum과의 많은 차이점을 느낄 수 있습니다. Enum에 String을 넣을 수 ...

  • April 16, 2018
    CocoaPods 똑똑하게 사용하기 (명령어, 사용 예시 소개)

    Pod installiOS 프로젝트에서 CocoaPods을 사용하지 않은 프로젝트를 보기 힘들정도로 대부분의 iOS 프로젝트가 CocoaPods를 사용한다. 프로젝트 다운받고 -> `Pod install` -> 앱 실행 너무나도 익숙한 Flow지만 막상 다른 명령어는 뭐가 있는지, Pod install과 Pod update의 차이를 정확하게...

  • April 16, 2018
    iOS 프로젝트에 cocoapods 적용하기

    Cocoapods?iOS 앱을 개발하면서 외부 라이브러리의 필요성을 느끼게 되고, 여러 라이브러리를 사용하다보면 서로 의존성이 꼬이는 문제가 발생할 수 있다.이런 문제를 해결하기 위해 자바에서는 Maven이나 Gradle등의 의존성 관리 툴을 사용한다.iOS 생태계에도 감사하게 CocoaPods이라는 의존성 관리 툴이 있다. CocoaPods 외에도 ...

  • April 15, 2018
    iOS Application 개발 시작하기 - 2 (프로비저닝 생성, XCode 프로젝트 설정)

    지난 포스팅 iOS Application 개발 시작하기 - 1 (개발자 등록, 인증서 등록) 에서는 애플 개발자 계정을 만들고 인증서를 등록했다. 이제 앱을 디바이스에서 실행시키기 위해 Provisioning Profile 을 생성하고, Xcode 프로젝트를 생성하는 과정을 다룬다. App ID 등록앱을 생성하기 위해서 먼저 Apple Develope...

  • April 15, 2018
    iOS Application 개발 시작하기 - 1 (개발자 등록, 인증서 등록)

    Apple 개발자 계정iOS앱을 개발하고 AppStore에 등록, 판매하기 위해서 Apple에 개발자 계정을 등록해야 한다. 애플 개발자 계정은 1년에 약 한화로 10만원 정도 된다. Google에 비하면 정말 비싼가격이지만…! iOS 개발자가 개발자 계정 없이 먹고 살 수 없으니 등록하자! 준비물은 약 10만원 정도가 든 카드와, Apple 계정이다...

  • March 2018

  • March 29, 2018
    NHNent가 만든 협업 서비스 Dooray

    JIRA vs Line Works vs Dooray 직접 사용해본 후기JIRA : 강력한 스프린트 관리 기능! But, 위키가 쌓이면 쌓일수록 최신화 안되는 문서들이 가득, 문서찾기도 힘듦ㅠㅜ Line Works : 네이버 메일, 드라이브, 캘린더를 그대로 가져와서 익숙하다! Dooray : 처음에 배우기 어렵다…. 하지만 익숙해지면 이만한게 없다!!...

  • March 10, 2017
    웹 js, css 정적 파일 버전관리 방법

    js, css 정적 파일 버전 관리WAS가 1개일때는 문제가 없지만 2개, 3개 … N개가 되면 새로운 문제가 발생한다. 크게 2가지 문제로 구분할 수 있다. 최신 Back-End와 구 Front-End 의 만남 브라우저 캐싱 <- 사실 WAS가 1개일때도 문제 두가지 문제점은 어떤 이슈를 발생시키나??깨진다. 웹페이지가 깨진다. 바스락....

  • March 05, 2017
    자바 성능 튜닝 이야기

    Map, Set, List, Queue의 차이점 인터페이스 구현 클래스 특징 Map HashMapTreeMapHashTableProperties Key-Value의 쌍으로 이루어진 데이터의 집합. 순서가 없으며 Key의 중복을 허용하지 않음. Value는 중복 가능 Set HashSetTreeSet 순서가 없는 데이터의 집합. 중복 불허...

  • March 03, 2017
    오픈소스 Grafana와 InfluxDB를 활용한 서버 모니터링

    오픈소스 Grafana와 InfluxDB를 활용한 서버 모니터링왜 쓰는가?서버의 리소스 (CPU 사용량 및 메모리 사용량)이나 웹 사이트 URL의 호출 횟수, 응답시간 등 서버 개발자가 실시간 모니터링해야 하는 자원을 쉽게 모아서 실시간으로 보여줄 수 있다. 간단한 사용 후기로는 Grafana가 그래프를 그려주는게 InfluxDB에 있는 데이터를 가...

  • March 01, 2017
    웹 최적화 (Apache mod_deflate 모듈을 이용한 압축 전송)

    Apache mod_deflate 모듈을 이용한 압축 전송지난번 WAS와 WEB의 분리를 통해 js, css 등의 정적 파일은 apache에서 서비스 하도록 변경했다. js, css등의 파일을 압축 전송하여 좀 더 빠르게 사용자에게 전송할 수 있다. 물론 장단점이 존재한다. 장점 : 압축전송으로 인해 좀 더 빠른 전송, 적은 네트워크 트래픽단점 : 보...

  • February 2017

  • February 26, 2017
    웹 최적화 (WEB과 WAS의 분리)

    WEB과 WAS의 분리, (Apache와 Tomcat 분리)Apache (웹 서버) 는 static한 파일 (js, img, css) 등 변동이 없는 파일을 서비스하기 위해 사용되어 왔다. Tomcat (웹 어플리케이션 서버, 이하 WAS) 는 사용자의 요청 등에 따라 유동적인 서비스를 제공하기 위해 사용한다. WEB은 static 파일 서비스에 유리...

  • February 09, 2017
    Jasypt를 이용한 properties 암호화 spring4

    Github 또는 그 외의 공개 장소에 프로젝트 관리를 하다보면 DB 패스워드 등 보안에 민감한 정보들이 노출되기 쉽다. 깃헙에 delete password 라는 키워드로 커밋 검색 결과… delete password 커밋해도.. 이전 커밋에는 패스워드가 노출되어있다는 것.. 애초에 올리질 말아야 한다 그 외에 OAuth에 필요한 키, 다른 API ...

  • January 2017

  • January 22, 2017
    WAR(웹 어플리케이션) 배포

    Tomcat의 주요 디렉토리 구조 디렉토리 설명 bin tomcat 실행에 필요한 바이너리 conf 설정파일 <- 중요하다!! webapps 웹앱들의 루트 폴더 work jsp파일을 서블릿 형태로 변환한 java파일 톰캣 환경설정 ( server.xml ) server.xml 을 보면 몇가지 태그로 정보를 구분할 수 있...

  • January 22, 2017
    NHN 토스트루키 기술교육 2주차 회고

    Toast-Rookie 기술교육 2주차투표 서비스 ‘신의 한 수’ 개발 시작2주차부터 본격적으로 개발을 시작했다. git이나 태스크 관리 등 규칙 정하는데 하루를 모두 소비했다. 그 후 Repo 등록하고 Spring Framework프로젝트 생성 후 첫 Initial Commit을 날렸다.2주차에는 DB -> DAO -> Service 까지...

  • January 14, 2017
    Travis CI를 이용한 빌드 테스트

    Travis CITravis CI 란? Travis CI는 오픈소스 커뮤니티를 위한 지속적 통합 서비스이다. Github의 README.md 파일을 보면 build/passing 같은 뱃지를 볼 수 있다. 이것이 travis의 CI의 결과를 쉽게 알 수 있는 기능이다. Travis CI 서비스 가입하기 Travis CI 서비스 홈페이지 https:/...

0%