뒤끝 펑션 및 뒤끝베이스 호출 설계관련 문의드립니다

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 :
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

안녕하세요, 기능 설계 중에 궁금한 것들이 있어서 문의드립니다

일단 원하는건, 유저 정보의 수정하려할 때 해킹을 막기위해 서버에서(뒤끝펑션) 처리하고 싶습니다

상황 예시를 들자면, 몬스터를 잡을 때 처리해야할 유저정보들이 골드획득, 아이템획득, 업적 갱신이 필요하다고 가정했을 때,

모든 것들을 뒤끝펑션에서 처리하려 했으나, 뒤끝펑션이 “동기” 로 되어 있어서 통신 시간이 늘어날 거라 예상됩니다

단순히 위에 상황에 따른 뒤끝 펑션 내에서 뒤끝베이스 기능 호출 필요한 것만 나열해보자면,

  1. 잡은 몬스터아이디에 해당하는 몬스터 데이터 차트 받아오기
  2. 해당 몬스터의 드랍 정보에 따른 랜덤아이템 확률로 드랍 아이템 선정
  3. 골드 획득 업데이트
  4. 아이템 획득 Insert ( 아이템 2개 획득하면 Insert 2번 )
  5. 유저 업적 정보 업데이트

필수적인 상황만 예시를 들었을 뿐 더 늘어날 수 있는 구조고, 이게 모두 동기로 이루어지기때문에 사실상 뒤끝펑션에서 처리하면 안될것 같다라는게 결론입니다

그래서 생각해본 방법으론, 위에 필요한 1~5번을 적절히 나눠서 뒤끝펑션 함수를 여러개로 구성을 하고 ( 골드따로, 아이템획득 따로, 업적 따로 ) 클라에서 트랜잭션에 담아 펑션을 모두 호출하여 동기로 구성되어있던걸 약간 분산 시키는 식으로 설계하려하는데, 이게 가능한 방법인지 궁금합니다 ( 트랜잭션에서 뒤끝펑션을 여러개 호출하는 것 )

이 외에 혹시나 지금 상황을 해결할 수 있는 다른 좋은 설계 방법이 있으면 조언 부탁드리겠습니다.

덤으로, 아이템 획득같은경우 겹쳐지지 않는 아이템마다 ( 장비) 획득시 Insert 를 따로 해서 아이템별 row가 여러개가 되도록 설계하려하는데 괜찮을까요? 최근 공부하면서 가이드 문서를 보니 유저당 1 row 를 추천한다고 되어있어서, 한 로우의 한 컬럼에 Json 타입같은걸로 모든 가지고있는 아이템들을 담아서 구성해야하는건지 궁금합니다. 만약 후자로 해야한다고 하면 단순 아이템 아이디를 넘어 json에 아이템 정보들도 담고 있어야할텐데요 ( 강화 정보 라던지 등등 ) 그럼 Json 이 길어질 것 같은데 이부분을 어떤식으로 설계해야할지도 궁금합니다

안녕하세요 개발자님
뒤끝펑션은 유니티 클라이언트에서 사용하던 로직이 서버에서 실행되는 것이라 이해해주시면 됩니다.
특정 행동을 하고 1~5번이 모두 완료될때까지 클라이언트에서 로딩 화면 등으로 진행을 막는 것과,
펑션으로 호출하여 펑션이 모든 일정을 처리하고 리턴하는 것 모두 결과적으로는 동일합니다.
(50~ 150ms의 차이가 발생할 수는 있습니다.)

데이터의 업데이트를 동시에 하려면 비동기를 다중으로 호출하는 것 보다는 트랜잭션 쓰기를 하는 것이 더 좋을 것으로 예상됩니다.

마지막으로 데이터를 최소화하려면 Dictionary 형태로 저장을 하거나 , 데이터 순서를 미리 정해둔 후 [3,2,5] 등으로 순서에 의존하여 개수만 저장하는 방식을 이용할 수 있습니다.

나타내려는 값 : 포션1 : 3개, 포션2 : 2개, 포션3 : 5개

  • { {“id1”, 3}, {“id2”,2}, {“id3”,5} }
  • [3,2,5]

