라벨이 node인 게시물 표시

python 과 node express 사이 이미지 주고 받기 구현

Client 는 Python 으로 작성 되었으며 Server 는 node express 로 된 시스템입니다. 양쪽 모두 웹소켓을 사용했습니다. 이미지를 서로 주고 받는데 한참을 헤메었네요. 일단 이미지를 base64 로 변환해서 json 으로 패키징 하여 서버에 전송하고 서버에서 받은 base64 데이터를 이미지로 변환하여 저장하는 로직입니다. python 에서 이미지를 data에 가져오는 방법입니다. data = io. BytesIO () picam2.capture_file(data, format = ' jpeg ' ) print (data. getbuffer ().nbytes) 가져온 이미지를 base64 로 변환한 후 다시 전송을 위한 데이터로 변환합니다. img_base64 = base64. b64encode (data. getbuffer ()). decode ( ' utf-8 ' ) 전송할 데이터로 패키징 합니다. responseData = { " type " : " camera " , " device_id " : device_id, " data " : img_base64 } 이제 웹소켓을 이용해서 전송합니다. responseStr = json. dumps (responseData) ws .send(responseStr) 이제 node express 에서 전송된 데이터를 받아서 이미지 처리하는 로직입니다. 받은 데이터로 이미지로 변환합니다. const image = Buffer. from (data, ' base64 ' ) 변환된 이미지를 저장합니다. writeFileSync ( ' image.jpg ' , image ) 정리해놓고 보니 간단하지만 로직을 이렇게도 해보고 저렇게도 해보고 한참을 헤메었습니다. 나중에 다시 참고할 때 편하도록....

node 에서 apns 푸시 메시지를 Slient 로 보내는 방법

