전체 글153 릴리즈 tag 생성 시 Jira Release 노트 및 Slack 알림 자동화하기 서론배포는 개발의 마지막 단계이지만, 의외로 많은 수작업이 필요한 단계이기도 하다.앱스토어에 새 버전을 배포하고 나면, 개발자는 Jira에 릴리즈 노트를 작성하고 관련 이슈들을 업데이트(연결)해야 한다. 그리고 Slack에 배포 공지를 올려 팀원들에게 알려야 한다. 이 과정은 단순해 보이지만, 실제로는 다음과 같은 문제들을 내포하고 있다:릴리즈 노트 작성 누락: 바쁜 일정 속에서 Jira 업데이트를 깜빡하는 경우공지 형식 불일치: 담당자마다 다른 형식으로 작성하여 정보 파악이 어려움관련 이슈 누락: 어떤 이슈들이 이번 릴리즈에 포함되었는지 수동으로 추적하다 빠뜨림반복적인 수작업: 매번 비슷한 내용을 복사-붙여넣기하며 시간 낭비특히 빠른 주기로 배포하는 애자일 환경에서 이러한 수작업은 개발자의 생산성을 크.. 2025. 12. 13. Act로 Github Actions 플로우 로컬에서 테스트하기 GitHub Actions를 로컬에서 테스트할 수 있는 act 라이브러리 사용법https://github.com/nektos/act서론GitHub Actions 워크플로우를 개발하다 보면 매번 다음과 같은 과정을 반복하게 된다.워크플로우 파일을 수정변경 사항을 커밋GitHub 리포지토리에 푸시GitHub 러너가 작업을 실행할 때까지 대기GitHub 웹사이트에서 로그를 확인하며 성공/실패 분석이 과정은 시간이 많이 걸리고, 작은 수정 하나를 테스트하려면 전체 사이클을 거쳐야 하므로 비효율적이다.Act는 이를 해결하는 도구이다.Act란?Act는 GitHub Actions를 로컬 환경에서 실행할 수 있게 해주는 오픈소스 도구이다. Docker를 활용하여 GitHub의 러너 환경을 로컬에서 시뮬레이션하므로, 푸.. 2025. 12. 13. [iOS] 소셜 로그인(네이버/애플) 연동하기 서론최근 사내에서 소셜 로그인(네이버/애플) 연동 작업을 진행하며, 공부했던 부분들과 OAuth, JWT에 대해 공유하려 한다.Apple 로그인 이해하기Sign in with Apple은 사용자가 Apple ID와 2단계 인증을 통해 앱에 로그인할 수 있게 해주는 인증 시스템이다. 사용자는 Face ID, Touch ID, 또는 기기 암호만으로 빠르게 로그인할 수 있으며, Apple은 사용자의 프라이버시를 보호하면서도 개발자에게 필요한 인증 정보를 제공한다.인증 플로우 https://developer.apple.com/documentation/signinwithapple/verifying-a-user Verifying a user | Apple Developer DocumentationCheck the.. 2025. 11. 23. [iOS] WebSocket 구현 및 중복 연결 문제 해결하기 서론실시간 기능을 구현할 때 서버와 클라이언트 간의 지속적인 양방향 통신이 필요한 경우가 많다.iOS에서는 URLSessionWebSocketTask를 활용해 WebSocket을 구현할 수 있다.이번 글에서는 WebSocket 통신을 구현하면서 겪었던 중복 연결 문제와 데이터 레이스(Data Race) 이슈를 어떻게 해결했는지 공유하려 한다. 실시간 기능을 위해, 여러 다양한 방법이 있다.HTTP Polling: 클라이언트가 주기적으로 서버에 요청을 보내 데이터 확인장점: 구현이 단순하고, 대부분의 서버 환경에서 쉽게 적용 가능단점: 실시간성이 떨어지고, 데이터가 없어도 계속 요청을 보내기 때문에 네트워크 리소스 낭비가 크다Long Polling: Polling의 비효율을 줄이기 위한 방식. 클라이언트.. 2025. 9. 30. [UIKit] DiffableDataSource 도입으로 테이블뷰 성능 개선하기 서론최근 사내에서 TableView에서 숨김/해제 기능을 추가하게 되었고, 해당 과정에서 테이블뷰에 셀을 제거, 추가하는 과정에서 UI 업데이트 성능 문제가 발생하였다.기존 방식은 셀 숨김/해제 시 전체 리스트를 리로드하는 방식이라, 화면이 깜빡이거나, 반응 속도가 느려져 사용자 경험이 좋지 않았다.이 문제를 해결하기 위해 UITableViewDiffableDataSource를 도입했으며, Tap Latency가 250ms → 80ms 수준으로 줄어들었고, 셀 변경만 애니메이션과 함께 UI에 반영되도록 개선했다. 기존 방식의 문제전통적인 방식은 UITableViewDataSource 프로토콜을 구현해 섹션/셀을 직접 관리해야 했고, 아래와 같은 문제가 있었다.데이터 변경 시 reloadData(), pe.. 2025. 9. 27. [Combine] trottle와 debounce 서론연속적으로 스와이프 새로고침을 하거나, 검색창에 입력할 때 타이핑마다 API가 호출되는 등 불필요한 이벤트가 많이 발생한다.이런 과도한 이벤트로 인해 중복 API 호출, UI 버벅임, 서버 부하 같은 문제가 생기며, 이를 해결하기 위해 Combine의 throttle과 debounce를 사용한다. (RxSwift에도 있음) 즉, 불필요한 중복 호출을 방지하기 위해 Combine의 throttle과 debounce라는 두가지 Operator를 사용한다. Throttle: 지정된 시간 내 첫 번째/마지막 이벤트만 처리하고 나머지는 무시일정 시간마다 최대 1번만시작 시점 or 끝 시점버튼 연타 방지, 스크롤 추적실시간성 높음Debounce: 지정된 시간 동안 새 이벤트가 없을 때만 마지막 이벤트 처리이벤트.. 2025. 5. 20. [UIKit] 앱 생명 주기 (App Life Cycle) https://developer.apple.com/documentation/uikit/managing-your-app-s-life-cycle Managing your app’s life cycle | Apple Developer DocumentationRespond to system notifications when your app is in the foreground or background, and handle other significant system-related events.developer.apple.com 참고더보기https://co-dong.tistory.com/62 iOS) App · ViewController의 생명주기iOS에서 생명주기란 앱의 최초 실행과 종료 사이에 발생하는 일련.. 2025. 3. 25. [iOS] How to Play Video: AVFoundation, HLS, DRM, FPS, Chromecast iOS에서 동영상 스트리밍을 위한 기술 OverViewAVFoundationhttps://developer.apple.com/av-foundation/ AVFoundation - Apple DeveloperFind presentations, documentation, sample code, and development resources for using AVFoundation. The AVFoundation framework APIs provides essential services for working with time-based audiovisual media on Apple platforms.developer.apple.comAVFoundation is the full featured framewo.. 2025. 3. 23. [iOS] xcconfig와 Scheme을 활용하여 Prod/Dev환경 분리하기 서론iOS 앱을 개발하다 보면, 개발 환경(Dev), QA, 그리고 프로덕션 환경(Prod)에 따라 API URL, Firebase 설정, 로깅/분석 환경 등을 분리해야 하는 경우가 많다.하드코딩 방식으로 환경을 관리하면 실수로 잘못된 환경의 빌드를 배포할 수 있고, 유지보수도 어렵다. 그래서 사내에서 신규 앱을 초기부터 개발할 때 개발 환경 세팅을 하며 제일 먼저 xcconfig와 Scheme을 활용하여 Prod와 Dev 환경을 분리한 경험이 있다. 이번 글에서는 xcconfig와 Scheme을 활용하여 안전하게 Prod/Dev 환경을 분리하는 방법을 소개할 예정이다. 환경 분리가 필요한 이유그렇다면, 왜 환경 분리가 필요할까?앱마다 환경별로 필요한 설정이 다르다.예를 들어:Dev 서버: https:/.. 2025. 3. 5. [iOS] WebKit - WKNavigationDelegate https://developer.apple.com/documentation/webkit/wknavigationdelegate WKNavigationDelegate | Apple Developer DocumentationMethods for accepting or rejecting navigation changes, and for tracking the progress of navigation requests.developer.apple.com웹뷰의 탐색(네비게이션) 이벤트를 처리하는 프로토콜페이지 로드 시작, 완료, 실패 등의 이벤트를 감지하고 제어 구현 메서드Allowing or denying navigation requestswebView(_:decidePolicyFor:preferences:deci.. 2025. 2. 23. [네트워크] 프록시와 안정적인 트래픽 오리진 서버와 중간 서버: 포워드 프록시와 리버스 프록시오리진 서버(origin server): 자원을 생성하고 클라이언트에게 권한이 있는 응답을 보낼 수 있는 HTTP 서버클라이언트와 오리진 서버 사이에는 많은 중간 서버가 있을 수 있다가용성(availablity): 서버, 네트워크, 특정 하드웨어 부품을 비롯한 특정 컴퓨터 시스템이 주어진 기능을 실제로 수행할 수 있는 시간의 비율고가용성(HA, high availability): 주어진 기능을 문제없이 수행하는 시간이 비율이 높을때HTTP 중간 서버는 프록시와 게이트웨이가 있다프록시 (proxy)클라이언트가 선택한 메시지 전달 대리자주로 캐시 저장, 클라이언트 암호화 및 접근 제한 등의 기능 제공클라이언트가 어떤 프록시를 언제, 어떻게 사용할지 선택.. 2025. 2. 16. [네트워크] 응용계층: HTTP 도메인 네임과 DNS인터넷에서 네트워크 장치를 식별하기 위해 사용하는 시스템으로, 사용자가 기억하기 쉬운 도메인 네임(domain name)을 통해 실제 IP 주소로 접근할 수 있도록 돕는 역할을 함IP 주소네트워크 상의 호스트(컴퓨터, 서버 등)를 식별하기 위해 사용하는 숫자 기반 주소IPv4: 192.168.0.1 형태 / IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 형태예시) 웹 서버의 IP 주소가 142.250.190.46이라면, 이 주소를 통해 해당 서버에 접근 가능도메인 네임(domain name)사람이 읽기 쉬운 문자열 형태의 호스트 정보로, IP 주소와 대응됨예시) www.google.com은 내부적으로 특정 IP 주소와 연결됨도메인 네임은 계층 구조로.. 2025. 1. 29. 이전 1 2 3 4 ··· 13 다음