jsp->jni->소켓->데몬과 jsp->db->데몬 자료 전달 중 나은 방법
글쓴이: dcmru / 작성시간: 수, 2011/10/19 - 1:57오전
로직상 제목과 같이 JSP에서 데몬으로 일련의 값들을 전달하려고 합니다.
일련의 값은 하나의 테이블에 5가지 컬럼정도 되는 것으로 총길이를 배열로 생각하면 최대 330자로
1건 또는 1000건까지 생각하고 있습니다.
현재 JNI를 통해 소켓 통신 라이브러리를 만들어 값을 전달하는 방법을 구현하였습니다.
그런데 다만들고 나니 그냥 간단하게 JSP에서 DB로 값을 쓰고,
데몬은 짧은 주기(몇 초)로 DB를 SELECT하여 해당 값을 읽어오고,
읽은 데이터는 지우는 방법도 괜찮을 것 같다는 생각이 들었습니다.
검색을 통해 JNI는 에러가 발생하면, 해당 JVM 자체가 죽는다는 문제와
멀티 스레드 환경으로 전역변수의 동기화 문제정도가 걸리고,
DB를 통한 값의 전달은 주기적으로 읽으므로 실시간 전달이 안되고,
JSP에서 DB에 값을 쓰고, 데몬에서 값을 읽을 때 딜레이가 발생할 것 같습니다.
글을 적고 보니 실시간이냐 아니냐의 문제로 좁혀지는 것 같긴 하네요.
두 방법 중 나은 방법은 무엇일까요? 아니면 더 나은 방법이 있나요?
Forums:
음 XML을 이용해서는 안되나요??
자료 전달되는게
데몬쪽에서 이벤트가 발생하면 JSP쪽에서 데이터를 들고오는건가요??
아니면 JSP 페이지쪽에서 이벤트가 발생하면 데이터를 데몬쪽으로 밀어넣어주는건가요??
전자의 경우라면 특정 REST 아키텍처 스타일 형태로해서 특정 페이지 요청시에 xml형태로 자료를
리턴해줘서 그 데이터를 데몬쪽에서 파싱해서 처리하면 될꺼같고요...
(프로토콜은 HTTP 사용하면 되지 않을까 생각해봅니다...)
후자의 경우라면 구지 JNI까지 쓸필요 없이...
JSP쪽에서 POJO 핵심 로직 구현부에서 소켓통신... 데몬쪽은 C로 구현하셔서...
JAVA 소켓 - C 소켓 프로그래밍 형태로 만들면 되지 않을까 생각합니다...
데이터 규격은 역시 XML 형태로 하시면 될꺼같습니다...
관련된 내용으로는 XML-RPC, SOAP, REST, Open API, HTTP, EAI, ESB, B2Bi쪽으로 찾아보면 어떨까 합니다...
소켓도 자바쪽 밖에 안해보고... 이기종간 통신이라고는 같은 웹인 ASP, JSP 간 연동만 해보고...
위의 환경같이는 작업을 안해봐서 말씀드린 방식대로 될지는 모르겠네요...
음 그리고 구지 DB에 저장할 필요가 없는 데이터라면 DB를 이용하지 않는게 좋다고 생각합니다...
DB 자원사용과 그만큼 트레픽을 먹는건 어쩔수 없으니까요.
답변 감사드립니다.데이터 전달은 말씀하신 것중
답변 감사드립니다.
데이터 전달은 말씀하신 것중 후자의 경우입니다. JSP에서 데몬으로 자료를 전달하려고 하는 것입니다.
다른 사이트에도 같은 질문을 올렸더니 말씀하신 JAVA의 소켓을 써는것도 괜찮다는 답변을 들었습니다.
그런데, 데몬과 주고 받는 데이터 규격이 구조체로 이미 정해져 있고,
SSL 통신 등으로 C로 짜는 것이 나을 것 같아 JNI로 구현을 하였습니다.
결론으로 DB로 데이터를 주고 받는 방법은 좋은 방법은 아닌가 보군요.
노력만이 살길이다.
데몬쪽 수정은 못하나 보군요...
데몬쪽이 아예 규격이 정해진 상태라면...
그 규격지켜주는게 최선의 방법인듯합니다...
구지 사용하지 않아도 되는 DB를 사용하는 안되는 이유가 여러가지가 있지만...
1. 비용
2. 확장성
으로 말씀 드릴수 있겠네요...
분산환경인데...
AP 서버 비용 : 2
DB 서버 비용 : 3
네트웍 트레픽 비용 : 1
으로 봤을때...
Direct로 구현 가능한경우 : AP 서버 - 네트웍 트래픽 - AP 서버 = 5
DB를 중간에 껴서 우회하는경우 : AP 서버 - 네트웍 - DB 서버 - 네트웍 - AP 서버 = 9
거기다가 에러 발생시에 문제 발생 지점이 늘어납니다...
DB 풀링을 지원하지 않을경우 거기다가 DB 커넥션시에 딜레이 타임이 생기고요...
꼭 DB를 이용해야 한다면... 풀링 지원여부를 확인하고 DB 풀링을 붙이세요...
거기다가 차후에 시스템 확장의 경우 DB 자원 확장이 가장 어렵습니다...
답변 감사드립니다. 데이터 전달에 DB를 사용하는데,
답변 감사드립니다. 데이터 전달에 DB를 사용하는데, 여러 문제가 있을 수 있군요.
일단 JNI를 통한 방법을 사용해 봐야겠습니다.
추후 여력이 있다면, 데이터 규격을 JAVA에 포팅하여 다이렉트 연결도 생각해봐야겠습니다.
노력만이 살길이다.
댓글 달기