전체 글
-
[Android] Firebase 배포 자동화 (Github Actions)AOS 2023. 11. 21. 00:19
어제는 Github Actions를 이용하여 Github Release 를 자동화하였습니다. 2023.11.19 - [AOS] - [Android] “캐치 테이프” CD 구축 - 2. Github Actions 을 이용한 배포 자동화 [Android] “캐치 테이프” CD 구축 - 2. Github Release 자동화 캐치 테이프를 개발하며 CI/CD 를 구축하게 되었다. CI 는 다른 팀원 분이 맡아주셨고, 나는 Github Action 을 이용하여 태그를 푸쉬하여 apk 파일을 빌드하고 파일을 release 하는 워크플로우 를 만들게 tral-lalala.tistory.com Firebase 앱 배포 테스터들에게 출시 전에 배포해서 테스트할 수 있도록 Firebase 에 앱을 배포하는 것을 자동..
-
[Android] Github Release 자동화 (Github Actions)AOS 2023. 11. 19. 02:10
캐치 테이프를 개발하며 CI/CD 를 구축하게 되었습니다. CI 는 다른 팀원 분이 맡아주셨고, 저는 Github Action 을 이용하여 태그를 푸쉬하여 apk 파일을 빌드하고 파일을 release 하는 워크플로우 를 만들게 되었습니다. Github Action을 처음 사용해봐서 Github Action 이 뭔지 알아보았습니다. Github Actions 이란? 공식문서 Github 에서 제공하는 CI/CD 플랫폼으로 Workflow를 구성하여 빌드, 테스트, 배포를 자동화시키는 파이프라인을 구축할 수 있습니다. Github Action 구성요소를 살펴보자 Workflows Workflow는 YAML 파일로 정의되며 Repository의 이벤트에 의해 트리거 됩니다. Repository의 .github..
-
[Android] Clean Architecture 기반의 Multi Module 도입하기AOS 2023. 11. 15. 11:43
네이버 부스트 캠프에서 안드로이드 프로젝트 설계를 하면서 Clean Architecture 기반의 Multi Module 도입하기 로 결정했다. 이전에도 관련 글을 작성한적이 있는데 미흡한 것 같아서 다시 작성해보려고 한다. 이 전에 프로젝트를 할 때, Domain layer 가 없는 안드로이드 앱 아키텍처 가이드를 기반으로 개발하였다. 거의 모든 비즈니스 로직이 서버에 있었고, 빠른 속도로 개발하고 출시해야했기 때문에 domain layer를 포함하지 않았다. 간단한 기능들만 있을 때는 위의 구조로도 커버가 가능했다. 하지만 점점 서비스가 커지고 비즈니스 로직이 늘어날 수록 view model이 복잡해지고 코드를 파악하기 어려워졌고, 반복되는 비즈니스 로직들도 생겨났다. Domain layer 를 도입..
-
[Android] LiveData에서 StateFlow 이전한 이유 (LiveData VS StateFlow)AOS 2023. 7. 5. 19:07
🚜 LiveData에서 StateFlow(Flow)로 이전한 이유? 플레옹 프로젝트는 domain layer가 없는 안드로이드 앱 아키텍처 가이드를 기반으로 개발하였다. 거의 모든 도메인 로직이 백엔드 서버에 있어서 클린 아키텍처로 구현할 이유가 없었고 빠른 속도로 개발하고 출시해야했기 때문에 domain layer를 포함하지 않았다. 하지만 Marvel 프로젝트를 클린아키텍처(domain layer가 있는)기반으로 진행하였다. Domain Layer는 다른 프레임워크에서도 사용할 수 있도록 Android에 의존성을 가지지 않은 순수 Java/Kotlin 코드로 구성해야하는데 LiveData는 Android 플랫폼에 종속적이다. 그래서 Domain Layer에 Android 에 의존성이 없는 Flow를 ..
-
[🏝 이펙티브 코틀린] 4 추상화Book/Effective Kotlin 2023. 7. 4. 16:09
🏐 item 26 함수 내부의 추상화 레벨을 통일하라 추상화 레벨 통일 원칙(Single Level Of Abstraction, SLA) 이란? 컴퓨터 과학이 높은 레벨과 낮은 레벨을 확실하게 구분하고 있는 것처럼, 함수도 높은 레벨과 낮은 레벨을 구분해서 사용해야한다는 원칙 높은 레벨의 모듈 - 비즈니스 로직 낮은 레벨의 모듈 - 입력과 출력을 나타내는 모듈(view, http 요청 처리 등) 계층이 잘 분리된 프로젝트 = 좋은 프로젝트 🏐 item 27 변화로부터 코드를 보호하려면 추상화를 사용하라 상수 추출 함수 (동작 래핑) 클래스 (함수 래핑) 인터페이스 특수한 객체 (보편적인 객체 래핑) 어떻게 균형을 맞출까? 추상화의 균형을 찾는 것은 거의 감각에 의존해야하는 예술에 가깝다. 그래도 사용할 ..
-
[Python] 위상정렬algorithm/개념 2023. 6. 16. 19:49
🔎 위상 정렬 이란? 사이클이 없는 방향 그래프 (DAG) 의 방향에 맞게 모든 노드를 순서대로 나열하는 것 진입 차수 : 특정한 노드로 들어오는 edge 의 수 진출 차수 : 특정한 노드에서 나가는 edge 의 수 작동 순서 1. 진입 차수가 0인 모든 노드를 큐에 넣는다. 2. 큐가 빌 때 까지 다음을 반복한다 큐에 우너소를 꺼내 해당 노드에서 나가는 간선 제거 새롭게 진입 차수가 0이 된 노드를 큐에 삽입 큐에 들어온 순서 = 위상 정렬 결과 📋 example) 📜 code from collections import deque # 노드의 개수와 간선의 개수를 입력 받기 v, e = map(int, input().split()) # 모든 노드에 대한 진입차수는 0으로 초기화 indegree = [0]..
-
[Python] 크루스칼 알고리즘 / MST / 최소 신장 트리algorithm/개념 2023. 6. 16. 18:47
🔎 크루스칼 알고리즘이란? 대표적인 최소 신장 트리 알고리즘이다. 그리디 알고리즘으로 분류된다. 신장트리란? 그래프에서 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프이다. 최소신장트리란? 하나의 그래프에서 많은 신장트리 중에 최소한의 비용으로 구성된 신장트리이다. 동작 과정 1. 간선 데이터를 비용에 따라 오름차순 정렬 2. 간선을 하나씩 확인하면서 현재의 간선이 사이클을 발생시키는지 확인 사이클 발생 O > 최소 신장 트리에 포함 X 사이클 발생 X > 최소 신장 트리에 포함 O 3. 모든 간선에 대하여 2를 반복 cost 가 낮은 edge 부터 차례대로 사이클이 발생하는지 확인합니다. 이때 union-find 가 활용되는데 아래 게시물을 참고해주세요. 2023.06.16 - [algori..
-
[Python] 백준 1717번/집합의 표현/유니온파인드 Union Findalgorithm/문제 2023. 6. 16. 17:55
https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작 www.acmicpc.net ⚡️ 문제 설명 전형적인 Union Find 문제! union find 개념을 안다면 바로 풀 수 있는 문제다. 2023.06.16 - [algorithm/개념] - [Python] Union - Find 유니온 파인드/서로소 집합 [Python] Union - Find 유니온 파인드/서로소 집합 🔎 Union Find (서로소 집합) 란? 서로소 부분 집합들..