전체 글

전체 글

    [iOS] - 키체인(Key Chain)

    키체인 키체인을 학습하게된 이유는 OAuth를 통해 소셜로그인을 하고 toke을 받게된다. 이를 저장, 활용하려 하지만, 유저디폴트에 저장하기엔 민감한 정보라 키체인을 학습하게 되었다. UserDefault와 다른점? UserDefault에도 데이터를 쉽게 저장할 수 있지만 단순히 .info파일에 키-값 쌍의 텍스트 형태로 저장하게된다. 그렇기 때문에 OS를 탈옥하면 내용물을 볼 수 있기 때문에 보안이 필요한 민감한 데이터를 저장하기에는 보안이슈등 어울리지 않는다. 이를 방지하기 위해 암호, APIToken, 알고리즘을 위한 value등은 KeyChain에 저장하는 것이 좋다. 그렇다면 KeyChain이란 무엇일까? 암호화된 데이터베이스, 즉 데이터를 안전하게 저장할 수 있는 보관소이다. KeyChain..

    [코딩테스트] - 격자판 회문수(Swift)

    격자판 회문수 1부터 9까지의 자연수로 채워진 7*7 격자판이 주어지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요. 회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다. 빨간색처럼 구부러진 경우(87178)는 회문수로 간주하지 않습니다. ▣ 입력설명 1부터 9까지의 자연수로 채워진 7*7격자판이 주어집니다. ▣ 출력설명 5자리 회문수의 개수를 출력합니다. ▣ 입력예제 1 2 4 1 5 3 2 6 3 5 1 8 7 1 7 8 3 2 7 1 3 8 6 1 2 3 2 1 1 1 3 1 3 5 3 2 1 1 2 5 6 5 2 1 2 2 2 2 1 5 ▣ 출력예제 1 3 풀이 및 소스코드 var grid = [[Int]]()..

    OAuth 2.0의 개념과 동작원

    웹 서핑, 앱을 사용하다 보면 Google과 Facebook, Twitter, github등 외부 소셜 계정을 기반으로 회원가입 및 로그인할 수 있는 어플리케이션을 쉽게 찾아볼 수 있다. 편리하게 회원가입, 로그인을 할 수 있을 뿐 아니라 연동되는 외부 어플리케이션에서 Facebook, Twitter등이 제공하는 기능을 간편하게 사용할 수 있다는 장점이 있다. 예를 들어 외부 어플리케이션에 Google로 로그인하면 API를 통해 연동된 계정의 Google Calendar 정보를 가져와 사용자에게 보여줄 수 있다. 이 때 사용되는 프로토콜이 OAuth이다. OAuth란? OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트상의 자신들의 정보에 대해 어플리케이션의 접근 권한을 부여할 수 있는..

    [네트워크] HTTP protocol - 쿠키와 세션(Cookies and Session)

    HTTP의 특징과 쿠키, 세션을 사용하는 이유 서버가 클라이언트와 통신할 때, 서버는 클라이언트가 누구인지 계속 인증해야한다. 왜냐하면 HTTP프로토콜이 Connectionless, Stateless한 특성이 있기 때문이다. Connectionless: 비연결성 - 연결을 유지하지 않는다. Stateless: 무상태성 - 상태를 유지하지 않는다. Stateless란 상태가 없다는 의미이다. HTTP에서 stateless하다는 건 서버 입장에서 클라이언트의 상태가 없다는 의미로 동일한 클라이언트의 요청이라도 매번 각 요청은 독립적이라는 의미이다. 예를들어 놀이공원(서버)에 손님이 입장(요청)했다가, 퇴장(응답)했을 때 손님 한명 한명 다 기억할 수 없다. 그렇기 때문에 놀이공원에서는 재입장하는 손님을 구분..

    [Firebase] Authentication Rest API(OAuth)

    Firebase Authentication Authentication(인증)? 앱, 웹에 모든 사용자가 모든 컨텐츠에 접근할 수 있어야 하는것은 아니다. 이런 접근에 대한 권한을 "인증(Authentication)"을 통해 보호할 수 있다. 페이지 뿐만 아닌 데이터베이스에 저장된 데이터, 앱의 기능들을 인증을 통해 권한을 제어하고 데이터를 보호할 수 있다. 인증이 된 사용자만이 어떤 기능을 이용할 수 있고, 사용자 인증을 통해 데이터를 조작할 수 있게끔 한다던지.. 즉, 서버는 클라이언트에게 전달받은 요청에 따라서 인증 받은 사용자인지 검사를 하고, 인증받은 사용자에게만 요청에 대한 응답을 클라이언트에게 전달할 수 있어야 한다. 이런 인증의 방법으로는 "로그인"이 있다. 로그인을 위한 버튼을 누르면 정보..

    RxSwift를 이용한 method 호출 구독

    RxSwift에서 swizzling을 통해 특정 메서드의 호출 전, 후에 대한 이벤트를 구독할 수 있다. public func sentMessage(_ selector: Selector) -> Observable public func methodInvoked(_ selector: Selector) -> Observable sentMessage: 메서드가 호출되기 전 methodInvoked: 메서드가 호출된 후에 실행 extension Reactive where Base: UIViewController{ var viewDidLoad: ControlEvent { let source = self.methodInvoked(#selector(Base.viewDidLoad)).map { _ in } return ..

    [Rx + MVVM] Input과 Output을 사용한 MVVM

    iOS의 MVVM패턴에는 표준이 없고 구현하는 사람마다 패턴이 조금씩 다르다. 그 중에 Kickstarter에서 사용하는 Input과 Output Protocol을 사용하는 방식이 있다. 방법 1. transform을 이용하여 입력을 넣어주고 출력을 받는 방법 Protocol with Input & Output protocol ViewModelType{ associatedtype Input associatedtype Output var disposeBag: DisposeBag { get set } func transform(input: Input) -> Output } ViewModel에서 사용할 Protocol을 만들어준다. import Foundation import RxSwift import RxC..

    카드 역배치

    카드 역배치(정올 기출) 1부터 20까지 숫자가 하나씩 쓰인 20장의 카드가 아래 그림과 같이 오름차순으로 한 줄로 놓 여있다. 각 카드의 위치는 카드 위에 적힌 숫자와 같이 1부터 20까지로 나타낸다. 이제 여러분은 다음과 같은 규칙으로 카드의 위치를 바꾼다: 구간 [a, b] (단, 1 ≤ a ≤ b ≤ 20)가 주어지면 위치 a부터 위치 b까지의 카드를 현재의 역순으로 놓는다. 예를 들어, 현재 카드가 놓인 순서가 위의 그림과 같고 구간이 [5, 10]으로 주어진다면, 위치 5부터 위치 10까지의 카드 5, 6, 7, 8, 9, 10을 역순으로 하여 10, 9, 8, 7, 6, 5로 놓는다. 이제 전체 카드가 놓인 순서는 아래 그림과 같다. 이 상태에서 구간 [9, 13]이 다시 주어진다면, 위치 ..

    [디자인 패턴] 팩토리 메서드 패턴(Factory Method Pattern)

    팩토리 패턴(Factroy Pattern) 팩토리 패턴은 어떤 객체를 생성할 때, 그 객체를 사용하는 객체에서 직접 객체의 인스턴스를 생성하는게 아니라, 팩토리라는 객체에게 그 작업을 맡겨 의존성을 주입받는 방법이다. 팩토리패턴의 장점은 객체의 생성을 한 번 캡슐화 할 수 있다는 것이다. 그 효과로 첫 번째는 인스턴스의 생성에 비즈니스 로직이 끼어있을 때, 이 로직을 의존성을 가지는 객체로부터 분리할 수 있다는 것이고, 두 번째 효과는 다형성을 통해 언제든지 인스턴스를 생성하는 팩토리를 유연하게 변경할 수 있다는 것이다. 구체적인 객체의 생성방식에 대해 알 필요가 없어지며 객체 생성 로직의 중복을 제거하고 유지보수성을 향상시킨다. 만약 어떤 인스턴스를 만드는 과정이 바뀐다 하더라도 의존성을 가지는 개체는..

    Swinject

    Swinject https://github.com/Swinject/Swinject GitHub - Swinject/Swinject: Dependency injection framework for Swift with iOS/macOS/Linux Dependency injection framework for Swift with iOS/macOS/Linux - GitHub - Swinject/Swinject: Dependency injection framework for Swift with iOS/macOS/Linux github.com DI(Dependency Injection)는 종속성을 해결하기 위해 IoC(Inversion of Control)을 구현하는 소프트웨어 디자인 패턴이다. Swinject는 ..