gRPC-Swift (v2)최신 gRPC-Swift 2는 iOS 18 이상 availability를 전제로 합니다. 현재 샘플의 deploymenttarget은 iOS 15이고 simulator도 iOS 17.5라 바로 채택하기 어렵습니다. gRPC-Swift 2Package (https://raw.githubusercontent.com/grpc/grpc-swift-2/main/Package.swift)expect/actual 구조 + gRPC-Swift (v2)Apple과 gRPC 커뮤니티가 공식 메인터넌스하는 정통 표준 트랜스포트 레이어입니다. https://www.swift.org/blog/grpc-swift-2/
• withTimeoutOrNull은 주어진 시간 안에 suspend 블록이 끝나면 그 결과를 반환하고, 시간 초과면 예외 대신 null을 반환하는 코루틴 유틸입니다. 형태는 이렇습니다. val result = withTimeoutOrNull(1000) { // suspend code "done" } 동작: - 1초 안에 끝나면 result == "done" - 1초 넘기면 블록을 취소하고 result == null withTimeout과 차이: - withTimeout(...)은 timeout 시 TimeoutCancellationException을 던짐 - withTimeoutOrNull(...)은 timeout 시 그냥 null 반환 네 코드에선: val res..
## 시스템 API vs Jetpack 라이브러리---### `android.media.session` (시스템 API)```kotlinimport android.media.session.MediaSessionManagerimport android.media.session.MediaControllerimport android.media.session.MediaSession```- Android OS에 **내장**된 API- 별도 gradle 의존성 추가 불필요- AOSP 일부, 모든 Android 기기에 기본 탑재---### `androidx.media` / `androidx.media3` (Jetpack 라이브러리)```kotlin// androidx.media (구버전)import androidx.m..
화면(UI)은 최신 상태로 잘 바뀌는데,LaunchedEffect 안에서 보는 값은 예전 값일 수 있다. 예를 들어: var isPlaying by remember { mutableStateOf(false) }LaunchedEffect(Unit) { delay(5000) println(isPlaying)} 너는:5초 뒤 최신 isPlaying 출력되겠지? 라고 생각할 수 있는데,실제로는:LaunchedEffect 시작 당시 값(false) 을 계속 들고 있을 수 있음.왜?Compose는:UI는 recomposition 됨 Text(if (isPlaying) "PLAY" else "STOP") 이건 상태 바뀌면 자동 갱신됨.근데 LaunchedEffect(Unit) 는:처음 한 번만 실행 이라..
Reference- https://developer.android.com/topic/architecture?hl=ko#recommended-app-arch 앱 아키텍처 가이드 | App architecture | Android Developers앱 아키텍처 가이드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱 아키텍처는 고품질 Android 애플리케이션의 기반입니다. 잘 정의된 아키텍처를 사용하developer.android.comhttps://developer.android.com/topic/architecture/recommendations?hl=ko#layered-architecture Android 아키텍처 권장사항 | App architecture ..
1장 안정성아이템1 : 가변성을 제한하라var보다 val, mutable 보다 immutable 변수 사용. 관리 포인트가 늘어나면 가독성도 해치고 버그 생길 가능성도 커진다.아이템2 : 변수의 스코프를 최소화하라변수의 스코프는 좁게 하는 것이 좋다. 람다에서는 변수를 캡쳐한다. ✅ 변수 캡처란? - GPT 설명람다가 자신이 선언된 바깥(scope)의 변수를 가져다 쓰는 것이에요.var sum = 0val numbers = listOf(1, 2, 3)numbers.forEach {sum += it}println(sum) // 6👉 여기서 람다 { sum += it } 는외부 변수 sum을 캡처해서 사용하고 있음👉 ① Kotlin 람다는 변수를 그대로 쓰는 게 아니다👉 ② 내부적으로 참조 객체로 감싸..
지난 포스팅: 매뉴얼하게 로컬 개발환경에서 git push -> 서버 환경에서 git pull, deploy 수행 AWS 에 웹 서버 배포하기[로컬 개발] → [Git push] → [AWS pull] → [Docker 재배포]Local(개발): Mac, AWS(배포): Unbuntu 배포와 개발 환경이 달라서 Docker 배포하기로 한다.순서1. 개발 환경에서 코드 수정 후 git push 한다.2. AWS 서버에ttoogi.tistory.com아래 순서로 CI/CD 적용해본다.GitLab에 코드 push파이프라인이 자동 실행브랜치에서는 빌드 수행main 브랜치 반영 시 AWS 서버 자동 배포상세 과정 1. GitLab CI 파이프라인 추가 /.gitlab-ci.yml 파일 추가 브랜치..
[로컬 개발] → [Git push] → [AWS pull] → [Docker 재배포]Local(개발): Mac, AWS(배포): Unbuntu 배포와 개발 환경이 달라서 Docker 배포하기로 한다.순서1. 개발 환경에서 코드 수정 후 git push 한다.2. AWS 서버에서 git pull, Docker 재빌드 및 기존 컨테이너 교체한다.#!/bin/bashecho "🔄 pulling code..."git pullecho "🐳 building docker..."docker build -t bookserver .echo "🛑 stopping old container..."docker stop bookserver || truedocker rm bookserver || trueecho "🚀 sta..
- Total
- Today
- Yesterday
- multimodule
- 프로그래머스
- 내채공만기
- 멀티모듈
- TKD
- 디자인패턴
- 이펙티브코틀린
- VLLO
- 내채공
- 클라우드 네이티브 애플리케이션 디자인 패턴
- 코틀린코루틴의정석
- 레포지토리패턴
- 코틀린
- 동기메시징기술
- AdobeClip
- 버전충돌
- 청년내일채움공제
- 통신패턴
- android
- InShot
- Kotlin
- 아이폰영상편집어플후기
- androidarchitecture
- Vlogr
- 쇼코의미소
- 수학 #다이나믹프로그래밍 #게임이론
- 코루틴
- https://kotlinlang.org/docs/object-declarations.html
- gitlab_ssh_permission_denied
- 맥북개발환경
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
