사실, 언제부터인가 Python을 쓰다보니,,

그래도 가장 편했던 언어는 JAVA 언어였는데, 요즘 너무 어렵네요 


여러여러 관점에서 다른 원격지에서 생성되는(로그든 어떤거든) 데이터를 수집하기 위해서 API를 서버가 필요한 상황이였습니다(저 같은경우는 사용자 브라우저에서 생성된 로그 데이터의 경우 입니다.)


일단 제가 사용하는 조합은 


Python 2.7에서(Pyenv 로 3으로 올려서 사용했는데, 중간에 소스가 꼬여버리는 바람에) + Flask + Guicorn + Supervisor.d를 이렇게 사용하고 있습니다.


주변 케이스를 찾아보면 현 해당 케이스에서는  Node.js 를 기반으로 긍정적으로 평가하는것 같지만, 굳이 이걸 사용하는건 Python 이 편하기 때문에


먼저 SSL 키를 확보합니다.(확보되어 있다고 가정하고, 구입 또는 letsencrypt를 통해 무료로 발급받았다고 가정) 



먼저 필요한 패키지(?) 모듈들은 이거고 설치는 pip를 통해서 했습니다.

from flask import Flask, request, Response
from flask_cors import CORS, cross_origin
from OpenSSL import SSL


Flask 는 다음과 같이 사용합니다.

app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})


여기서  CORS를 한이유는 , 저 같은경우 데이터가 브라우저들을 통해서 넘어오는 상황이여서 크로싱 브라우징 이슈를 해결하기 위해 사용하였습니다 


context = SSL.Context(SSL.SSLv3_METHOD)
cert = 'cert.pem'
pkey = 'privkey.pem'
context.use_privatekey_file(pkey)
context.use_certificate_file(cert)


그다음 HTTPS 사용하기 위해서 다음과 같이 하였습니다. 만약 이옵션을 제거하면 HTTP REST API 가 됩니다 


if __name__ == "__main__":
app.run(host='0.0.0.0', port='58080', ssl_context=(cert, pkey))

 

app.run 을 할때 ssl_context를 넣어주면 https로 작동하게 됩니다. 



@app.route("/", methods=['POST'])
@cross_origin()
def api(): data = str(request.get_data())

resp = Response(data)
resp.headers['Access-Control-Allow-Credentials'] = 'true'
return resp

request.get_data()와 같은 형태로 해당 api 주소의 /을 post로 넘겨온 데이터를 받습니다 이제 여기서 저 같은경우에 데이터를 좀더 수정하고 시간을 붙여서 다른 장소로 다시 넘깁니다


그리고 resp부분은 받은 내용에 대해서 그대로 다시 리턴합니다... 데이터를 보내오는 쪽에서 그렇게 해달라고 하더군요. 

사실 웹쪽을 잘모르는데, 제가 다시 보낸다고 해도, header를 저런식으로 안붙여주면 다른쪽에서 받지를 못하더군요.. 


사실 잡설이긴하지만,,, 저 같은 경우는 HDP 플랫폼으로 하둡 데이터를 처리하였는데, Cloudera CDH 쪽 하는 친구의 말을 들어보면 supervisor.d 가 데몬을 키고 끄고 이런 소리를 하길래 superviosr.d 가 클라우데라쪽의 어떤 프로젝트 인줄 알았습니다. 


