본문 바로가기

전체 글

(105)
[KOTLIN IN DEPTH] Kotlin Coroutine Concurrency 2 코루틴 빌더 코루틴을 실행하기 위한 구체적인 영역을 제공하기 위해 여러 가지 함수를 제공하는데 이런 함수를 Coroutine Builder라고 부릅니다. 코루틴 빌더는 CoroutieScope Instance의 확장 함수로 쓰이며 기본적으로 GlobalScope 객체가 있습니다. GlobalScope 를 사용하면 독립적인 코루틴을 만들 수 있고 이 코루틴은 자신만의 작업을 내포할 수 있습니다. import kotlinx.coroutines.* import java.lang.System.* fun main() { val time = currentTimeMillis() GlobalScope.launch{ delay(100) println("Task 1 finished in ${currentTimeMillis..
우당탕탕 Node JS Server 다시보기 이미지를 전송 받는 서버를 위해 고군분투 했던 저의 피 땀 눈물을 담은 글입니다. 나중에 똑같은 일을 두번 겪고 싶지 않아서 제가 했던 과정들을 기록해 볼게요 첫번째 난관은 바로 POST 요청 경로를 지정하는 것 이었습니다. Node.JS 서버만 사용했다면 손쉽게 해결할 수 있었을 탠데 저는 Nginx를 사용해서 리버스 프록시를 해놓은 상태였습니다. 즉, 직접 Node 서버에 접근할 수 없고 Nginx가 대신 요청을 받아 서버로 요청을 전송하는 구조입니다. Nginx.config 파일을 한번 살펴보겠습니다. # nginx.conf upstream nodeserver { server node:3000; } server { listen 80; location / { proxy_pass http://nodes..
Android Gallery Permission https://chanho-study.tistory.com/48 Android Runtime Permission Permission 퍼미션은 AndroidManifest.xml에 들어가는 설정입니다. 안드로이드 컴포넌트를 이용한 앱과 앱 사이의 연동이 빈번한데, 특정 앱이 을 부여했다면 그 앱을 이용하는 앱은 을 선언해야 합니다. chanho-study.tistory.com 이전 글에서 안드로이드 RunTime Permission에 대해 알아 봤으니 이제 프로젝트에 적용해 보겠습니다. 가장 먼저 갤러리에 접근하기 위한 권한을 선언해 줍니다!! AndoridManifest.xml 외부 저장소에 대한 읽기와 쓰기 권한을 요청하기 위한 상수 배열을 정의 해줍니다. class Constants { compani..
Android Runtime Permission 안드로이드 어플리케이션은 예전엔 AndroidManifest.xml 파일에 권한을 명시해주기만 하면 됐지만 Android 6.0(API 수준 23) 이상의 경우 안드로이드 정책에 따라 사용자가 직접 권한을 허용 해야 합니다. Test App에서 Target APP의 컴포넌트를 실행한다고 가정했을 때, Target App에서 해당 컴포넌트의 을 부여했다면 testApp에서 해당 컴포넌트를 실행하기 위해선 반드시 을 선언해 사용해야 합니다. [Android Runtime Permission 공식 문서] 런타임 권한 요청 | Android 개발자 | Android Developers 런타임 권한 요청 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 모든 Android 앱은 액세스..
[Kotlin] 코틀린의 Null 안정성 자바와 마찬기로 코틀린의 참조 값에는 아무 값도 참조하지 않는 null이라는 값이 있습니다. 이 참조 객체는 어떠한 할당도 받지 않았다는 것을 뜻하죠. 자바에서는 모든 참조 타입의 변수에 null을 대입할 수 있지만 이 참조 타입에 정의된 메서드나 프로퍼티를 사용하려 하면 NullPointerException을 발생시킵니다. Java나 JSP 하면서 질리도록 많이 본 기억이 나네요 코틀린 Null 안정성 코틀린은 이런 문제를 해결하기 위해 Nullable과 Non-Null타입으로 프로퍼티를 선언할 수 있습니다. Nullable 코틀린에서 null이 될 수도 있는 값을 받는 함수를 작성하려면 파라미터 타입 뒤에 ? 를 붙여 null이 될 수 있는 타입으로 지정해야 합니다. var nullable: Stri..
OkHTTP httpLoggingInterceptor 이번엔 OKHttp Logging Interceptor를 사용하여 HTTP 통신 로그를 기록하는 방법 입니다. 단순히 Retrofit 을 사용해 네트워크 통신만 하려 했는데 하면 할 수록 다양한 방법들을 접하는게 너무 잼있네요 okHttp3 logging interceptor을 사용하기 위해 Gradle Dependencis에 아래 빌드 종속 항목 중 okhttp 관련 종속성을 추가해주세요. implementation 'com.squareup.okhttp3:logging-interceptor:4.9.2' 메소드를 그대로 사용해도 되지만 제가 원하는 형태대로 메시지를 만들고 싶어서 오버라이딩 해줬습니다. private fun httpLoggingInterceptor(): HttpLoggingIntercep..
Retrofit Network Time out 안드로이드에서 서버로 이미지를 전송하기 위해 REST API로 통신 하는 과정에서 시간이 오래 걸려 Android Client에서 connection Error로 인식해 오류가 발생 했습니다. Retrofit은 기본적인 네트워크 타임아웃 설정을 가지고 있지만 다양한 상황에서 기본 타임아웃 시간을 변경해야 합니다. Retrofit의 기본 타임아웃 시간 설정값 Connection timeout : 10초 Read timeout : 10초 Write timeout : 10초 Connection Timeout 네트워크 요청을 시작한 후 서버와의 TCP handshake가 완료되기까지 지속되는 시간으로 Retrofit이 설정된 연결 시간 제한 내에서 서버에 연결할 수없는 경우 해당 요청을 실패한 것으로 계산합니다..
안드로이드 HTTP 보안 정책 안드로이드와 서버와의 통신중 에러가 발생했습니다. 원인은 안드로이드 9 Pie 부터 강화된 네트워크 보안 정책으로 HTTPS가 아닌 HTTP 프로토콜은 안드로이드가 보안상의 이유로 접속을 제한 합니다. HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터의 암호화 및 통신을 제공합니다. 보통 로컬 환경에서 테스트 경우 AndroidManifest.xml 파일에 android:usesCleartextTraffic="true"을 설정해주거나특정 도메인만 허용 시키는 xml 파일을 작성해 테스트하는 방법이 있는데 이왕 하는거 SSL에 대해서 알아보고 직접 적용 시켜 보겠습니다. 제목은 안드로이드 HTTP 보안 정책인데 사실 내용은 기존 Nginx 서버에 SSL 적용하기랍니다 HTTPS 및 SSL을 사용한 보안..