안녕하세요 개발자님
뒤끝펑션은 유니티 클라이언트에서 사용하던 로직이 서버에서 실행되는 것이라 이해해주시면 됩니다.
특정 행동을 하고 1~5번이 모두 완료될때까지 클라이언트에서 로딩 화면 등으로 진행을 막는 것과,
펑션으로 호출하여 펑션이 모든 일정을 처리하고 리턴하는 것 모두 결과적으로는 동일합니다.
(50~ 150ms의 차이가 발생할 수는 있습니다.)

<< 이부분은 클라와 서버 차이가 클라에서는 1~5번을 비동기로 동시에 호출이 가능한 로직인데
뒤끝펑션에서는 하나하나가 모두 동기여서 1번이 끝나고 2번이 시작되고 2번이 끝나고 3번이 시작되는걸로 알고있습니다
이러면 결국 응답 시간이 뒤끝펑션을 쓰면 더 오래걸리는게 아닌가요?
그래서 클라에서 트랜잭션으로 뒤끝펑션을 여러개를 호출하려 했던 것입니다

  1. 잡은 몬스터아이디에 해당하는 몬스터 데이터 차트 받아오기
  2. 해당 몬스터의 드랍 정보에 따른 랜덤아이템 확률로 드랍 아이템 선정
  3. 골드 획득 업데이트
  4. 아이템 획득 Insert ( 아이템 2개 획득하면 Insert 2번 )
  5. 유저 업적 정보 업데이트

트랜잭션의 경우, 게임정보관리의 삽입, 수정, 읽기, 삭제만 가능합니다.
따라서 먼저 수정되는 데이터들의 정보를 알아야 하므로
1번과 2번은 3,4,5번 작업 전에 호출되어야 하는 것으로 이해하였습니다.
그렇다면 1번 호출 → 2번 호출 → 3,4,5 동시 호출이 순서대로 진행해야되는 것이며,
펑션이나 유니티 클라이언트에서나 동일한 호출이 될 것으로 예측됩니다.

펑션의 경우에는 업로드된 펑션에 호출되는 시간이 있으므로 유니티 클라이언트보다는 50~150MS 가량 더 소요될 수 있습니다. 이에 속도로만 본다면 유니티 클라이언트로 구현하는 것이 더 빠를 수 있습니다.

처음부터 뒤끝 펑션을 이용하여 구현하는 것은 난이도가 크게 상승할 수 있으므로,
먼저 유니티 클라이언트 내부에서 동작하는 방식을 취하고, 추후에 언패킹, 해킹 위험등이 걱정되면 뒤끝 펑션을 이용하는 것을 추천드립니다

그렇다면 1번 호출 → 2번 호출 → 3,4,5 동시 호출이 순서대로 진행해야되는 것이며,
펑션이나 유니티 클라이언트에서나 동일한 호출이 될 것으로 예측됩니다.

<< 이부분이 조금 궁금합니다. 클라이언트에서는 3,4,5 동시 호출이 가능한 상황인데,
펑션에서는 모두 동기 처리여서 3,4,5 호출이 실질적으로 3호출후 응답후 4호출후 응답후 5호출 응답후 클라로 넘어가는걸로 알고있습니다. 제가 잘못알고 있는걸까요? 즉 하나의 펑션안에서 처리해야할 것들이 많으면 결과적으로 모든걸 순차적으로 전부 하나하나 끝날때까지 기다렸다가 클라로 응답이 오는것 때문에 설계단에서의 고민을 하고 있는 상황입니다

클라이언트에서는 여러 작업을 동시에 호출하는 것이 가능하고,
펑션에서는 비동기를 지원하지 않기 때문에 순차적으로 호출이 됩니다.

다만 3,4,5의 경우 모두 게임정보관리의 Insert, Update를 활용한 기능입니다.
Insert, Update 두 기능 모두 트랜잭션 쓰기 라는 기능으로, 최대 10개의 작업까지 한번에 처리할 수 있습니다.
따라서 트랜잭션 쓰기 기능을 사용할 경우, 두개 모두 3,4,5 처리를 통합하여 처리하는 것이 가능합니다.
이럴 경우에는 1 → 2 → (3,4,5 동시 호출)의 순서가 됩니다

답변 감사합니다. 펑션 내에서도 트랜잭션이 사용 가능한지 몰랐었네요
참고하여 구현해보겠습니다!

좋아요 1