saltfactory's blog


Ubuntu에서 Node.js 설치후 axconfig:port 1 not active 에러 해결하기

서론

Node.js는 윈도우즈, 맥, unix 계열 시스템에서 모두 설치가 가능하다. 단일 코드로 여러 플랫폼에 동작할 수 있는 환경을 가지는 것은 개발자에게 행복한 것이다. 연구소에서 푸시서버를 Springframework를 Node.js로 마이그레이션 하기로 결정하고 맥에서 코드를 개발후 Ubuntu에 동작 테스트를 하기 위해서 Ubuntu에 Node.js를 설치했다.

sudo apt-get install node

Ubuntu에서 apt-get은 FresBSD와 마찬가지로 패키지를 관리하는 툴로 CentOS의 yum과 같은 기능을 가진 툴이다. apt-get을 사용하면 패키지 업데이트가 매우 편리한다. 아직 버전업이 활발히 이루어지고 있는 nodejs를 사용하기 위해서 nodejs를 apt-get으로 설치했는데 설치후 node를 실행하면 다음과 같은 에러를 발생하면서 실행이 되지 않는 문제가 생긴다.

axconfig : port 1 not active
axconfig : port 2 not active

Continue Reading

Node.js와 Google Play Service를 이용하여 안드로이드 푸시서비스 구현하기(GCM)

서론

번 사내 프로젝트는 아이폰, 안드로이드 푸시 프로바이더를 springframework에서 Node.js로 마이그레이션하는 작업이 진행되었다. 첫번째 포스팅으로 “Node.js로 푸시서비스 구현하기 1. 아이폰(iOS) 푸시서버 구현하기”에서는 node-apn을 이용해서 아이폰 푸시 프로바이더를 구현한 간단한 예제를 소개하였고, 이번 포스팅에서는 node-gcm을 이용해서 안드로이드 푸시 프로바이더를 구현하는 방법을 소개하고자 한다.

우리는 기존에 C2DM(https://developers.google.com/android/c2dm/?csw=1)을 사용해서 안드로이드 푸시를 구현했었다. 그러나 링크를 보면 알겠지만 C2DM은 2012년 6월 26일부터 더이상 업데이트를 지원하고 있지않다. 그럼 안드로이드 푸시는 어떻게 구현할 수 있는가? 구글에서는 푸시서비스를 위해서 GCM(Google Cloude Messaging) http://developer.android.com/google/gcm/index.html 을 제공하고 있다.

이 글은 2015-06-09-최신 Android Studio, GCM(Google Cloud Messaging), Node.js를 이용하여 Android 푸시 서비스 구현하기 글로 업데이트 되었습니다.

Continue Reading

Node.js를 이용하여 iOS 푸시서비스 구현하기

서론

이번 프로젝트에서는 Springframework고 구현되어 있는 Push Provider를 nodejs로 마이그레이션하는 작업을 진행하였다. Provider는 일단 간단하게 푸시 전송할 데이터를 사내 데이터베이스 서버에서 RESTful API로 푸시 전송할 항목을 가져와서 Provider 서버의 데이트베이스에 저장하고 순차적으로 push를 전송하는 간단한 로직을 가지고 있는데 Springframework로 구현하니 단순히 Push 서비스만하는데 너무 큰 프레임워크를 도입한 것 같아서 보다 간단한 프레임워크 선정이 필요했고, async push provider를 구현하기 위해서 nodejs를 최종으로 결정해서 구현하기로 했다. 다른 내부적인 로직은 다른 포스팅에서 소개하기로 하고, nodejs 푸시서비스 구현하기 글에서는 Node.js로 아이폰과 안드로이드 Push Provider 서버를 구현하는 글을 소개한다. 첫번째로 아이폰 푸시서버 구현하기에서는 iOS 기계에 푸시를 전송하기 위해서 Push Provider 서버를 구현하는 방법을 간단히 소개한다.

Continue Reading

안드로이드 비동기 프로그램을 위해 Java로 Callback 구현하기

서론

Javascript로 프로그래밍을 할 때 가장 흥미로운 것이 바로 callback method를 파라미터로 넘겨서 call by name 으로 실행할 수 있다는 것이였다. 물론 다른 언어도 이런 function을 파라미너로 넘기로 실행할 수 있겠지만 다른 프로그램 언어로 프로그래밍을 할 때는 잘 사용하지 않았던 것을 javascript로 프로그래밍할 때는 자연스럽게 사용했던 것 같다. 연구소에서 iOS 개발을 하다가 android 어플을 개발하게 되었을 때 objective-c의 라이브러리에서 흔히 볼 수 있는 delegate pattern을 사용하여 개하는 코드를 Java의 interface로 objective-c의 delegate를 흉내내어 만들어 사용했다. 이때, delegate를 사용하기 위해서 interface에 메소드를 지정해야하는데 약간의 문제가 있었다. 바로 Java의 inaterface에 정의한 메소드들은 optional 할 수 없다는 말이다. 즉, interface에 지정한 메소드들은 모두 구현하는 객체에서 모두 구현하던지 비우던지 해야한다. 이 때문에 불필요한 코드가 많이 생성되는 문제를 겪었다. objective-c에서는 delegate 메소드를 구현하더라도 optional하게 사용할 수 있게 때문에 delegate를 보다 유연하게 사용할 수 있었다. 그래서 난 외부에서 구현메소드를 다른 객체의 메소드 안에 삽입해서 결합도를 난추고 외부에서 구체적인 메소드를 구현하면서도 여러곳에 사용할 수 있는 방법으로 코드를 변경하고 싶었는데 이때 Javascript에서 function을 파라미터로 넘겨서 구현체를 외부에서 작성하는 것에 대한 아이디어를 얻어서 Java Callback을 찾아보기로 했다.

Continue Reading

brew update 명령에서 The following untracked working tree files 문제 해결

homebrew는 Mac에서 설치되지 않은 Unix 패키지를 관리하기 위한 툴로 맥 운영체제로 개발 연구하는 사람들에게 가장 인기 있는 툴 중에서 하나이다. 좀더 자세한 글은 Homebrew를 이용하여 Mac OS X 에서 Unix 패키기 사용하기를 참고하자. MariaDB를 homebrew를 이용해서 설치하려고 그동안 homebrew 를 업데이트를 한 적이 없어서 업데이트를 하는데 다음과 같은 에러를 보이면서 업데이트가 되지 않는 문제가 발생했다.

Continue Reading