web-browser를 refresh하기..

nephro의 이미지

APM을 이용하여 데이터베이스를 관리하고 있습니다. 동시에 여러사람이 데이터베이스에 접속하여 자료를 수정하는데, 서버의 자료가 바뀌면 client의 웹브라우저를 자동으로 refresh 되게 하고 싶습니다. C 나 자바를 이용하고 싶은데, 어떻게 해야할지 개념자체가 없는 상태입니다. 어디를 뒤져보면 자료가 있을지, 아니면 뭐든지 힌트가 될만한 것에대해 조언 부탁드립니다. 감사합니다.

blacknblue의 이미지

이런게 가능하다면 채팅도 가능할 듯 한데..

웹에서 과연 이게 가능할까요?

연결을 유지해야 된다는 말인데....흠...

좋은 답변들이 올라왔음 하는 작은 소망이...

nephro의 이미지

답변 감사합니다.
구글 문서들을 보면, client웹 페이지에서 자바스크립트가 플러그인이나 자바애플릿등에 접근할 수 있다는 말 같습니다. 그런데, 제가 원하는것은,
서버측 자료가 바뀌면, 아무런 signal이 일어나지 않은 제 3자의 client쪽 웹브라우저를 refresh 하는 일입니다.
제가 구상하고 있는 구동 방식은 다음과 같습니다.
1. 서버, client1, client2가 있다고 가정하고서,
2. client1이 APM 을 통한 서버측 자료 변경시 서버측에서는 미리 만들어둔
작은 C-프로그램이 실행된다.
3. client가 서버에 접속할때마다 서버에서는 그 주소를 기록하고 있다가,
특정페이지를 보고있는 client2에 신호를 보낸다.
4. 단순히 페이지를 보고있던 client2에선 서버에서 보낸 신호를 받아
웹브라우저가 refresh 된다.

제가 상상의 나래를 펴기로는, 4를 해결하려면 웹페이지의 자바스크립트(submit 와 같은 단추처럼.)를 원격으로 조절하여야 하는데 그 방법이 있는가 하는것입니다.
LiveConnect는 서버측에서 client측의 애플릿이나 자바스크립트를 조절할수 있지는 않은것 같은데요.. 맞습니까?
좀더 조언 부탁드립니다.
감사합니다.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

blacknblue의 이미지

아, 역시 답변은 아니고요..

클라이언트가 웹 서버와 연결된 상태를 계속 유지하는 것은 불가능 하지 않나요?
당연히 서버에서 타임아웃 시간을 정해 놓았을테니까.

그러면 결국 연결상태가 끊긴 후에 서버에서 클라이언트로 특정 정보를 보낼수 있어야 된다는 얘긴데..

흠...과연 가능할지 정말로 궁금하네요..

혹시 아시는 분 안계신가요???

sjpark의 이미지

전 이렇게 했었어요..

히든 프레임을 하나 만들고, 페이지는 보이지 않게 숨겨놓죠

히든페이지는 주기적으로 refresh되요.

최대한 서버에 부하(?)가없게 하기 위해. 전송이 최대한 적게 일어나도록 히든 페이지는 출력되는 데이타가 없도록 했었어요.

히든페이지가 주기적으로 refresh되면서, 자바 스크립트를 이용해 메인 패이지의 특정 값을 refresh시킵니다.

단점은 실시간으로 즉, 동시에 변경되지 않지요.
단점은 서버 사용자가 많아질 경우 감당할 수 있을지..
단점은 프레임을 써야 하는데, 프레임이 익스플로러, 모질라에 프레임 전체가 로드 되지 않은 경우에 대한 에러 처리(자스)를 또 작성해야 해요.

장점은 없어요. 그냥 흉내내기에 좋다는 정도의...

그리고 요즘 한가지 더 생각해 본게 있는데요
플래쉬를 이용하면, 플래쉬 부분만 바뀔 수 있지 않을까요? 페이지 전체가 바뀌지 않고..

어떤가요?

정태영의 이미지

