db 데이터 변경시 웹에서 알수있는 방법이 있나요?

조회수 15091회

데이터베이스는 mysql 사용중입니다.

혹시 디비 특정 값이 업데이트되었을때 웹이 알아채서 처리할수있는 방법이 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 조금더 자세한 설명이 필요합니다. DB의 값 변경을 웹서버에서 하지 않는건가요? 아니면 하나의 DB를 여러개의 서로 다른 서버가 공유하기 때문인가요? 어떤 웹 프레임워크를 사용하시나요? 정토드 2016.9.5 17:37
  • A 사용자가 웹에서 작업하면서 db값을 변동시키고, 그 변동시킨값도 다른 사용자 B,C...들의 웹에서도 받아와 변경시키고 싶은게 목적입니다.(둘다 같은 웹페이지, 전자가 맞는거같네요) 현재 php+js+html5css+mysql로 작업하고있습니다 알 수 없는 사용자 2016.9.6 14:20
  • 그러시다면 아래 허대영님이 답변 달아주신 것 처럼 웹소켓을 이용하시는게 좋겠네요. 정토드 2016.9.6 17:11
  • 웹소켓을 계속찾아봤는데 감이 전혀잡히질않네요 ㅠㅠ https://www.youtube.com/watch?v=vrF1zsHtPfI 이렇게 제작을한다고치면, 디비값을 변동시킨사람의 웹에서 메세지를 서버로 보내고(영상에서 php 작성된 서버), 그 서버에서 웹을 이용중인 모든사람에게 푸쉬를 하려면 어떻게해야하나요? 저 유튜브 영상은 보낸사람에게만 메세지가 오는것이아닌지요? ws://echo.websocket.org/ 이쪽서버로 테스트 메세지를 보내봤더니 보낸사람에게만 메세지가 되돌아오는거같더라구요 알 수 없는 사용자 2016.9.7 12:44
  • websocket은 말 그대로 서버에 소켓으로 접속해 있는건데요. 서버에 접속한 모든 사용자에게 메시지를 보낼 수 있습니다. 예를들어 http://coderpad.io 라는 서비스를 이용해 보시면 한 사용자가 치는 코드를 접속한 다른 모두가 볼 수 있는데요. 웹소캣을 이용한 예라고 볼 수 있습니다. php에서 어떻게 웹소캣을 구현하는지에 대한 "자세한설명은생략"하겠습니다(사실 저도 몰라서요). 정토드 2016.9.7 16:50

2 답변

  • 데이터베이스에서 특정 값이 변경되는 것을 알 수 있는 방법은 별도로 존재하지 않습니다.

    다음과 같은 방법으로 해결할 수 있습니다.

    • 데이터베이스에 값을 변경하는 프로그램을 변경자라고 하겠습니다.
    • 데이터베이스의 값 변경을 알아채야 하는 웹 클라이언트를 이라고 하겠습니다.

    데이터베이스로 부터 변경사항을 알아차리는 것은 어려움으로, 변경자가 데이터베이스에 값을 변경할 때, 변경된 것을 알아야하는 에게 알려주는 것으로 대체하는 것이 좋겠습니다. 그리고 즉시 변경된 것을 알릴 수 없는 경우를 위해서, 변경사항을 나중에 알릴 수 있는 방법을 별도로 마련해야 합니다. 예를 들어 변경시점을 알 수 있도록 변경시간을 기록하거나, 변경 사건 자체를 데이터베이스 혹은 로그에 임시로 저장해둬야 합니다.

    이제 변경자에게 알리는 방법은 서버에서 클라이언트에 알려줄 수 있는 웹 소켓이나, 롱폴링 혹은 코멧을 사용해야 합니다. 혹은 반대로 이 짧은 주기로 서버에 지속적으로 요쳥하는 폴링(숏폴링)방법을 사용해야 합니다.

    참고:

    [1] 실시간 업데이트 대한 기술은 http://dev.epiloum.net/790 이문서를 참고해보세요.

    [2] 그리고, 웹 소켓에 관헌 이 링크를 한번 참고 해보세요.

    • 웹에서 db값을 변동시키고, 그 웹을 사용하는 다른 이용자들도 그 변동된 값으로 업데이트시키길 원하는것인데 보통은 어떤방법을 선호하나요? 알 수 없는 사용자 2016.9.6 14:20
    • 보통 질문하신 내용은 웹 페이지 실시간 업데이트로 검색해보시면 내용이 많이 있을 것 같습니다. 읽어보기 시작할 만한 문서를 참고에 추가해뒀습니다. 웹 소켓 자체가 기존의 HTTP와는 별개의 프로토콜이라서, php에서 websocket 구현물을 찾아보시는 게 좋을 것 같습니다. 허대영(소프트웨어융합대학) 2016.9.8 13:34
  • (이렇게 하는게 좋은 방법이다라고 설명하는 답변이 아니라 이렇게 하는 방법도 있다는 취지로 하는 답변입니다. 어떤 방법이 좋을지는 상황에 따라 선택하시기 바랍니다.)

    https://github.com/awslabs/aws-lambda-rdbms-integration

    위 링크는 rdbms와 aws lambda를 사용한 예제인데요

    aws lambda를 질문하신 으로 대체하여 생각해보면 되겠지요..

    위 링크의 주된 내용을 요약해보면

    특정 table에 내용이 추가(insert)되었을때

    실행되는 trigger 함수를 정의하는데,

    해당 trigger함수는 aws lambda 함수를 호출하는 일을 수행하는 겁니다.

    위에서 말씀드린대로 lambda를 으로 대체하여 생각해본다면

    db의 값이 수정되거나 추가되거나 기타 어떠한 동작을 할때

    그 동작에 반응하는 trigger함수를 만들고

    해당 함수는 웹에 알려주는 일을 하도록 하면 되겠지요.

    위의 답변에서 허대영님께서 해주신 답변은 어플리케이션 단에서 클라이언트로 알려주는 기능을 구현했다면

    제가 제시한 방법은 db단에서 구현을 함으로써 같은 db를 바라보는 어플리케이션이 여러개이고 각 어플리케이션마다 같은 기능을 여러번 구현 해야할때

    db단에서 구현했다면 1번만 구현하면 되겠지요...

    정확히 질문자님께서 원하는 방법은 아닌것같지만

    이러한 방법도 있고, 영감 얻으시라고 남겨봅니다...

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)