All(264)
-
[Javascript] 배열 초기화 시 new Array()보다는 []를 사용하자
[Javascript] 배열 초기화 시 new Array()보다는 []를 사용하자 The Javascript Handbook을 읽던 도중 new Array()를 사용하여 배열을 초기화하는 것은 권장하지 않는다는 내용을 발견했는데, 그 이유에 대해서는 따로 기술하지 않고 있었다. 다른 분들께 질문을 해보니 직관성 및 일관성과 관련된 내용과, ECMA문서의 22.1.1.2 Array(len)항목의 내용을 볼 수 있었다. 아래는 해당 내용을 정리한 내용이다. (사실 서문에 모든 내용이 다 들어가있다' ㅅ';) The Javascript Handbook의 Arrays챕터에 기재되어있는 Initialize array항목을 보면, typed array를 초기화하는 게 아닐때는 new Array()로 ..
2019.11.28 -
nginx에서 flask로의 proxy pass (reverse proxy)
가볍고 속도가 빠른 Nginx를 메인으로 사용하고, 실제 API등의 처리는 호환성 및 라이브러리가 다양한 Flask를 사용하는 환경을 구축하게 됐다. 두 개의 서버가 돌아가고 있는 상황인데, 외부에서 Flask에 직접 설정할 수 없도록 로컬 포트를 할당해준다. 그리고 Nginx의 특정 패스로 접근하면, Flask로 proxy pass하여 Flask에서 내용을 처리하도록 설정한다. 우선은 Flask 샘플코드를 사용하여, 정상적으로 실행되는지 확인하자. 아래의 코드는 Flask의 특정 경로로 접근할 시, Plain text를 반환하는 코드이다. from flask import Flask app = Flask(__name__) @app.route('/hi') def hi(): return ..
2019.11.20 -
Retrofit2를 사용하여 서버의 Digest 인증을 처리하기
올해가 삼제긴 삼제인지, 어쩌다보니 Digest와 관련된 내용만 세 번을 처리하게 됐다. 요즈음에는 OAuth2.0을 사용하는 경우가 많아서, Digest 인증을 처리할 일은 거의 없겠지만... 아무튼 이번에는 Retrofit2로 Digest 인증을 처리하는 내용을 다룬다. 우선 Android에서는 iOS와 달리 Basic/Digest 인증에 대한 처리를 지원하지 않기 때문에, 직접 구현해야한다. 이는 Volley를 사용하거는 경우에도 별반 다르지 않다. Volley로 구현되어있는 내용을 Retrofit2로 교체하는 작업이 한창이었기 때문에 내심 별 일 없겠거니 생각하고 있었는데, 레거시 코드를 살펴보니 Deprecated된 Apache 라이브러리를 사용하여 처리하고 있었다. Apache 라이브러리를 사..
2019.11.19 -
CLEARTEXT communication to [TARGET_ADDRESS] not permitted by network security policy
HTTP 통신 라이브러리를 Volley에서 Retrofit2로 변경한 뒤, targetSDKVersion값을 28로 변경하자 잘 되던 HTTP 통신이 동작하지 않는다. 이상하다싶어서 브레이크 포인트를 걸고 확인해보니 onResponse도 아닌 onFailure에 걸렸는데, CLEARTEXT communication to [TARGET_ADDRESS] not permitted by network security policy에러가 뜨고 있었다. 다른게 아니라 Android 9.0부터는 기본적으로 HTTP로 접속하는 것을 막기 때문이라고 한다. (참고: Protecting users with TLS by default in Android P 물론 서버에서 HTTPS로 설정할 수 있다면 만사 OK지만, 나의 경..
2019.11.08 -
Retrofit2를 이용해서 서버로부터 Content-type이 image/jpeg로 이미지를 받아 Bitmap 객체로 처리하기
API를 호출했을 때 Content-type이 image/jpeg로 설정되는 경우, 응답에 JPEG파일이 실려오게 된다. 크롬의 개발자 도구에서 네트워크 탭을 통해 응답을 확인해보면, 실제로 이미지 파일이 응답 본문(Response Body)에 실려오는 것을 볼 수 있다. 그렇다면 Android에서 Retrofit2를 이용하여, 이러한 Bitmap을 처리하려면 어떻게 해야할까? 우선은 아래와 같이 interface를 작성해준다. 파일 용량이 적을 경우에는 @Streaming을 생략해도 잘 동작한다. Call에 넘겨주는 ResponseBody는 okhttp3패키지의 ResponseBody이다. JAVA를 사용하여 작성한 코드 public interface DonwloadImage { @GET("images..
2019.11.05 -
Kotlin <-> Java 클래스를 서로 참조 못할 때(Can not find symbol)
gradle에 다음과 같은 설정을 빼먹으면, Java로 선언한 클래스가 빌드 타임에 Kotlin으로 생성한 클래스를 참조하지 못한다. 빌드하기 전 IDE상에서는 잘 참조하고 있는 것처럼 표시하며, app의 build.gradle에서 선언해줬다 하더라도 하위 모듈에서는 해당 플러그인을 적용하도록 다시 선언해줘야 한다. 일반적으로 프로젝트 생성 시점에 언어를 Kotlin으로 선택하면 자동으로 적용되는 항목이기에 몰라도 크게 문제가 될 상황은 없지만, 레거시 코드를 부분적으로 참조한다거나 리펙토링할 때 헤멜 수 있는 문제이다. apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'
2019.11.03