blacknblue wrote:
클라이언트가 웹 서버와 연결된 상태를 계속 유지하는 것은 불가능 하지 않나요?
당연히 서버에서 타임아웃 시간을 정해 놓았을테니까.

서버 푸쉬를 이용하면.. 연결이 끊어지지 않고 유지가 됩니다 ;)
부하라던가 그런것도 생각해야하긴 하겠지만 하튼 가능은 합니다..

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

hackexpert의 이미지

일단 방법을 먼저 말씀드리자면..
원하시는 것을 깔끔한 구조로 구현하는 방법은 없는걸로 압니다.
그래도 몇가지 비슷하게 만들 수 있는 방법이 있는데
아마 서버측에 부하가 상당할겁니다..

제가 아는 방법은 두가지인데 위엣분들이 적어주신 방법들입니다.

http에서는 클라이언트가 서버에 요청을하고 응답을 받아오고 연결이 끊깁니다.
그렇기 때문에 원하시는 것을 이루려면
주기적으로 요청을 하여 변경된 것을 얻어오거나,
연결을 끊지 않고 계속 받는데.. refresh와 비슷한 일을 하는 자바 스크립트를 서버에서 지속적으로 뿌려주는 방법이 있습니다.

구체적으로는 비어있는 프레임을 만들어서 지속적으로 리프레쉬를 시켜주는 것.
그리고 서버푸쉬를 사용하는 방법.

서버푸쉬같은 경우 perl에서는 상당히 간단하게 구현했었는데.. 지원해주는 모듈이 있어서..
정확하게 프로토콜은 잘 모르겠습니다.. 서버푸쉬로 검색해보시면 될 것 같습니다.

음.. 그리고 개인적으로는
클라이언트는 자바 애플릿이나 액티브x로 해결하고
서버를 하나 만드는 것이 좋은 방법 같습니다.

seoleda의 이미지

nephro wrote:
APM을 이용하여 데이터베이스를 관리하고 있습니다. 동시에 여러사람이 데이터베이스에 접속하여 자료를 수정하는데, 서버의 자료가 바뀌면 client의 웹브라우저를 자동으로 refresh 되게 하고 싶습니다. C 나 자바를 이용하고 싶은데, 어떻게 해야할지 개념자체가 없는 상태입니다. 어디를 뒤져보면 자료가 있을지, 아니면 뭐든지 힌트가 될만한 것에대해 조언 부탁드립니다. 감사합니다.

무슨일을 하시는지 잘 모르겠지만 동시에 여러사람이 데이타 베이스에 접속하여 자료를 수정하는 것이라는 점에서 추리해보면 예약시스템이나 쇼핑몰 같은
것을 만드시는것 같습니다.

만일 그렇다면 데이타 베이스를 MYSQL 이 아닌 ORACLE 나 INFORMAX 등을 고려해 보세요.

transaction 이라는 기능을 사용하면 깔금하게 해결됩니다.

transaction에 대해 간단히 설명드리면 몇개의 쿼리문(자료의 검색, 삽입 삭제.. 등)이 동시에 수행되거나 수행되지 않는 개념입니다.

그럼 이만.. 도움이 되셨길 바랍니다. ^^

nephro의 이미지

Quote:
예약시스템이나 쇼핑몰 같은 것을 만드시는것 같습니다.

여러분들의 답변 감사합니다.
사실은, 외국인 노동자를 위한 주말 무료진료를 하는데 필요한 전자차트를 만들었습니다. 데비안 PC 서버를 두고, 인트라넷으로 연결하여 6대 어간의 client가 작동중입니다. 접수실에서 접수하고, 진료실에서 진료하고, 약국에서 조제를 하는데, APM을 통해서 이뤄지고 있습니다.
지금은 자동 refresh가 안되서 매번 클릭을 해야 자료 변경사항을 알 수 있습니다. 오라클 사용하기엔 규모가 작고, 이미 mysql에 정이 들어서 현상태에서 client를 컨트롤할 방법을 강구중이랍니다.
님들의 답변을 보고, 특정페이지에만 수초마다 refresh 하게 하는 스크립트를 넣거나, 자바로 서버 상태를 알아내서 client쪽 LiveConnect를 이용하여 refresh 하는 방법이 있지 않을까 생각해 봅니다.
감사합니다.

