Skip to main content

2 posts tagged with "response"

View All Tags

· 4 min read

아래와 같은 단순한 구조를 가진 service에서 android app (Phonegap)이 AJAX로 API server와 SSL 통신을 하고 있다. SSL 설정은 reverse proxy 역할을 하는 NginX에 되어 있는 상태였는데 개발단계에서는 나타나지 않았던 문제가 app publish 이후에 발생해서 현상과 해결책을 정리해본다.

android_ssl

 

1. 현상

App에서 API call을 했는데도 오류나 정상 응답이 떨어지지 않는다. API server 쪽에서 로그를 확인해보니 호출된 기록이 없다. 전혀 호출되지 않는다고 판단할 수 있었다. 혹시나 싶어서 NginX의 로그도 확인해봤는데 access 자체를 하지 않는 것으로 보였다. (호출 후 access log, error log 모두 기록되는게 없음)

두번째 이상한 현상은 android app의 manifest에서 debuggable 설정에 따라 API 호출이 되거나 되지 않는다는 사실이었다. debuggable이 true (debug mode)인 경우에는 API 호출에 문제가 없었는데 publish를 위해 packaging 하려고 debuggable을 false로 바꾸면 호출이 불가능했다.

 

2. 조사

Stackoverflow에서 힌트를 찾았는데 자문자답한 사용자의 얘기로는 android app의 debug mode에서는 인증서 확인을 하지 않는데 그렇지 않은 경우 SSL 인증서를 엄격하게 검사한다고 한다. (http://stackoverflow.com/questions/14363994/android-debuggable-false-causing-jquery-ajax-post-to-fail-in-cordova-phonegap-ec) 그래서 링크된 ssl checker로 API service되는 url (NginX가 처음 받는 url)을 검사해봤더니 다른건 문제가 없었는데 인증서 체인이 제대로 되어있지 않았다. Root CA 인증서가 없다는 내용의 메세지와 함께.

 

3. 해결

Startssl에서 인증서를 발급받아 사용하고 있었는데 생각해보니 도메인에 대한 인증서와 그에 맞는 private key는 발급받았는데 startssl(CA)에 대한 인증서는 없었다. Startssl에서 안내하는대로 ca.pem, sub.class1.server.ca.pem을 추가로(내가 사용하는게 startssl의 class1 certificate) 받아서 기존의 인증서를 합쳐 인증서 체인을 만들고 NginX에 설정했다. (https://www.startssl.com/?app=42)

설정 이후에 다시 SSL 검사를 해보니 아래처럼 문제있던 부분이 정상. Android app도 수정없이 제대로 호출되는 걸 확인했다.

ssl_check

 

 

4. 결론

나의 경우엔 CA의 인증서 하나를 누락한 경우지만 개발할 때 self sign된 인증서를 사용하는 경우도 있는데 이 경우에도 publish 할 때에는 반드시 교체해야 한다. 이 부분은 사실 개발할 때 문제가 없었기 때문에 간과하고 넘어가기 쉬운 부분인데 publish 이전에 packaging 해서 한 번 확인은 해봐야 할 것 같다. 아니면 Android developer site에서 발견한 StrictMode class를 이용하는 것도 방법이 될 수 있을 것 같다. (http://developer.android.com/reference/android/os/StrictMode.html)

· 4 min read

Ch.4는 변수 선언과 기본 연산, for loop에 대한 내용 (Java와 동일)

1. Ch.4에서 소개된 예약어

width : 화면의 가로 크기

height : 화면의 세로 크기

 

 

Ch.5 Response

Ch.5는 주로 interaction을 위해 알아야 하는 함수와 예약어, 방법들을 소개

mouse를 움직일 때 좌표를 알 수 있는 방법 (mouseX, mouseY)과

다른 좌표값들과의 비교 방법, keyboard 입력은 어떻게 구분할 수 있는지를 설명하고 있다.

소개된 일부 함수들은 굳이 사용이 필요없을 수도 있으나

연산의 편의성을 위해 제공하는 것으로 보임

 

1. draw 함수

화면을 구성하는 매 frame 마다 호출되는 함수

 

2. setup 함수

프로그램의 시작 시점에만 한 번 호출되는 함수 (보통 초기화에 이용)

 

3. mouseX, mouseY (예약어)

mouse의 현재 좌표를 의미함 (이동할 경우 변경됨)

 

4. background 함수

화면을 초기화하는 기능이 있으므로 draw에 이용할 경우 잔상없는 이미지 표현 가능

 

5. pmouseX, pmouseY

이전 frame에서의 mouse 좌표를 저장하고 있는 변수 (예약어)

 

6. dist 함수

이전 좌표와 현재 좌표의 거리 차이를 자동 연산하는 함수

 

7. map 함수

좌표를 수식에 의해 매번 변경해야 할 때 자동으로 매핑해주는 함수

 

Example)

float mx = map(mouseX, 0, width, 60, 180);

//의미 : mouseX가 최소 0에서 width까지 변화할 때 mx는 60에서 180까지 연산해서 할당

 

8. mousePressed

예약어로 mouse 버튼이 클릭되었는지 여부를 저장하는 변수 (boolean)

 

9. mouseButton

예약어. 마우스의 어떤 버튼이 클릭되었는지 저장하는 변수 (LEFT or CENTER or RIGHT)

 

커서의 현재 위치가 왼쪽인지 오른쪽인지 도형 내부에 있는지 외부에 있는지 알기 위해서는

각각 도형의 x, y, width, height 등의 수치와 mouseX, mouseY의 크고 작음을 비교해서 연산해야 함

 

10. keyPressed

예약어. 키보드 버튼이 눌렸는지 여부를 저장하는 변수 (boolean)

 

11. key

예약어. 눌려진 key 값을 저장하는 변수 (CODED인 경우는 특수 키로 keyCode(LEFT, RIGHT, ALT, SHIFT, ...)로 비교해야함