노드에서 아이폰으로 사일런트 푸시를 보낼 때 방법이다. 나 같은 경우는 수면 알람을 깨우는데 사용한다. 버전은 apn 2.2.0 을 사용했다. 이 버전이 노드 16 이상을 요구해서 노드를 업그레이드 했다. 먼저 선언을 한다. const apn = require ( ' apn ' ); 그런 다음 보내기 위한 옵션을 설정한다. var options = { token : { key : " ./AuthKey_XXXX.p8 " , keyId : " XXXX " , teamId : " XXXX " }, production : false }; var apnProvider = new apn. Provider (options); 수면 알람이 분단위로 측정되기 때문에 매분마다 수행하는 루틴을 작성 후  그 안에 로직을 추가하였다. setInterval ( async function () { let notification = new apn. Notification (); notification.topic = " 앱 번들 아이디 " notification.priority = 5 notification.pushType = " Background " notification.rawPayload = { aps : { " content-available " : 1 }, acme1 : " bar " , acme2 : 42 } apnProvider. send (notification, i.token). then (( result ) => { console . log ( JSON . stringify (

fastapi 파이썬 모듈인데 쓸만하다.

운영하고 있는 서비스가 있습니다. 우분투 서버에 노드 코아로 API를 작성 했으며 AI 모듈을 위해 파이썬 3으로 진단모듈을 작성했어요. 안드로이드 및 아이폰에서 서비스를 요청하면 노드 코아가 받아서 내부 스크립트로 파이썬을 실행하여 그 결과를 문자열로 받아서 파싱 처리 하도록 구현 했는데 약 10초 정도 걸리더군요. 좀더 효율적인 방법이 없을까 고민하다 fastapi 를 알게 되었습니다. 파이썬으로 된 노드 코아와 같은 경량웹서비스용 모듈입니다. 서버 내부 스크립트가 필요 없어지더군요. 그냥 서비스 받아서 결과를 json 으로 내려주는 걸로 변환했더니 응답속도 5초로 줄었습니다. 파이썬 코드가 편하다면 이거 추천할만 하네요. 일단 파이썬이 파싱이나 json 그리고 멀티파트 폼 데이터 처리가 원활합니다.

하나의 서버에서 노드 코아 서비스 여러개 돌리는 방법

현재 서버를 하나 운영중입니다. 여기에 노드 코아로 만든 서비스를 돌리고자 합니다. 이 서비스를 안정적으로 돌리자고 하면 여러개를 올려야 합니다. 난 이 방법으로 해결했습니다. 먼저 Haproxy 를 설치합니다. 같은 동작을 하는 노드 서비스를 포트만 다르게 작성합니다. 전 보통 3개를 작성합니다. A - 7001 번 포트로 서비스 합니다. B - 7002 번 포트로 서비스 합니다. C - 7003 번 포트로 서비스 합니다. 만약 A 가 죽으면 B와 C 에서 부하분산되어 서비스 됩니다. 이는 Haproxy 에서 역할을 해줍니다. 참고로 이방법으로 집에서 작은 서비스 돌리고 있습니다. 10여년 전에 50만원 주고 산 일체형 컴퓨터에 우분투 서버를 올리고 여기에 개인 프로젝트로 운영중인 서비스 약 2~30개가 돌아갑니다. 아주 저렴하게 운영되고 있습니다. 매우 안정적입니다. 시간이 허락되면 이 서버의 구성에 대해 이야기 하도록 하겠습니다.

Oracle 9i 에 node로 connect하는 방법

 node koa  를 활용하여 Oracle 9i 에 접속하는 방법이다. 최신의 오라클은 접속이 잘 되지만 오래된 버전은 접속하는 방법 찾기가 어려웠다. 구형 데이터베이스인 오라클 9i 버전을 운영중인데 이를 EAI 도구를 통해서 동기화 하는데 너무 오래 걸리고 자꾸 죽어서 노드를 활용하여 데이터베이스 내용을 동기화 할 예정이다. https://oracle.github.io/node-oracledb/INSTALL.html#instzip 오라클 정식 매뉴얼은 위와 같다. 여기 순서대로 설치 했더니 ORA-03113 오류가 난다. 많은 자료를 찾아본 결과 instanctclient 11.2 버전을 설치하면 된다고 한다. 위 매뉴얼대로 하면 11 버전도 설치된거 같은데 아닌가 보다. 난 zip 파일로 압축된 파일을 받아서 /opt/oracle/ 폴더 밑에 이동시켰다. 그런 다음 다음과 같은 명령어를 실행했다. $ sudo sh -c "echo /opt/oracle/instantclient_11_2 > /etc/ld.so.conf.d/oracle-instantclient.conf" $ sudo ldconfig 이 명령어를 친 다음에 node app.js 파일에 연결하고 간단한 질의문을 실행 했더니 결과가 나왔다. 괜히 다른 설정을 찾는다고 많은 시간을 허비한거 같다. 처음부터 버전을 맞추었다면 시간을 절약할 수 있었을 거 같다.

Node Express Mongoose 조회가 되지 않을 때

Ubuntu Server 에 Node 를 설치하고 Express 를 사용하여 서비스를 할 예정이다. 데이터베이스는 MongoDB 로 구성되어 있다. Mongoose 를 이용하여 서비스를 구성하려고 하는데 매뉴얼 대로 해도 조회가 되지 않는다. 매뉴얼이 자세하지 않는거 같다. 많은 검색 후에 컬렉션을 설정해야 한다고 하여 했더니 조회가 되었다. var mongoose = require ( 'mongoose' ); var db = mongoose . connection ; db . on ( 'error' , console . error ); db . once ( 'open' , function () { console . log ( 'Connected to mongo server' ); }); mongoose . connect ( 'mongodb://user:password@host:port/dbname' , { useNewUrlParser : true , useUnifiedTopology : true }); var Schema = mongoose . Schema ; var cannonBeeSchema = new Schema ({ _id : Schema . Types . ObjectId , version : String , os : String , locale : String , uuid : String , count : String }); cannonBeeSchema . set ( 'collection' , 'cannonBee' ); var cannonBee = mongoose . model ( 'cannonBee' , cannonBeeSchema ); cannonBee . findOne ({}, function ( err , data ) { if ( err ) return conso

Mac Mojave node install error

모하비에서 노드를 설치하고 npm install -g @vue/cli 를 설치하고자 하면 나는 오류 조치 방법이다. 일단 노드를 공식페이지에서 다운받아 설치하였다. sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share} 권한문제가 생길수 있으니 위 명령어로 권한을 변경 해준다. 이제 노드 모듈이 설치된 위치로 이동 하자 cd /usr/local/lib/node_modules/ 여기에 모듈이 들어가야 하는데 확인해보니 이 아래 /npm/node_modules 에 모듈이 있다. cd npm cd node_modules/ mv * ../../ 이 명령어를 실행해주면 상위 노드 모듈로 현재의 모듈을 이동 해준다. npm install -g @vue/cli npm update 이렇게 설치하니까 오류가 나지 않는다.

[iOS]화면 밑으로 가면 노드 제거하는 법

신규로 생성된 노드가 화면에서 사라지면 노드를 바로 제거해야 메모리 관리가 최적화가 된다. 이럴 경우에 사용하는 방법이다. -( void )didEvaluateActions {     [ self enumerateChildNodesWithName :nodeName   usingBlock :^( SKNode *node, BOOL *stop){         if (node. position . y < 0 ) [node removeFromParent ];     }]; }