제대로 이해한거면 supervisor.d는 파이썬의 프로젝트인것 같더군요 (http://supervisord.org/Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.)


보통의 경우 Flask 를 단독으로 띄워서 사용하지는 않는다고 하는것 같습니다. 사실 이번엔 제가 이건 처음이여서 다른것을 참고 하다보니요 아직 wsgi 의 개념은 잘이해는 안가는데 flask+guicorn 조합으로 사용하는것 같습니다.( http://flask.pocoo.org/docs/0.12/deploying/wsgi-standalone/)


그다음 supervisor.d 에는 다음과 같이 적용을 시켰습니다 


[program:api]

command = gunicorn -w5 --certfile=cert.pem --keyfile=privkey.pem api:app -b 0.0.0.0:58080 --pythonpath /root/api

;directory = /root/api

user = root

numprocs=1

autostart=true

autorestart=true



일단 이걸로 사용하다가 ,  다음에는 이걸 사용하다가 Node.js 로 해봐야겠네요.. 


Node.js가 그렇게 좋다는데....(멍)

저작자 표시 비영리 변경 금지
신고

Apache Ambari를 사용하다보면, 암바리 자체를 이용해서 하둡 클러스터를 관리할수도 있지만.

떄로는 필요한 부분에 대하여 커스터마이징하거나, 또는 관리의 편의성을 위해 별도의 앱을 만들어 쓸 수도 있습니다. 



다음은 암바리의 컴포넌트를 API를 이용해서 시작 및 중지하는 방법입니다.


curl -u USER:PASS -i -H 'X-Requested-By: ambari' -X PUT -d  '{"RequestInfo": {"context" :"Stop '"$1"' via REST"}, "Body": {"ServiceInfo": {"state": "INSTALLED"}}}' http://HOST/api/v1/clusters/CLUSTER/services/COMPONENT


curl -u USER:PASS -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo": {"context" :"Start '"$1"' via REST"}, "Body": {"ServiceInfo": {"state": "STARTED"}}}'  http://HOST/api/v1/clusters/CLUSTER/services/COMPONENT



https://ambari.apache.org

https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.2.1




`


저작자 표시 비영리 변경 금지
신고

SqliteJDBC

SQLiteJDBC is a Java JDBC driver for SQLite. It runs using either a native code library 100% Pure Java driver based on NestedVM emulation.

Both the pure driver and the native binaries for Windows, Mac OS X, and Linux x86 have been combined into a single jar file.

Download

The current version is v056, based on SQLite 3.6.14.2.

That should be everything you need.

News

  • 2009-12-03: There will be a new version soon, just dealing with some test suite issues. I created anew mailing list, though the Google Group has mysteriously reappeared since then.
  • 2009-06-09: Upgrade to SQLite 3.6.14.2 and add a 64-bit binary for OS X.
  • 2009-01-14: Note that the mailing list for SQLite JDBC is currently unavailable as the Google Group unexpectedly disappeared.

Getting Started

Read the usage page for the full story.

import java.sql.*;

public class Test {
  public static void main(String[] args) throws Exception {
    Class.forName("org.sqlite.JDBC");
    Connection conn =
      DriverManager.getConnection("jdbc:sqlite:test.db");
    Statement stat = conn.createStatement();
    stat.executeUpdate("drop table if exists people;");
    stat.executeUpdate("create table people (name, occupation);");
    PreparedStatement prep = conn.prepareStatement(
      "insert into people values (?, ?);");

    prep.setString(1, "Gandhi");
    prep.setString(2, "politics");
    prep.addBatch();
    prep.setString(1, "Turing");
    prep.setString(2, "computers");
    prep.addBatch();
    prep.setString(1, "Wittgenstein");
    prep.setString(2, "smartypants");
    prep.addBatch();

    conn.setAutoCommit(false);
    prep.executeBatch();
    conn.setAutoCommit(true);

    ResultSet rs = stat.executeQuery("select * from people;");
    while (rs.next()) {
      System.out.println("name = " + rs.getString("name"));
      System.out.println("job = " + rs.getString("occupation"));
    }
    rs.close();
    conn.close();
  }
}

Run with:

java -cp .:sqlitejdbc-v056.jar Test

There are also some details on date handling and custom functions.

Keeping Informed

To be informed when a new release is made, I recommend subscribing to the freshmeat project for this driver. Every release I make goes up there immediately with a short summary of the changes. They provide a free email service with these details and don't load you up with spam.

There's a mailing list.

Released under a BSD license.

Version control for this project is handled with git. Get the source from github.

http://www.zentus.com/sqlitejdbc/ 

저작자 표시 비영리 변경 금지
신고

'Study > --Java' 카테고리의 다른 글

BufferedReader vs Scanner  (0) 2011.09.12
Failed to create the java virtual machine  (0) 2011.09.12
java sqlite jdbc eclipse build path  (0) 2011.07.14
Java sqlite jdbc  (0) 2011.07.14
[JAVA] atoi, iota  (5) 2011.07.07
Flex 와 Java XMLsocket을 사용하기  (0) 2010.08.19
java.net.BindException: Address already in use  (0) 2010.08.19
약간 재미있는 싸이트가 있습니다.

블로그 관리자와 여기 싸이트하고 무슨 관계 있는거 아니야?
아니요, 저는 어제 2010 매쉬업 경진대회 본선을 구경하러 갔고 , 그곳에서 우수상을 받은 싸이트 입니다.
일단 제가 알기로, 일단 본선을 올라가려고 하면, 네티즌으로 부터 받는 점수가 좋아야 한다는것으로 알고 있습니다.
즉, 네티즌 분들이나, 2010 매쉽업에서 상을 받을 정도니까.. 꽤 좋은 싸이트다 이거죠..


이 싸이트를 소개하는 이유?
일단, 제가 약 두페이지를 이용해서 매쉽업 사진하고, 잠깐의 느낌은 아니지만 잡담을 올려놨는데, 제가 이름은 틀리긴 했어도, 언급을 했는데,, 그 이유가 모랄까. 인상 깊었다랄까.

그렇다면, 이걸 어떻게 사용하느냐 사용방법은 정말 쉽습니다. 어떠한 기능이 있기 때문에(API 관련된 내용인데,)
예를 들어 서울에서 접속하면, 서울 지도가 , 부산에서 접속하면 부산 지역으로 나온답니다.

간딴히, 사용하는걸,,, 동영상으로 보여드릴께요,,, 이거는 사진으로 보여드리는것보다 역동적이여서,




http://culturenavi.com << 여기예요!

관련글
2010/02/07 - [Information] - 인생을 재미있게 사는걸 도와주는 싸이트 알아요!
2010/02/07 - [Think , Dream / Fly] - 2010 매쉬업 경진대회,, 사진?



저작자 표시 비영리 변경 금지
신고
이 장소를 Daum지도에서 확인해보세요.
서울특별시 강남구 삼성1동 | 코엑스
도움말 Daum 지도
  1. Favicon of http://tofindmyego.tistory.com BlogIcon 獻花歌 2010.02.07 23:52 신고

    제목이 흥미를 끌었는데 ㅋ
    내용은 제가 원하는게 아니네요 ㅡ안타깝게도 ㅋ

    • Favicon of http://redeyesofangel.tistory.com BlogIcon Yuika eizt 2010.02.08 19:05 신고

      찾으시던 내용이 아니시라니 안타깝네요~..ㅠㅠ

      즐거운 하루 되세요~

Rastaholm ~ sunset and flowers
Rastaholm ~ sunset and flowers by Per Ola Wiberg (Powi) 저작자 표시

 그러니까,, 자바를 보다가, 몇몇 궁금한점떄문에 API를 보려고 찾던중.

물론 웹상으로 볼수는 있지만 - 이상하게 다운받아서 보는걸 즐기는 편이라..

http://xrath.com/files/jdk-6-docs-ko.zip 에서 받으려고 했는데; 링크가 깨져있더라고요;;

jdk-6-docs-ko.zip.1.torrent

그래서 토렌트 파일로 첨부합니다. 토렌트 파일이 무엇이냐고요? 정말로 엄청나게 진보한 p2p 방식입니다. 일종의..

자매품 : 이클립스 토렌트 파일입니다.(참고로 가릴레오.)이건 이클립스 공식싸이트에서도 받으실수 있는겁니다.;ㅎㅎ


eclipse-SDK-3.5.2-win32.zip.torrent



추가합니다. 은근히 여기로 들어오시는분들이 많더군요. 일단 제가 토렌트를 유지안하는 관계로 거의 다운받기 힘드실겁니다. 한번 토렌트 파일로 받아보려고했는데 시드 파일이 없더군요 그래서 직접 압축해서 올려봅니다 .

7zip으로 압축하였고, 7zip이나 7zip을 지원하는 압축프로그램으로 파일 두개 받으셔서 압축풀어보시길 바랍니다.



jdk-6-docs-ko.7z.001


jdk-6-docs-ko.7z.002






저작자 표시 비영리 변경 금지
신고
  1. 자바 개발자 2015.01.30 14:12 신고

    사내에서 http://xrath.com/javase/ko/6/docs/ko/api/index.html 가 접근이 안되었는데, 올려주셔서 감사합니다!! 좋은 하루 되세요~

*** glibc detected *** double free or corruption (top): 0x08d34008 ***

혹시 gcc에서 이런 오류가 나오나요?

일단 저 같은 경우는 완벽히 사용법도 모르고 하기 때문에. 만약 저처럼 mysql 을 C로 연결시키시는 중이라면

혹시 중간에 mysql_free_result(res)를 사용하셨나 보세요;; 일단 저같은 경우는 이걸 지우니까 바로 없어지네요.


저작자 표시 비영리
신고

'Study > C / C++' 카테고리의 다른 글

온라인 man  (0) 2009.07.02
Bool  (6) 2009.07.02
C언어, 랜덤함수 , 포인터  (2) 2009.06.20
*** glibc detected *** double free or corruption (top): 0x08d34008 ***  (0) 2009.06.10
배열초기화  (0) 2009.06.10
string.h 함수  (0) 2009.06.02
main 함수  (0) 2009.06.02
bzero(query,sizeof(query));
memset(query,0,sizeof(query));

만약 제대로 알고 쓰고 있다면;; ;;만약 저게 초기화가 아니라면;; 난 잘못 알고 있는건가;

mysql 만세;

저작자 표시 비영리
신고

'Study > C / C++' 카테고리의 다른 글

Bool  (6) 2009.07.02
C언어, 랜덤함수 , 포인터  (2) 2009.06.20
*** glibc detected *** double free or corruption (top): 0x08d34008 ***  (0) 2009.06.10
배열초기화  (0) 2009.06.10
string.h 함수  (0) 2009.06.02
main 함수  (0) 2009.06.02
sprintf  (2) 2009.05.25
1

+ Recent posts