프로세스와 스레드, 코루틴의 Context Switching의 차이
·
CS
동시성 프로그래밍(Concurrency Programming)을 다루다 보면 Context Switching(문맥 교환)이라는 용어를 자주 접하게 된다. OS는 하나의 CPU 코어에서 여러 작업을 동시에 처리하는 것처럼 보이기 위해 실행 중인 작업의 상태를 저장하고 다른 작업으로 전환하는 과정을 반복하는데 이때 발생하는 핵심 메커니즘이 바로 Context Switching이다. 특히 현대 안드로이드 개발 환경에서는 빼놓을 수 없는 코루틴이 “경량 스레드”로 불릴 수 있는 이유 또한 전통적인 스레드의 Context Switching 비용을 어떻게 다루는지와 깊은 관련이 있다. 이 글에서는 Context Switching이 무엇인지 그리고 스레드와 코루틴의 전환 방식이 어떻게 다른지를 중심으로 살펴보려 ..
클린 아키텍처는 클린(Clean) 하지 않다.
·
카테고리 없음
최근 프로젝트들을 보면 대부분 클린 아키텍처를 적용한 것을 볼 수 있다. 클린 아키텍처를 사용하지 않은 프로젝트를 찾기 힘들 정도로 가장 인기 있는 아키텍처임이 분명하다. 나 또한 지금까지 만들어온 프로젝트에 모두 클린 아키텍처를 적용하였고, 이 과정에서 한 가지 의문이 들었다. 바로 Useless UseCase와 Anemic Domain Model. 이에 대한 자세한 내용은 2023년 드로이드 나이츠에서 박종혁 님께서 연사 하신 내용이 있으니 관심 있다면 꼭 한번 보길 추천한다. 나는 이 영상에서 소개한 내용에 대해 너무나 깊이 공감하여 4번은 돌려본 것 같다. 그래서 이를 해결하기 위한 방법들을 끊임없이 고민해 왔지만 1년이 지나도록 그 답을 찾지 못했다. 하지만 얼마 전 함께 우테코를 수료한 크루..
HiltViewModel 의존성 주입 원리
·
Android
갑자기 새로운 버전을 배포한 앱이 크래시 되는 일이 발생했습니다. Firebase Crashlytics를 확인한 결과 다음과 같은 에러가 발생하고 있었습니다. 원인은 단순했습니다. ViewModel에 @HiltViewModel을 Activity에 @AndroidEntryPoint를 추가하지 않았기 때문이었죠. 하지만 여기서 의문이 생겼습니다. "Hilt는 컴파일 타임에 의존성 주입 코드를 생성해서 런타임 에러를 방지한다고 알고 있는데 왜 컴파일은 성공하고 런타임에 크래시가 발생한 걸까?" 이 의문을 해결하기 위해 ViewModel의 기본 작동 원리부터 Hilt가 어떻게 ViewModel을 주입하는지 차근차근 알아보겠습니다.Hilt 의존성 주입"Hilt는 컴파일 타임에 의존성 관계를 분석하여 의존성 주입..
2025 우아콘 후기
·
컨퍼런스
정말 감사하게도 우테코에서 우아콘 초대권을 주셔서 올해는 운이 좋게도 우아콘에 다녀올 수 있었다. 올해는 드로이드 나이츠 운영진부터 우아콘까지 우테코여서 가능한 것들, 우테코여서 느낄 수 있던 것들을 정말 많이 배울 수 있었다. 교육적인 배움뿐만 아니라 다양한 경험을 할 수 있게 해준 우테코 코치님들에게 정말 감사의 말씀을 드리고 싶다. 안드로이드 세션을 제외하면 아직 감자인 나에겐 글로 남기기에 어려운 내용이었기에 안드로이드 세션에 대한 후기만 간략하게 남기려한다.첫 번째 세션은 고민할 필요 없이 체크인을 하자마자 레아의 세션을 듣기 위해 달려갔다. 레아의 세션 시간은 미니 우테코를 떠올리게 했다. 우테코 코치님들과 크루들(심지어 우리 토독 토독팀 백엔드 크루)들과 리뷰어 코니를 만나게 되어 상황이 ..
아주 쉽게 알아보는 뷰가 그려지기까지의 여정
·
Android
Activity의 생명주기, Fragment의 생명주기, ViewModel의 생명주기까지 안드로이드를 조금이라도 공부해 본 사람들이라면 이 내용에 대해 당연히 들어봤고 한 번쯤은 공부해 봤을 것입니다. 하지만 View의 생명주기는 어떨까요? 필자는 다른 컴포넌트들의 생명주기에 비해 유독 View의 생명주기가 어렵게 느껴졌기 때문에 이를 조금이라도 쉽게 풀어 소개해보고자 합니다. 먼저 View의 생명주기에 대해 알아보겠습니다. View가 화면에 보이기까지는 크게 4단계를 거칩니다onAttachedToWindow() : 화면 준비 완료 !onMeasure() : 내 크기는 얼마나 필요해 ?onLayout() : 내 자리는 어디야 ?onDraw() : 이제 그린다 !onAttachedToWindow( ) 뷰가..
안드로이드에서 네트워크 상태에 따라 API를 재호출해보자
·
Android
모바일 환경에서는 네트워크 연결이 끊기는 상황이 매우 빈번하게 발생합니다. 만약 이에 대한 적절한 대응이 없다면, 사용자는 네트워크를 연결한 뒤 화면을 다시 열거나 앱을 재시작하는 것 외에는 앱을 계속 사용할 수 없습니다. 이러한 경험은 UX 측면에서 매우 불친절하며, 장기적으로 사용자 이탈로 이어질 수 있습니다.목표API 호출 시 네트워크가 연결되어 있지 않으면 ConnectException이 발생합니다. 이를 방지하기 위해 API 호출 전 네트워크 연결 상태를 확인하여 네트워크가 연결이 되어 있을 때만 API를 호출하며, 실패한 API 요청을 적절히 재시도하는 방법을 소개합니다.ConnectivityConnectivity는 기기의 네트워크의 다양한 연결 상태를 추적할 수 있는 API로, 단순한 네트워..
우아한 테크코스 안드로이드 레벨 3 회고 - 우테코를 그만 해야할까 ?
·
우아한테크코스
그동안 레벨을 마칠 때마다 "이번 레벨이 가장 힘들었다"라고 생각해 왔다. 역시나 이번 레벨도 다시금 똑같은 생각이 들게 했는데, 이번엔 조금 이 생각의 결이 많이 달랐다. 결론부터 이야기하면 우테코를 그만 둘 생각을 했다. 아마 이번 회고는 다소 어두운 글이 될 것 같아서 회고를 쓰더라도 글을 공개할지 고민을 많이 했는데 조금 더 용기를 내보려 한다. 레벨 3의 시작은 팀 프로젝트 빌딩이었는데 팀에 따라서 잠실 캠퍼스와 선릉 캠퍼스로 팀이 나뉘는 시스템이다. 레벨2 회고에서 말한 것처럼 일련의 힘듦을 겪는 과정에서 나의 우테코 생활에 있어 가장 큰 버팀목이 돼주는 친구들이 있었고, 그 외에도 가장 가깝게 지냈던 만난 연극조 팀원들이 있었다. 그렇다 보니 이 중 한 명이라도 같은 캠퍼스가 되길 간절히 ..
2025 드로이드 나이츠 스탭 후기
·
컨퍼런스
우연한 기회에 정말 감사하게도 드로이드 나이츠에 스태프로 참여하게 되었다. 나는 개발자 커뮤니티와 안드로이드 관련 컨퍼런스를 정말 좋아해서, 작년부터 거의 모든 안드로이드 컨퍼런스에 참여해 왔다. 그렇게 다양한 행사에 참가하다 보니 나도 언젠가 이런 행사를 함께 만들어보고 싶다는 생각을 해왔는데, 이번 드로이드 나이츠를 통해 이 꿈을 직접 이뤄볼 수 있어 너무나 보람차고 행복한 시간이었다☺️첫 임무는 굿즈 포장이었다. 임무를 부여받자마자 크루들과 함께 굿즈 공장을 개설(!)해서 폭풍처럼 굿즈 포장을 해냈다. 신기하게도 다들 처음 맞춰보는 사이인데도 손발이 척척 맞았다. 참가자 입장에서는 굿즈를 그냥 받기만 하면 끝이었는데, 그 뒤에서 이런 정성과 노고가 있다는 걸 처음 느꼈다. 그동안 내가 받아온 굿즈들..