· 회고
프로젝트를 하면서 기억나는 것 위주로 쓴 글입니다. (kpt 형식 아님 아마 따로 할 예정) 패치노트란?패치노트는 하자 관리 서비스입니다.하자 접수부터 완료 처리까지 한 번에 관리할 수 있으며,현장 정보를 기반으로 하자 검색도 간편하게 수행할 수 있습니다.검색 필터를 활용해 원하는 하자 목록을 추출하고, 엑셀 파일로 손쉽게 저장할 수 있습니다.현장에서는 하자를 임시 저장해 두고, 일괄 업로드 기능을 통해 빠르게 등록할 수 있습니다. 이 외의 기능이 궁금하다면? ---> [ 안드로이드: 다운로드 / iOS: 다운로드 ] 왜 패치노트를..?저는 아파트 하자 처리 프로세스를 아예 모몰랐습니다.. 관련 앱을 만들 거라고는 생각조차 못했었죠. 어느 날 우연히 들었습니다🤷‍♀️ 지인: 아니 회사에서 하자 처리하..
· 기타
계기개인적으로 하고 싶은 프로젝트들이 많아져서, 공통적으로 쓰이는 로직을 자주 쓰게 되었다. `ResourceHelper`,`Logger`등 반복적으로 쓰이는 로직들을 작성 및 복붙 하면서 "귀찮다"라는 생각을 하게 된다.프로젝트 세팅은 항상 설레는 일이지만 이런 것들이 의욕을 살짝 저하시킨다. 물론 사용해야할 기술이 정해져 있는 것도 아니고, 각 프로젝트마다 기술의 채택 방식 이유가 다 있어야 하지만, 내가 하고자 하는 건 흔히 말하는 양산형(?) 프로젝트이기 때문에 템플릿을 만들기로 결심했다. 나는 '딸깍'으로 앱 초기세팅을 마무리하고 싶다. 이것이 나의 목표이다. 템플릿 만들기자주는 코드를 토대로 템플릿을 만든다.모듈 구조는 대략적으로 아래와 같이 가져가기 때문에 아래 구조를 가지고 기본 템플릿을..
개요초기 앱 개발 시 이 프로젝트엔 인터랙션이라고는 찾아볼 수 없었다. 클릭 이벤트에 있어서, 나는 당연히 `noRippleClickable`(리플 효과 제거) 이 제일 괜찮은 줄 알았다. 그래서 그렇게 해왔고, 그렇게 하려고 했다.그러나 나의 생각을 바꾼 건 토스 앱이었다. 그냥 무심코 썼던 토스를 유심히 관찰하니 훌륭한 인터랙션들을 찾아볼 수 있었다. 그리고 관련해서 찾아보다가 토스 팀의 고민과 해결이 담긴 좋은 글도 읽어보았다. 물론 처음부터 훌륭한 인터랙션을 적용할 수는 없어서 (실력 이슈 및 시간 이슈ㅠㅠ), 하고자 하는 인터랙션과 그 이유를 들어 일단 팀원분들께 양해를 구했다. 정말 감사하게도 의견을 반영해 주셨고, 오히려 먼저 생각하고 계셨다고 다양한 의견을 적극적으로 주셨다. (정말 감사합..
개요프로젝트에서 소셜 로그인을 적용하던 중 늘어나는 메서드와 분기 처리를 하나로 묶고 싶어지는 욕망이 커져갔다..현재 프로젝트의 MVP 기능에서는 구글 로그인만 있지만 네이버, 애플, 카카오 등 다양한 소셜 로그인을 지원할 전망이기 때문에 이를 대비하여 깔끔하게 짜려고 한다즉, 내가 해결하고자 하는 문제는1) 늘어나는 메서드와 그에 의존하는 로직2) 조건문 제거3) 확장성 대비이다. 그래서 사용한 디자인 패턴이 전략 패턴이다 전략 패턴(Strategy Pattern)이란?전략 패턴은 런타임 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴이다.나의 전략은 '소셜 로그인 방법'이 되는 것이다.필자가 이해한 전략 패턴의 포인트 아래와 같다.1) 비슷한 역할을 ..
개요전에 소셜 로그인 (구글 로그인) 구현할 때 전략패턴을 적용했었다. (관련 링크)프로젝트 백로그 중에 카카오 로그인 도입이 있어, 공부했던 코루틴을 잘 적용한 과정을 글로 남기려 한다. 카카오 로그인 도입 그리고..카카오 로그인은 예전에 도입해본 경험이 있어, 어렵지 않게 코드를 작성했다. 또한, 전략 패턴을 이용했었기에 크게 수정하는 부분 없이 쉽게 도입할 수 있었다. 그러나 필자가 해야할 숙제는 `콜백 지옥에서 탈출하기`이다.  우선, 카카오 로그인 메서드를 들여다 보았다./* 카카오톡으로 로그인 */fun loginWithKakaoTalk( context: Context, requestCode: Int = AuthCodeClient.DEFAULT_REQUEST_CODE, nonc..
Retrofit이 글은 레트로핏 라이브러리를 사용하고 있다.레트로핏은 HTTP API에 대해 직접적인 조작 없이 인터페이스를 사용하여 쉽게 요청을 보낼 수 있고 응답 결과를 자바 오브젝트로 변환해 주는 라이브러리이다. 또한 코틀린을 사용한다면 API 호출 시 내부적으로 요청이 이루어지기 때문에 따로 콜백을 정의할 필요 없이 바로 응답 객체를 받을 수 있다.네트워크 예외 처리안드로이드 네트워크 예외 처리에는 여러가지 방법이 있을 수 있다.필자는 retrofit 의 `Response`를 그대로 받아 처리하는 공통 `apiHandler`를 작성해 두어 처리를 했었다.fun apiHandler(apiFunc: suspend () -> Response): Flow = flow { try { ..
들어가기 전에본격적으로 프로젝트를 시작하기 전에 적절한 UI 갱신 및 리컴포지션 관리에 대해 관심이 생겼다. 이는 Compose에서 성능을 위해 필수적 요소라고 생각한다.. 나는 상태관리를 엉망으로 하고 있다는 걸 평소에 느꼈기 때문에 상태관리에 집중하고자 MVI 패턴을 공부하려 한다. (우연히 본 깃허브와 유튜브가 흥미를 돋게 한 것도 있다)MVI 패턴MVI 패턴은 Model, View, Intent로 크게 3가지 구성요소로 이루어져 있다. Model: UI에 반영될 상태 View: UI Intent : 사용자 액션, 시스템 이벤트에 따른 결과 (`android.content.Intent` 아님) M-V-I의 관계는 순수함수 형식으로 표현 가능한데, 단방향 흐름을 나타내고 있다. View에서 버튼 클릭..
목표 메인 화면에서 에뮬레이터에서는 드물게, 실기기에서는 때때로 화면의 미세한 버벅거림이 나타났다. (정말 자세히 눈이 빠지도록 봤음..) 이유는 단순히 '데이터를 한 번에 가져와서 버벅거리나 보다!'라고만 생각했다. 그러나 꽤 많은 요소들이 화면을 버벅거리는데 기여(?)하고 있었다. 천천히 알아보자 페이징을 도입했지만.. 페이징은 언젠가 도입해야 할 거라 생각했고, 때마침? 화면 버벅거림을 발견했기 때문에 , 페이징을 도입했다. RecyclerView.Adapter를 PagingDataAdpater로 바꾸고 PagingSource를 만들었다. 그리고 테스트해 봤는데.. 미세하게 버벅거린다.. 물론 가끔씩..이다.. 뭐가 문제지 보다가 안드로이드 스튜디오에서 제공하는 Profiler로 분석해 보았다. 퍼..
문제 프로젝트의 앨범 상세 보기 화면에서 이미지 상세로 들어갈 때, 부드러운 연출을 위해 애니메이션을 줬다. 그리고 성공적으로 되는듯 했으나, 가끔씩 이미지가 깜빡거리면서 보이는 현상을 발견했다. (실제 기기에서는 더 심했음) 왼쪽) 애니메이션 적용 오른쪽) 문제점 왜 이런 현상이 발생할까? 상세 보기 화면(이하 A화면) 에서 이미지 상세 화면 (이하 B화면)으로 갈 때 모든 이미지 url 을 argument로 넘겨주다보니, 이미지가 로딩이 다 되지 않고 애니메이션이 이루어지기 때문에 이런 현상이 일어난 것으로 보인다. 애니메이션 시점과 이미지 로딩 시점이 일치하지 않기 때문에 발생한 것 - 처음 사진을 클릭 했을 때보다 그 아래에 나오는 사진을 클릭 했을 때 현상이 더 도드라졌다. 더 자세히 분석해보자..
· 기타
계기개인적으로 하고 싶은 프로젝트들이 많아져서, 공통적으로 쓰이는 로직을 자주 쓰게 되었다. `ResourceHelper`,`Logger`등 반복적으로 쓰이는 로직들을 작성 및 복붙 하면서 "귀찮다"라는 생각을 하게 된다.프로젝트 세팅은 항상 설레는 일이지만 이런 것들이 의욕을 살짝 저하시킨다. 물론 사용해야할 기술이 정해져 있는 것도 아니고, 각 프로젝트마다 기술의 채택 방식 이유가 다 있어야 하지만, 내가 하고자 하는 건 흔히 말하는 양산형(?) 프로젝트이기 때문에 템플릿을 만들기로 결심했다. 나는 '딸깍'으로 앱 초기세팅을 마무리하고 싶다. 이것이 나의 목표이다. 템플릿 만들기자주는 코드를 토대로 템플릿을 만든다.모듈 구조는 대략적으로 아래와 같이 가져가기 때문에 아래 구조를 가지고 기본 템플릿을..
· 회고
프로젝트를 하면서 기억나는 것 위주로 쓴 글입니다. (kpt 형식 아님 아마 따로 할 예정) 패치노트란?패치노트는 하자 관리 서비스입니다.하자 접수부터 완료 처리까지 한 번에 관리할 수 있으며,현장 정보를 기반으로 하자 검색도 간편하게 수행할 수 있습니다.검색 필터를 활용해 원하는 하자 목록을 추출하고, 엑셀 파일로 손쉽게 저장할 수 있습니다.현장에서는 하자를 임시 저장해 두고, 일괄 업로드 기능을 통해 빠르게 등록할 수 있습니다. 이 외의 기능이 궁금하다면? ---> [ 안드로이드: 다운로드 / iOS: 다운로드 ] 왜 패치노트를..?저는 아파트 하자 처리 프로세스를 아예 모몰랐습니다.. 관련 앱을 만들 거라고는 생각조차 못했었죠. 어느 날 우연히 들었습니다🤷‍♀️ 지인: 아니 회사에서 하자 처리하..
· 기타
혼자 공부하면서 노션에 적어둔 내용을 기록할겸 붙여넣기 했습니다 (정리 안 됨) 우선순위 큐와 힙의 개념Priority queue (우선순위 큐)큐와 유사하지만 우선 순위가 높은 아이템이 먼저 처리됨insertdeletepeekheap힙은 주로 이진 트리 기반으로 구현힙은 max heap 과 min heap 이 있음max heap부모 노드의 키가 자식노드들의 키보다 크거나 같은 트리min heap부모 노드의 키가 자식노드들의 키보다 작거나 같은 트리힙 주요동작inserdeletepeek우선순위 큐와 힙의 관계힙의 키를 우선순위로 사용한다면 힙은 우선순위 큐 구현체가 된다우선순위 큐와 힙의 사용 사례프로세스 스케줄링힙 정렬힙 메모리와는 관련 없음배열(array), 동적배열(dynamic arr..
· 기타
혼자 공부하면서 노션에 적어둔 내용을 기록할겸 붙여넣기 했습니다 (정리 안 됨) 프로세스, 스레드, 멀티태스킹, 멀티스레딩, 멀티프로세싱, 멀티프로그래밍프로그램컴퓨터가 실행할 수 있는 명령어들의 집합프로세스컴퓨터에서 실행 중인 프로그램각각의 프로세스는 독립된 메모리 공간을 할당 받음명령어들과 데이터를 가짐CPU명령어를 실행하는 연산 장치메인 메모리프로세스가 CPU에서 실행되기 위해 대기하는 곳IO입출력단일 프로그램 → 한 번에 하나의 프로그램만 실행 됨 → CPU 사용률 좋지 않음⇒ 여러 개의 프로그램을 메모리에 올려놓고 동시에 실행 시키자 → IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨멀티 프로그래밍CPU 사용률을 극대화 시키는데 목적단점: CPU 사용 시간이 길어지면 다른 프로세스는 계속 ..
개요전에 소셜 로그인 (구글 로그인) 구현할 때 전략패턴을 적용했었다. (관련 링크)프로젝트 백로그 중에 카카오 로그인 도입이 있어, 공부했던 코루틴을 잘 적용한 과정을 글로 남기려 한다. 카카오 로그인 도입 그리고..카카오 로그인은 예전에 도입해본 경험이 있어, 어렵지 않게 코드를 작성했다. 또한, 전략 패턴을 이용했었기에 크게 수정하는 부분 없이 쉽게 도입할 수 있었다. 그러나 필자가 해야할 숙제는 `콜백 지옥에서 탈출하기`이다.  우선, 카카오 로그인 메서드를 들여다 보았다./* 카카오톡으로 로그인 */fun loginWithKakaoTalk( context: Context, requestCode: Int = AuthCodeClient.DEFAULT_REQUEST_CODE, nonc..
easyhz
개발 블로그