분류 전체보기 59

소프트웨어 정적 분석(Static Analysis)이란?

문제 상황이번에 회사 프로젝트가 출시 준비에 들어가면서 개발 중인 코드를 다른 회사에 정적 분석을 맡기게 되었습니다. 그래서 이번 기회에 정적 분석이 무엇인지, 왜 해야하는지 조사하였습니다. 정적 분석 정의정적 분석은 소프트웨어 개발 과정에서 소스 코드, 바이너리 코드 또는 애플리케이션을 실행하지 않고 검사하는 기술입니다. 이 분석을 통해 코드에서 안티 패턴, 코딩 오류, 보안 취약점, 스타일 문제 등을 발견할 수 있습니다. 정적 분석 도구는 코드를 논리적으로 분석하고 복잡한 알고리즘을 사용하여 잠재적인 문제점을 식별합니다. 정적 분석 필요성품질 향상: 개발 초기 단계에서 코드의 버그와 취약점을 식별하여 수정함으로써 소프트웨어의 전반적인 품질을 향상 시킬 수 있습니다. 이는 추후 발생할 수 있는 오류를 ..

카테고리 없음 2024.09.08

Firebase Cloud Messageing 수신 기능 구현(Compose)

문제 상황사용자가 프로모션 알림을 앱을 사용하지 않을 때도 이러한 알림을 받을 수 있어야 합니다. 구현 순서firebase 프로젝트 생성 및 google-service.json 파일 다운로드필요한 종속성을 build.gradle에 선언AndroidManifest에 service 추가FirebaseMessagingService을 상속 받아서 구현 구현 방법Firebase Cloud Messaging을 활용하여 앱에서 프로모션 알림을 수신하고 처리하는 구현 방법을 다음 단계별로 설명합니다  1. 프로젝트 설정google-services.json 파일을 프로젝트에 추가합니다.필요한 종속성을 build.gradle에 선언합니다.// appplugins { id("com.google.gms.google-se..

질문 정리 2024.08.28

안드로이드 앱 난독화 알아보기

문제 상황팀 개발자분이 회사 안드로이드 앱이 난독화가 필요할 것 같다고 하셔서, 준비를 하게 되었습니다. 이전에 했던 개인 프로젝트들을 스토어에 올릴 때, abb 파일을 올리면 Progard 혹은 R8을 사용해서 난독화된 코드를 사용하라는 경고 메세지를 본 적이 있습니다. 이번 기회에 앱 난독화는 왜 해야하는지, 어떻게 하는 것인지 정리하려고 합니다. 난독화난독화는 코드의 가독성을 떨어뜨려, 소스 코드를 분석하거나 역공학하는 것을 어렵게 만드는 기법입니다. 난독화를 통해 코드의 변수명, 메서드명, 클래스명을 의미 없는 문자열로 변환하거나, 코드의 구조를 복잡하게 만들어서 코드를 읽기 어렵게 만듭니다. 이는 주로 소스 코드의 보안을 강화하고, 소스 코드의 무단 복제나 악의적인 사용을 방지하기 위해 사용됩니..

질문 정리 2024.07.14

[Dagger/MissingBinding] UserData cannot be provided without an @Provides-annotated method.

문제 상황Dagger에서 발생하는 MissingBinding 오류는 종속성 주입 과정에서 필요한 객체를 제공할 방법이 없을 때 나타납니다. 이 경우 UserData 객체에 대한 의존성을 해결하기 위해 적절한 제공 메커니즘을 설정해야 합니다. UserData가 객체로 정의되어 있기 때문에, 이 객체의 인스턴스를 주입할 수 있도록 Dagger 설정을 추가해야 합니다. UserData 제공 설정UserData는 이미 object로 선언되어 있으므로, Dagger 모듈에서 이를 직접 제공하는 방법으로 접근할 수 있습니다.UserData를 Dagger 컨테이너에 등록하여 다른 컴포넌트에서 UserData를 주입받을 수 있도록 설정합니다. 이를 위해 @Provides와 @Singleton 어노테이션을 사용하여 Us..

질문 정리 2024.07.13

[Dagger/DependencyCycle] Found a dependency cycle

문제 상황Dagger에서 "Found a dependency cycle" 오류는 Dagger의 종속성 주입 과정에서 의존성 사이클이 감지될 때 발생합니다. 이는 하나 이상의 클래스가 서로를 직접적이거나 간접적으로 의존하고 있어서 순환 의존성이 생긴 경우입니다. 이러한 순환 의존성은 Dagger가 의존성 그래프를 구성할 때 종료 조건을 만족시키지 못해 발생하는 문제입니다. 문제 분석TokenAuthenticator: Authenticator가 ApiService: interface를 필요로 하고, 동시에 ApiService interface가 TokenAuthenticator:Authenticator를 포함하는 OkHttpClient: OkHttpClient를 필요로 하는 설정에서 순환 의존성이 발생할 수..

질문 정리 2024.07.12

소프트웨어 개발 구현 단계에서 검증해야하는 보안 점검 내용

