분류 전체보기
[Android] WorkManager를 활용해 주기적인 백그라운드 작업 실행하기 (15min ver)
지속적인 디버깅 탐지 (15min ver)WorkManager의 이슈 발생Workmanager의 주기를 15분으로 설정했으나 15분보다 더 짧은 시간에 work 발생앱 실행시 동시다발적으로 여러개의 work 발생문제상황 인식 및 분석1. MainActivity에 생성한 detectDebug WorkManager의 WorkInfo의 state를 살펴봄⇒ 여러개의 work가 한번에 enqueue되고, doWork()가 실행되는 것을 볼 수 있었음.2. Application에 등록한 createWorkManager가 여러번 실행되는 것인가? 라고 생각 함⇒ Application의 onCreate(), createWorkManager()의 함수 호출을 확인해 봄15분보다는 짧은 시간에 수행되어서 장점이라고 생각..
[TIL] 렌더링 : CSR과 SSR
들어가기 전CSR 방식의 렌더링을 하는 어플리케이션에서 발생한 이슈를 해결하기 위해 SSR로 변경한 경우가 있다고 하였다.왜 해결되는 건지 SSR과 CSR이 갖는 장단점을 바탕으로 이를 학습하고자 한다.렌더링브라우저 렌더링브라우저 렌더링이란 브라우저가 서버로부터 요청해 받은 내용을 브라우저 화면에 표시하는 작업을 의미한다. 브라우저는 서버로부터 HTML, CSS, JavaScript 문서를 전달받고 브라우저 엔진이 문서를 해석해 브라우저 화면을 그려주는 것이다.그리고 이러한 브라우저 렌더링은 SSR 과 CSR 방식으로 이루어진다.어플리케이션에서의 응용우리가 사용하는 여러 어플리케이션은 다 같은 어플리케이션이 아니다.크게 3가지의 종류로 나눌 수 있다.웹앱모바일 기기의 크기로 줄인 Web을 의미한다.하이브..
[Android/공부] 안드로이드 라이브러리 / AAR 만들기
라이브러리란?라이브러리란 소프트웨어 개발 시 사용되는 프로그램의 구성요소로, 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것이다. 라이브러리는 동작하는 완전한 프로그램이 아닌 특정 부분 기능만을 수행하도록 제작된, 컴파일되어 기계어 형태로 존재하는 프로그램이다.안드로이드 라이브러리안드로이드 라이브러리는 구조적으로 안드로이드 앱 모듈과 동일하다.안드로이드 라이브러리에는 소스코드, 리소스 파일, 안드로이드 manifest 등 앱을 빌드하는데 필요한 모든 것이 포함되어 있다.하지만 이는 기기에서 실행되는 apk로 컴파일 되는 것이 아닌 안드로이드 앱 모듈의 종속 항목으로 사용할 수 있는 AAR로 컴파일 된다.AAR파일은 다음과 같은 기능을 제공한다.리소스와 manifest 파일이 포함되어 있을 수 있다..
[Android/공부] JNI 활용 안드로이드 디버깅 / USB 탐지 (JAVA)
안드로이드 디버깅 탐지란?안드로이드 모바일 앱에서 LLDB, GDB, IDA 같은 동적 디버깅 도구를 붙였을 때 디버깅이 가능하다면 이는 취약점이 될 수 있다.앱이 동작할 때 동적 디버깅 도구를 활용한 디버깅 가능 여부에 따라 취약한지 결정된다.LLDB, GDB, IDA와 같은 동적 디버깅 도구로 디버깅이 가능하다면 공격자는 이를 통해 코드 흐름 파악, 메모리 상태 분석, 실행 흐름을 조작 할 수 있다.따라서 디버깅 탐지 기능을 통해 동적 도구를 활용한 디버깅을 방지 할 수 있다.디버깅 탐지 기능 설정디버깅 탐지 기능은 아래의 방법으로 존재한다.디버깅 시 사용되는 ptrace 시스템 호출 차단 및 선점ppid를 확인하여 앱을 실행 시킨 프로세스가 디버깅툴인지 확인디버깅에 사용되는 ptrace 탐지안드로이..
[Android/공부] 안드로이드 소스 코드 난독화 R8 / Proguard
1. 코드 난독화 필요성안드로이드 앱을 개발 후 APK 실행 파일을 추출할 수 있다. 또한 추출한 APK를 바탕으로 앱의 소스코드가 분석 가능하도록 디컴파일 할 수 있다.이는 테스트 및 리버스 엔지니어링 목적에는 도움이 되지만, 공격자가 앱의 코드와 동작을 분석하여 취약성을 발견하거나 중요한 데이터를 훔치는 등의 보안의 측면에서는 위험하다.따라서 소스 코드의 분석을 어렵게 만들기 위해 코드 난독화를 적용한다.2. Proguard 란?Proguard는 코드를 난독화 및 최적화를 해주는 무료 오픈소스 툴이다.즉, Proguard는 컴파일된 앱 패키지의 코드를 난독화하여 다른 사람이 해당 패키지를 디컴파일 했을 때 해독하기 어렵게 만드는 일종의 보안 장치이다.이전에 안드로이드 AGP (Android Gradl..
[바킹독 알고리즘] 0x14강 - 투 포인터
투포인터 (Two Pointers)리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘정렬되어있는 두 리스트의 합집합에도 사용됨. 병합정렬(merge sort)의 counquer 영역의 기초가 되기도 합니다.수 고르기특정한 합을 가지는 부분 연속 수열 찾기투포인터 알고리즘의 대표적인 문제입니다.어떤 숫자들의 리스트가 주어질 때, 해당 리스트의 연속 수열의 합이 특정 값을 가지는 것을 확인하는 문제입니다.시작점과 끝점이 첫번째 원소의 인덱스를 가리키도록 한다.현재 부분 합이 M과 같다면 카운트한다.현재 부분 합이 M보다 작다면 end를 1 증가시킨다.현재 부분 합이 M보다 크거나 같다면 start를 1 증가시킨다.모든 경우를 확인할 때까지 2-4번 과정을 반복한다.
[우리의 용기] 인하대학교 탄소중립 sw 아카데미 다회용기팀 어플 디자인
[우리의 용기] : 다회용기 대여 | 반납 서비스인하대학교 탄소중립 INNOVATION SW ACADEMY 활동으로 진행한 프로젝트이다.Android 개발 뿐만 아니라 어플 UI 디자인에도 참여하였다.기간: 2024.04 ~ 2024.06.24 제작도구: Figma
[Android] Retrofit에서 XML 데이터 통신 및 파싱 방법 / RecyclerView XML 데이터 받아오기
들어가기 전 현재 'ITda' 라는 이주 노동자들을 위한 서비스를 개발하고 있다. 나는 현재 뉴스페이지를 개발하고 있고 이 뉴스는 문화체육관광부의 정책뉴스 공공 API를 활용하기로 했다. 하지만 해당 API는 Json이 아닌 XML 형태로만 데이터를 보내주기 때문에 기존에 사용하던 JSON 파싱이 아닌 XML 데이터를 Retrofit에서 파싱해야했다. 따라서 이번 포스팅에서는 XML 데이터를 파싱해 전달받는 방법을 소개하고자 한다. 모든 예시는 아래 API와 함께한다. https://www.data.go.kr/data/15095335/openapi.do 문화체육관광부_정책브리핑_정책뉴스_API문화체육관광부_정책브리핑_정책뉴스는 대한민국 정부의 중요한 정책뉴스, 카드뉴스, 인포그래픽, 사실은이렇습니다 등 ..
[CodeTree/C++] 행복한 수열의 개수 : 시뮬레이션
문제 설명 1이상 100이하의 숫자로만 이루어져 있는 n * n 크기의 격자 정보가 주어집니다. 이때 행복한 수열이라는 것은 다음과 같이 정의됩니다. 행복한 수열 = 연속하여 m개 이상의 동일한 원소가 나오는 순간이 존재하는 수열 n * n 크기의 격자 정보가 주어졌을 때 각 행마다 봤을 때 나오는 n개의 수열과, 각 열마다 봤을 때 나올 수 있는 n개의 수열을 포함하여 총 2n개의 수열 중 행복한 수열의 개수를 세서 출력하는 프로그램을 작성해보세요. 입력 형식 첫 번째 줄에는 격자의 크기를 나타내는 n과 연속해야 하는 숫자의 수를 나타내는 m이 공백을 사이에 두고 주어집니다. 두 번째 줄부터는 n개의 줄에 걸쳐 격자에 대한 정보가 주어집니다. 각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 1..
[CodeTree/C++] 최고의 33위치 : 시뮬레이션
문제 설명 N * N 크기의 격자 정보가 주어집니다. 이때 해당 위치에 동전이 있다면 1, 없다면 0이 주어집니다. N * N 격자를 벗어나지 않도록 3 * 3 크기의 격자를 적절하게 잘 잡아서 해당 범위 안에 들어있는 동전의 개수를 최대로 하는 프로그램을 작성해보세요. 입력 형식 첫 번째 줄에는 격자의 크기를 나타내는 N이 주어집니다. 두 번째 줄부터는 N개의 줄에 걸쳐 격자에 대한 정보가 주어집니다. 각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 0또는 1로 이루어진 N개의 숫자로 나타내어지며 공백을 사이에 두고 주어집니다. 3 ≤ N ≤ 20 출력 형식 N * N 격자를 벗어나지 않으면서, 3 * 3 크기 격자 내에 들어올 수 있는 최대 동전의 수를 출력해주세요 문제 풀이 코드 #incl..
[BOJ/C++] 1946번 : 그리디
문제 설명 언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다. 그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다. 이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규 사원 채용에서 선발할 수 있는 신입사원의 최대 인원수를 구하는 프로그램을 작성하시오. 입력 첫..