자유를 꿈꾸는자 고개를 들어 하늘을 보라.

우겨의 이미지

6대에만 서비스 하는 것이라면.

몇 초마다 특정페이지 리플레쉬 하는 것도 괜찮아 보입니다.
1줄 태그 추가만 하면 되니..
<META HTTP-EQUIV="Refresh" CONTENT="몇 초">

sjpark의 이미지

seoleda wrote:
nephro wrote:
APM을 이용하여 데이터베이스를 관리하고 있습니다. 동시에 여러사람이 데이터베이스에 접속하여 자료를 수정하는데, 서버의 자료가 바뀌면 client의 웹브라우저를 자동으로 refresh 되게 하고 싶습니다. C 나 자바를 이용하고 싶은데, 어떻게 해야할지 개념자체가 없는 상태입니다. 어디를 뒤져보면 자료가 있을지, 아니면 뭐든지 힌트가 될만한 것에대해 조언 부탁드립니다. 감사합니다.

transaction 이라는 기능을 사용하면 깔금하게 해결됩니다.

mysql 도 transaction 비슷한 기능 있던데용
물론 100% 되는지에 대해선 모르지만

dyks의 이미지

Quote:

APM을 이용하여 데이터베이스를 관리하고 있습니다. 동시에 여러사람이 데이터베이스에 접속하여 자료를 수정하는데, 서버의 자료가 바뀌면 client의 웹브라우저를 자동으로 refresh 되게 하고 싶습니다. C 나 자바를 이용하고 싶은데, 어떻게 해야할지 개념자체가 없는 상태입니다. 어디를 뒤져보면 자료가 있을지, 아니면 뭐든지 힌트가 될만한 것에대해 조언 부탁드립니다. 감사합니다.

transaction 이라는 기능을 사용하면 깔금하게 해결됩니다.

transaction과 요청하는 부분이 어떤 상관관계를 가지는지 모르겠네요.
transaction은 하나의 transaction이 atomic 하다는 것을 보장해줄 뿐입니다. DB의 값이 변경되었을 때 notify되는 건, 글쎄요. 뭔가 DB 관련 operation이 일어났을 때(스크립트나 어플리케이션에서 처리하는) client에 notify하는 거야 어떤식으로든 가능하겠지만, 순수하게 DB가 변경되었을 때 notify하는 건, 주기적으로 db를 체크해보는 것 이외엔 방법이 없어보이는 군요.

trigger가 외부로 뭔가 event를 날려줄 수 있는 것도 아니고 말이죠.

xesles의 이미지

1. 애플릿을 이용하연, 소켓 프로그래밍이 가능합니다. 즉, 애플릿으로 소켓 프로그래밍을 하여 항상 서버에 접속되어 있도록 할 수 있다는 것이죠. 이 때, 이 애플릿은 숨겨진 프레임 내에 있게 하여 항상 접속이 끊기지 않게 하는 것이죠.

2. LiveConnect 기술을 사용하면, 애플릿과 자바스크립트간 통신이 가능합니다. 심지어 애플릿 내에서 자바스크립트 명령을 내리거나 함수까지도 호출 가능합니다. 물론 반대로도 가능합니다.

감이 잡히셨는지 모르겠군요. 세이클럽도 이런 식으로 굴러간다고 하던데,, 쩝,, 워낙 해본지가 오래라 기억이 가물가물하군요.. ^^

seoleda의 이미지

dyks wrote:

transaction과 요청하는 부분이 어떤 상관관계를 가지는지 모르겠네요.
transaction은 하나의 transaction이 atomic 하다는 것을 보장해줄 뿐입니다. DB의 값이 변경되었을 때 notify되는 건, 글쎄요. 뭔가 DB 관련 operation이 일어났을 때(스크립트나 어플리케이션에서 처리하는) client에 notify하는 거야 어떤식으로든 가능하겠지만, 순수하게 DB가 변경되었을 때 notify하는 건, 주기적으로 db를 체크해보는 것 이외엔 방법이 없어보이는 군요.

