안삿골
280
2017-09-27 21:58:04
10
1333

1분마다 많은 유저의 상태를 변경해야할경우 효율적인방법이 무어있을까요?


안녕하세요. 
예를들어 유저의 상태가 기쁨,슬픔,우울이 있습니다. 유저가 가입하게되면 최초 기쁨으로 데이터베이스에 등록이 되고 30분 뒤에 자동으로 우울모드로 데이터베이스 내용이 바껴야합니다. (저는 jpa를 사용합니다)
 

@RequestMapping(value = "/users1", method = RequestMethod.POST)

@ResponseBody

public String createUser(@RequestBody UserInformation user) throws Exception{

userDataService.createUser(user);

JsonObject json = new JsonObject();

json.addProperty("STATUS", "SUCCESS");

return json.toString();

}


public void createUser(UserInformation user){

userInformationDAO.add(user);

user.setState("smile"); //jpa 디비에 자동등록됨

Timer timer = new Timer();

timer.schedule(new TimerTask() {

@Override

public void run() {

// TODO Auto-generated method stub

user.setState("sad");

}

}, 1000*60*30);

}


현재 생각하는 방식으로는 timer, mysql event 등록, 스프링 schedule 이있는데요, 어느게 효율적일지 모르겠습니다. 좀더 좋은 방법이있으시면 추천해주시면 감사하겠습니다.

0
0
  • 답변 10

  • fx
    1k
    2017-09-27 23:47:23

    가입 시점의 시각을 저장해 놓고, 조회 할때, 경과시간에 따른 상태를 표현하는게 어떠한가요?


    0
  • 안삿골
    280
    2017-09-27 23:57:55
    좋은방법입니다. 하지만 데이터베이스의값을 바꿀수가없을것같습니다. ㅜㅜ
    0
  • fx
    1k
    2017-09-28 00:00:56

    그러니까 왜 바꾸는데 초점을 맞추시는지요?

    30분 이상 경과했는지 여부에 따라 이미 정해진 상태 아닌가요?


    0
  • 안삿골
    280
    2017-09-28 00:13:53
    프론트엔드에서만 내용이 바뀌면 디비에서 슬픔에대한 조회를 해도 실질적으로는 기쁨상태인거잖아요.
    0
  • fx
    1k
    2017-09-28 00:20:12

    처음 부터 DB 쪽 이야기 였습니다. DB 컬럼에 상태 컬럼 대신

    등록시점 컬럼을 만들어 저장해 두고 조회시 30분 이상 경과여부만 보자는 이야기 인데요.


    0
  • 안삿골
    280
    2017-09-28 00:43:47

    아... 어떤말인지는 알겠는데 그렇게보단 직접적으로 기쁨에서 슬픔으로 바꾸고싶어서요!! 

    0
  • chela
    3k
    2017-09-28 00:48:59

    유저 의사와 무관하다면 스프링 스케쥴요.

    DB에서 이벤트나 Job 스케쥴러 쓰는건 비추입니다. 실행로그 추적이 안됩니다.




    0
  • 안삿골
    280
    2017-09-28 10:49:52

    1분마다 스케줄돌려도 자원의 무리가없을까요??
    추천해주시는 스케줄 라이브러리가있나요?

    0
  • 아스키
    10k
    2017-09-28 13:57:34

    굳이 30분이라는 설정을 잡을 필요가 있나욤?

    어차피 가입하고 나서 다른 페이지 접근하면 유저상태가 신규인 이지 확인하고 업데이트 치시면 될 것 같은데요..

    0
  • 안삿골
    280
    2017-09-28 14:40:07
    아 그게 규칙같이 꼮 30분뒤에 상태가 바껴야하는것같아서요.
    로그인할떄마다 30분 체크하라는 말씀이신것같은데 그것또한 좋은방법이나. 결국엔 업데이트가 되든 안되든 유저의 상태를 검사해야할것같아서요.. 뭔가 깔끔하지 않은것같아서요
    그래서 큐로 넣어서 하나하나 검사하면 다시 검사했던건 안해도되니까 뭐 이런 고민까지는 했었습니다. 그런데 어떤게 효율적인지 잘모르겠네요.
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.