문제 상황소프트웨어 개발 구현 단계에서 검증해야하는 보안 점검 내용은 총 7가지로, 입력 데이터 검증 및 표현, 보안 기능, 시간 및 상태, 에러처리, 코드 오류, 캡슐화, API 오용이 있습니다. 이중 입력 데이터 검증 및 표현, 보안 기능, 코드 오류, 캡슐화 부분에 대해서 정리하겠습니다. 입력 데이터 검증 및 표현입력 데이터 검증 및 표현은 입력 데이터로 인한 문제를 예방하기 위해 구현 단계에서 반드시 검증해야 하는 보안 점검 항목입니다.SQL 삽입(SQL Injection)웹 응용 프로그램에 SQL을 삽입하여 내부 데이터베이스 서버의 데이터를 유출 및 변조하고, 관리자 인증을 우회하는 보안 약점입니다.동적 쿼리에서 사용하는 입력 데이터가 예약어 및 특수 문자가 입력되지 않도록 필터링하게 설정하여 ..

질문 정리 2024.07.08

Secure SDLC이란 무엇일까?

Secure SDLCSecure SDLC는 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보안을 위한 프로세스를 추가한 것을 말합니다. SDLC는 소프트웨어 개발 생명주기를 줄인 말로, 소프트웨어를 개발하기 위한 모든 과정(요구사항 분석, 설계, 구현, 테스트, 유지보수 등)을 단계별로 나눈 것입니다. Secure SDLC의 대표적인 방법론CLASP(Comprehensive, Lightweight Application Security Process)CLASP는 Comprehensive, Lightweight Application Security Process의 약자로, 소프트웨어 개발 초기 단계에서 보안을 강화하기 위해 개발된 방법론입니다. 개발 초기에 보안을 고려하는 것을 중요시하며, 다양한 보안..

질문 정리 2024.07.03

안드로이드에서 CRC32로 무결성 체크하기

문제 상황펌웨어 업데이트나 블루투스 통신을 통해 데이터를 안전하게 전송하기 위해 CRC32를 사용하여 데이터의 무결성을 검사하려고 합니다. CRC32은 어떤 것이며, 안드로이드 앱에서 이를 어떻게 사용할 수 있는지 정리해 보겠습니다. 왜 CRC32를 사용해야하는가?CRC32는 데이터의 무결성을 검증하기 위한 체크섬 기법 중 하나입니다. 데이터가 전송 도중 변경되었는지 여부를 간단하게 확인할 수 있어, 데이터 손상을 감지하고 재전송 요구 없이 효율적으로 오류를 처리할 수 있습니다.체크섬(Checksum)은 주어진 데이터의 일부를 특정 알고리즘을 통해 계산하여 생성됩니다. 이 값은 데이터 블록이나 파일의 모든 비트를 고려하여 생성되며, 일반적으로 고유한 데이터 시그니처 역할을 합니다. 데이터가 손상되었는지 ..

질문 정리 2024.07.02

안드로이드 PDF 파일 저장하기 구현

문제 상황앱에서 PDF 파일을 저장하는 기능이 필요합니다. 안드로이드의 경우 버전에 따라서 필요한 권한과 사용 함수가 다르기 때문에 안드로이드 버전을 체크하고 다운로드 하는 기능을 구현해야합니다. 제 프로젝트는 minSdk가 26, targetSdk가 34이기 때문에 26 이상의 버전들에 대해서 처리해야합니다. 안드로이드 6 (API 레벨 23) 이상런타임 권한 요청: 파일 시스템에 접근하기 위해 사용자로부터 스토리지 접근 권한을 런타임에 요청해야 합니다. READ_EXTERNAL_STORAGE와 WRITE_EXTERNAL_STORAGE 권한이 필요합니다. 안드로이드 10 (API 레벨 29) 이상스코프드 스토리지 도입: 애플리케이션은 자신의 내부 저장소 또는 특정 유형의 파일(예: 사진, 비디오, 오디..

질문 정리 2024.06.28

컴포즈 블루투스 권한 없을 때 처리

문제 상황현재 블루투스 권한이 없을 때, 스캔을 시도하면 버튼을 눌러도 사용자에게 피드백이 없습니다. 요구 사항해당 기능을 사용하려고 할 때, 권한 체크를 수행하고 권한이 없을 경우, 다음의 조치를 취해야 합니다.이전에 권한 요청을 했다면권한이 필요한 이유를 팝업으로 표시설정으로 이동할 수 있는 버튼 제공이번이 권한 요청이 처음이면바로 권한을 요청 블루투스 통신을 위해 필요한 절차휴대폰 블루투스가 켜져 있는지 확인하기앱에서 블루투스 관련 권한 받기스캔하기기기 연결하기 블루투스 상태 모델앱에서 블루투스 상태관리를 위하여 다음의 모델을 사용했습니다.DISABLED: 사용자에게 블루투스를 활성화할 것을 요청합니다.PERMISSION_DENIED: 사용자가 필요한 권한을 부여하지 않았을 때, 설정으로 유도하여 ..

질문 정리 2024.06.27