trigger가 외부로 뭔가 event를 날려줄 수 있는 것도 아니고 말이죠.

직접적인 연관은 없습니다. 하지만 질문의 요지가 예약시스템을 만드는 듯하셔서, 조금 다른 각도에서 문제를 보았습니다.

굳이 클라이언트 측에 시그널을 보내지 않더라도 구축이 가능하지 않을까 생각이 들어서 드린 말씀이였습니다.

그리고 적어도 오라클에선 trigger에서 씨나 자바의 함수를 호출하도록 설계할수 있다고 들었습니다.

저도 DB의 갱신사항을 어떤 이벤트로 받았으면 좋겠다는 생각에 자료를 찾다가 결국 주기적으로 DB를 검색하도록 프로그램 했읍니다만,나중에 오라클 교육을 받으면서 강사분께 물어보니 Oracle에서는 그러한 기능이 있긴 있다고 하더군요. 하지만 실제로 trigger에 함수를 등록해서 사용하기 보다는 그냥 DB에 갱신이 일어난 시점에 서버 프로그램단에서 적절한 시그널을 뿌려 준다고 하던데요.

^^

dyks의 이미지

seoleda wrote:

굳이 클라이언트 측에 시그널을 보내지 않더라도 구축이 가능하지 않을까 생각이 들어서 드린 말씀이였습니다.

그리고 적어도 오라클에선 trigger에서 씨나 자바의 함수를 호출하도록 설계할수 있다고 들었습니다.

저도 DB의 갱신사항을 어떤 이벤트로 받았으면 좋겠다는 생각에 자료를 찾다가 결국 주기적으로 DB를 검색하도록 프로그램 했읍니다만,나중에 오라클 교육을 받으면서 강사분께 물어보니 Oracle에서는 그러한 기능이 있긴 있다고 하더군요. 하지만 실제로 trigger에 함수를 등록해서 사용하기 보다는 그냥 DB에 갱신이 일어난 시점에 서버 프로그램단에서 적절한 시그널을 뿌려 준다고 하던데요.

^^

음. 함수를 등록해서 사용한다는게 잘 이해가 안 가는군요.; 오라클이 외부 어플리케이션의 특정 함수를 사용하여야 한다는 건데, 그럼 바이너리 단에서의 호출이 가능해야 한다는 얘기입니다.
그럼, 오라클이 COM등의 컴포넌트 기술을 이용해서 실행되고 있는 특정 바이너리의 함수를 호출한다는 얘기인데;; 음. OTN을 뒤져봤습니다만, 비슷한 얘기를 찾을 수 없더군요.(너무 대충 훓어본 경향도 없잖아 있습니다만, 시간 나면 다시 한번 찾아보도록 하죠.)
그리고, 설사 그게 가능하다 하더라도 TRIGGER와 TRANSACTION은 분명히 구분되어야 할 것 같군요.^^ TRANSACTION을 지원하는 것과,TRIGGER를 지원하는 건 다른 얘기니까요.^^

seoleda의 이미지

dyks wrote:

음. 함수를 등록해서 사용한다는게 잘 이해가 안 가는군요.; 오라클이 외부 어플리케이션의 특정 함수를 사용하여야 한다는 건데, 그럼 바이너리 단에서의 호출이 가능해야 한다는 얘기입니다.
그럼, 오라클이 COM등의 컴포넌트 기술을 이용해서 실행되고 있는 특정 바이너리의 함수를 호출한다는 얘기인데;; 음. OTN을 뒤져봤습니다만, 비슷한 얘기를 찾을 수 없더군요.(너무 대충 훓어본 경향도 없잖아 있습니다만, 시간 나면 다시 한번 찾아보도록 하죠.)
그리고, 설사 그게 가능하다 하더라도 TRIGGER와 TRANSACTION은 분명히 구분되어야 할 것 같군요.^^ TRANSACTION을 지원하는 것과,TRIGGER를 지원하는 건 다른 얘기니까요.^^

