본문 바로가기

전체 글59

[Github] Authentication key vs signing key 레퍼런스 https://gist.github.com/ChristopherA/3d6a2f39c4b623a1a287b3fb7e0aa05b SSH Keys - Best PracticesSSH Keys - Best Practices. GitHub Gist: instantly share code, notes, and snippets.gist.github.com 2025. 1. 28.
로그아웃 시 상태관리를 담당하는 컨트롤러의 초기화 나는 올해 새로운 회사로 이직했다. 회사가 진행하고 있는 프로젝트는 개발 시작한지 5개월이 되었고 이제 한 달 후 앱 출시를 앞두고 있다.  소스 코드를 분석하면서 어느 정도 분석이 끝난 부분들이 있으면  그 부분에 대해 요구 사항 구현 혹은 버그 수정 작업을 진행하면서, 그렇게 조금씩 프로젝트를 파악하고 있다. 작업을 진행해야 하는 것들 중에 하나가 사용자 로그아웃 시 상태 관리에 필요했던 컨트롤러(상태 관리를 위한 GetX Controller)의 상태 값들을 초기화하는 작업이 구현되어 있지 않아서 이 작업을 진행해야 한다.  일단 단순하고 편하게 드는 생각은로그인한 사용자가 활동하면서 사용하는 상태 값들을 적당히 프로젝트에서 둘러보고 확인해본 다음 해당 컨트롤러에 상태 값 초기화 메서드를 구현하고 로.. 2025. 1. 10.
[Flutter/FCM] FCM과 Flutter Local Notification으로 iOS 푸시 알림 기능 구현 시 주의점 : apns push type 변경에 따른 대응 FCM으로 메시지를 송수신하고 Flutter Local Notifications 라이브러리로 알림을 표시하는 기능을 유지 보수하다가iOS 알림이 안정적이지 않은 이슈를 해결한 과정과 내용을 공유하려 한다.0. 프로젝트 및 이슈  설명이슈가 발생한 이 프로젝트는 웹소켓으로  채팅 서비스를 구현하고 필요시에는 FCM으로 알림 메시지를 송수신하면 수신한 앱에서 Flutter Local Notification 라이브러리로 로컬 알림을 생성하도록 설계되었다. 하지만 문제는 iOS 백그라운드 푸시 알림이 종종 기기의 메모리 부족 문제로 메시지 수신과 앱 초기화 과정에서 멈추어 알림이 생성되지 않는 이슈 발생 1. apns-push-type : background 의 한계 서버(Spring+FCM라이브러리)에서는 .. 2024. 12. 14.
[RxSwift] Observable 항목 변환 메서드 정리 0. 공식 문서 먼저 정독 ReactiveX - ObservableObservable ReactiveX에서 옵저버는 Observable을 구독한다. Obseravable이 배출하는 하나 또는 연속된 항목에 옵저버는 반응한다. 이러한 패턴은 동시성 연산을 가능하게 한다. 그 이유는 Observable이 객체를reactivex.io 1. map각 아이템을 파라미터로 받아 다른 값으로 변환let observable = Observable.of(1, 2, 3)observable .map { $0 * 2 } .subscribe(onNext: { print($0) })// 출력: 2, 4, 62. flatmap각 아이템을 새 Observable 로 변환하여 모든 항목을 하나의 스트림을 병합보통 각 아이템.. 2024. 12. 11.
[RxSwift] Observable 생성 관련 메서드들 0. 공식 문서 먼저 정독 ReactiveX - ObservableObservable ReactiveX에서 옵저버는 Observable을 구독한다. Obseravable이 배출하는 하나 또는 연속된 항목에 옵저버는 반응한다. 이러한 패턴은 동시성 연산을 가능하게 한다. 그 이유는 Observable이 객체를reactivex.io 1. just단일 값을 발행한 후 onCompleted 이벤트 호출let observable = Observable.just("Hello, RxSwift!")observable.subscribe( onNext: { value in print(value) // 출력: Hello, RxSwift! }, onCompleted: { print(".. 2024. 12. 3.
[UIKit/RxSwift] UITableView를 RxSwift로 구현하는 방법 1.  데이터 바인딩1) 기존 방식기존의 방식으로 데이터를 바인딩하려면 UITableViewDataSource 프로토콜을 구현하고cellForRowAt, numberOfRowsInSection 메서드를 작성class NonRxTableViewController: UIViewController, UITableViewDataSource { private let tableView = UITableView() private let cardData: [(title: String, imageName: String)] = [ (title: "Card 1", imageName: "sample1"), (title: "Card 2", imageName: "sample2"), .. 2024. 12. 2.
[UIKit/codebase] TableView 기본 기능 구현 방법 1. TableView 추가하기import UIKitclass ViewController: UIViewController { private let tableView = UITableView() override func viewDidLoad() { super.viewDidLoad() setupTableView() } private func setupTableView() { view.addSubview(tableView) tableView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ tableView.topA.. 2024. 11. 30.
[RxDart] Stream과 RxDart: 유효성 검사 기능으로 비교해보기 RxDart는 Dart의 Stream API를 기반으로 설계되어 있다.RxDart의 Subject는 내부적으로 StreamController를 사용하고 있어RxDart를 사용하다보면 Stream 확장판 쓰는 느낌..기존 Stream API와 연계하여 사용하기 너무 편하고 StreamBuilder로 매끄럽게 UI 렌더링 로직으로 이어진다. Rx의 강력함을 설명할 겸, Stream과 RxDart의 미묘한 차이를 파악할 겸로그인 기능을 각각 Stream API와 RxDart로 구현해보면서 비교해보고자 한다.구현하고자 하는 기능은 간단하다. 아이디와 비밀번호를 입력 받고,각각의 유효성 검사를 진행하여 로그인 버튼을 활성화 여부를 결정하게 만드는 기능이다. 1. LoginBloc (기본 Stream 버전)impo.. 2024. 8. 22.
[Swift/Xcode] 하나의 빌드 설정에 여러 xconfig을 등록하는 방법 카카오 로그인을 구현하는 와중에 Native App Key, API key 등을 숨기고 싶어secret 키들을 담고 있는 xcconfig 를 따로 만들어 깃에 업로드되지 않도록 관리하고 싶었다. 문제는 debug, release 빌드 설정에 이미 CocoaPod에서 생성한 xcconfig 파일이 등록된 상태이 상황에서 두 xcconfig 을 하나의 빌드 설정에 모두 적용하고 싶었다.  #include#include 지시자를 사용하면 하나의 xcconfig 파일에서 다른 xcconfig 파일의 내용을 포함할 수 있다.#include "Pods/Target Support Files/Pods-walkbook/Pods-walkbook.debug.xcconfig"KAKAO_API_KEY = "APIKEY"  주의.. 2024. 7. 27.