예 트리거와 트랜잭션은 다릅니다. 하지만 nephro 님이 격고 계시는 문제가 어떻게 클라이언트 단에서 데이타를 일관성 있게 보여주느냐 하는 문제로 생각했습니다.

그래서 주기적으로 디비를 읽어서 동기화 하는 것보다 아예 처음부터 데이타의 일관성이 깨지지 않도록 하는것이 바람직해 보여서 언급한 것입니다.

물론 그 후에 nephro님의 답변으로 트랜잭션과는 거리가 있었습니다만 ...

그리고 트리거에 대해선 otn에서 "trigger"로 검색해보았습니다.

http://otn.oracle.com/sample_code/tech/java/jsp/samples/jsptrigger/Readme.html

대충 읽어보니 loadjava란 명령어로 자바 클래스를 stored procedure 로 저장한 후에 trigger에서 그 자바 메소드를 호출하네요.

이 예제를 조금만 응용하면 디비에 변경사항이 있을때 메일을 보내거나, 소켓을 열어서 통신을 한다던지 하는게 가능하겠네요.

만일 제가 만일 nephro님과 같은 일을 한다면
<META HTTP-EQUIV="Refresh" CONTENT="몇 초">
를 적당한 곳에 추가하는 선에서 끝내겠지요.

하지만 만일 클라이언트가 50대만 돼더라고 java stored tirgger를 고려하겠습니다.
그리고 클라이언트가 공중에 공개되는 것이라면(영화예약같은) 강력히 trigger를 사용하거나 적절한 트랜잭션과 에러처리 루틴, 그리고 약간의 경고문구? (지금 보시는 화면은 최신사항이 아닐 수도 있습니다. 머 이런 내용의..)를 사용할것 같습니다.

atie의 이미지

동시에 여러명이 DB 자료를 수정해서 항상 최신의 데이타를 클라이언트 화면에 뿌려주어야 한다는 것이 문제라면, 애초부터 프로그램에 transaction isolation level을 적절하게 고려하여 사용하는 것이 바람직합니다. transaction isolation level을 검색하여 보세요. 세 가지 문제에 대해 네 가지 level 중 어떤 것을 자신의 application에 쓰는 것이 적당한 지는 본인이 가장 잘 알 수 있을거라는 생각입니다.

다른 방법으로, 서버에서 자료가 갱신이 되었을 때 매번 클라이언트들의 화면을 변경해 주는 것 보다는, 클라이언트에서 서버의 자료를 변경하기 전에, 처음 db에서 가져왔던 자료와 현재 db에 있는 자료를 비교해 봐서 프로그램에서 어떤 처리를 해야할 지를 결정하는 것도 생각해 볼 수 있을 것 같습니다.

----
I paint objects as I think them, not as I see them.
atie's minipage

dyks의 이미지

seoleda wrote:
그리고 트리거에 대해선 otn에서 "trigger"로 검색해보았습니다.

http://otn.oracle.com/sample_code/tech/java/jsp/samples/jsptrigger/Readme.html

대충 읽어보니 loadjava란 명령어로 자바 클래스를 stored procedure 로 저장한 후에 trigger에서 그 자바 메소드를 호출하네요.

이 예제를 조금만 응용하면 디비에 변경사항이 있을때 메일을 보내거나, 소켓을 열어서 통신을 한다던지 하는게 가능하겠네요.

이런게 있군요.^^ 유콘도 sp를 C#등으로 짤 수 있게 지원한다더니, 오라클이 먼저 선수를 친거였네요.
이거라면 가능하겠네요. 다만, 그래도 클라이언트 컴포넌트는 필요하겠네요. 클라이언트가 사용자가 만든거라면 모르겠지만, 익스플로러나 넷스케이프일테니까요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.