Ask Your Question
0

오브젝트 생성 질문입니다.(2016-09-20, david_yoo)

asked 2016-11-30 18:12:55 +0900

inkeun.kim gravatar image

//////////////////////////

아 그리고 예제대로 object 를 만들어서 캐싱을 하려고 하는데

이게 코드 실행시 바로 시작하게 하면에러가 나네요.

보니까 db 접속을 한 후에야 만들어진 오브젝트 클래스를 로드할 수 있는것 같은데.

db 접속시 바로 데이타 캐싱을 할 수 있는 콜백 같은것도 있나요?

그리고 오브젝트로 시간관련 데이타를 생성하려면 string 으로 해야되나요?

마지막으로 클라이서 서버로 메세지 보내줄때 스키마를 통해 검증을 할수 있는 걸로 알고 있는데.

이런 클래스화된 오브젝트를 통해 스키마 검증도 가능한가요? 가능하다면 어떻게 해야되나요?

/////////////////////////////////////////////////////////////////////////////////////// 한가지 질문이 더 나왔네요...

이런식으로 오브젝트 잡고 유저를 생성해 주었는데....

왜 계속 db 에 생성이 안될까요 ㅠ_ㅠ 키 값이 두개면 안되나요???

key 가 없는 테이블은 생성이 잘되는데 이 테이블은 유저 정보가 insert자체가 안됩니다 ㅠ_ㅠ

edit retag flag offensive close merge delete

6 answers

Sort by » oldest newest most voted
0

answered 2016-11-30 18:14:29 +0900

inkeun.kim gravatar image

Answer by david_yoo · 2016-09-21 AM 06:34

아 혹시 string 32 로 지정해두고 이거보다 짧은 string 이 오면 무시하는건 아니겠죠...?

edit flag offensive delete link more
0

answered 2016-11-30 18:14:36 +0900

inkeun.kim gravatar image

updated 2016-11-30 18:14:50 +0900

Answer by david_yoo · 2016-09-21 AM 07:08

Info 로그는 어디서 찾으면 될까요..? 아 어제 제가 현재 쓰고 있던 USER_TABLE 이 아니라 그냥 USER 라도 명했던 테이블 명을 바꾼 것이고 이중 dateform 을 기존 string 에서 bigint로 교체하였었습니다.

근데 교체후에 빌드해보니 스키마 데로 DB 가 변경이 되지 않아서 에러가 나더군요. Dateform 섹션이 string 이 아니라고 나오면서요. 우선 SQL 로 직접 접속해서 바꾸어 주고나니 해당 오류는 안나오긴했는데 그게 찜찜해서 테이블 명도 바꿔서 재 빌드했었습니다.

슨데 보니까 테이블 명을 바꾸면 기존에 있던 테이블이 지워지는게 아니라 여전히 그대로 남아 있더군요..

이런점이 오류의 원인이 될까요?

object 예시처럼 sp 라는 섹션을 추가할때는 스키마 데로 반영이 되는데 기존 생성했던 섹션을 지우거나 데이타 형식을 교체하거나 테이블을 지울때는 현재 sql에 반영이 안되든데 원래 이런건가여?

edit flag offensive delete link more
0

answered 2016-11-30 18:15:08 +0900

inkeun.kim gravatar image

seunghyun ♦♦ · 2016-09-21 AM 07:28 0 로그 파일은 {프로젝트이름}-local 런처로 실행되었다면 서버가 실행된 경로의 logs/glog/*.INFO,

GDB 등으로 실행 되었다면 (프로젝트이름)-build/debug/logs/glog/*.INFO,

서비스로 실행되었다면 /var/log/funapi/{프로젝트이름}.{flavor이름}/glog/*.INFO 형태로 존재합니다.

위치를 찾기 힘드시고 쉽게 재현하실 수 있으면 화면에 출력되는 로그를 복사 붙여넣기 해서 주셔도 됩니다.

엔진이 오브젝트 모델이 변경되어서 스키마를 자동으로 변경할 때 기존 데이터를 수정하지 않도록 되어 있습니다. 따라서 같은 이름인데 타입만 변경된 경우는 오류 로그를 출력하면 종료됩니다.(데이터 타입 변경은 데이터 유실이 있는 경우가 있기 때문) 이 경우 수동으로 스키마를 변경해주셔야합니다. (보통 개발 단계에서는 테이블을 삭제 하셔도 됩니다.)

위와 같은 이유로 기존에 있었던 오브젝트 타입 또는 어트리뷰트를 삭제하더라도 엔진이 자동으로 대응되는 테이블 또는 컬럼을 삭제하지는 않습니다. 수동으로 삭제하시면 되며, 그냥 두셔도 공간을 차지하는 것 외에 문제가 되지는 않습니다.

edit flag offensive delete link more
0

answered 2016-11-30 18:12:58 +0900

inkeun.kim gravatar image

updated 2016-11-30 18:13:23 +0900

Answer by seunghyun · 2016-09-21 AM 06:54

INFO 로그 전체를 주시면 되며 파일이 클 경우 해당 생성 함수 시작 전 로그부터 주시면 됩니다. 로그가 공개되는 것이 부담스러우시면 funapi-support@ifunfactory.com 으로 보내주셔도 됩니다.

저희쪽에서 위에 올려주신 모델과 코드로 테스트 해봤을 때 아래와 같이 입력되었습니다.

mysql> select * from tb_Object_User_Table; +------------------+----------+-----------+-----------+------------------+-----------+-------------+----------------+----------------+----------------+---------------+-----------------+----------------------+----------+ | col__ObjectId_ | col_U_Id | col_U_Did | col_Fb_Id | col_Account_Date | col_U_Exp | col_U_Level | col_Enter_Date | col_Total_Date | col_Game_Money | col_Game_Cash | col_Game_Ticket | col_Character_Ticket | col__tag | +------------------+----------+-----------+-----------+------------------+-----------+-------------+----------------+----------------+----------------+---------------+-----------------+----------------------+----------+ | �=T�s�C#��,�|c:B | | sdfasdf | asdfsadf | 2016-09-21T06:46 | 0 | 0 | 1474440412 | 1 | 0 | 0 | 0 | 0 | | +------------------+----------+-----------+-----------+------------------+-----------+-------------+----------------+----------------+----------------+---------------+-----------------+----------------------+----------+

짧은 string 은 상관 없으며 길면 잘린 채 입력되며 아래와 같은 로그가 출력됩니다.

W0921 15:46:52.357192 29199 object.cc:1151] User_Table-Account_Date: too long; max length of the attribute=16; value: 2016-09-21T06:46:52.357174; truncated value: 2016-09-21T06:46
edit flag offensive delete link more
0

answered 2016-11-30 18:14:01 +0900

inkeun.kim gravatar image

Answer by seunghyun · 2016-09-21 AM 01:36

안녕하세요. 아이펀팩토리입니다.

  1. 아 그리고 예제대로 object 를 만들어서 캐싱을 하려고 하는데 이게 코드 실행시 바로 시작하게 하면에러가 나네요. 보니까 db 접속을 한 후에야 만들어진 오브젝트 클래스를 로드할 수 있는것 같은데. db 접속시 바로 데이타 캐싱을 할 수 있는 콜백 같은것도 있나요?

"코드 실행 시 바로 시작하게 하면" 은 서버의 Install 함수를 말씀하시는지요? 서버의 Install() 함수에서는 오브젝트 접근이 불가능합니다. 오브젝트는 항상 Event 에서 다루어야 합니다. 서버의 Start() 함수에서 Event::Invoke(오브젝트를 다루는 함수) 를 호출하시면 될 듯 합니다.

Event 관련 설명은 http://www.ifunfactory.com/engine/doc... 를 참고 부탁드립니다.

  1. 그리고 오브젝트로 시간관련 데이타를 생성하려면 string 으로 해야되나요?

아직 시간 타입을 지원하고 있지 않습니다. 따라서 string 이나 integer 형태로 사용하시면 됩니다.

A. integer 로 다루는 방법

int64_t ts = WallClock::GetTimestampInSec();
WallClock::Value value = WallClock::kEpochClock + fun::WallClock::FromSec(ts);

(integer to string 변환은 곧 엔진의 기능으로 추가할 예정입니다.)

B. string 으로 다루는 방법

 string str = boost::posix_time::to_iso_extended_string(WallClock::Now());
WallClock::Value value = boost::date_time::parse_delimited_time<WallClock::Value>(str, 'T');

(위 두 변환은 곧 엔진의 기능으로 추가할 예정입니다.)

  1. 마지막으로 클라이서 서버로 메세지 보내줄때 스키마를 통해 검증을 할수 있는 걸로 알고 있는데. 이런 클래스화된 오브젝트를 통해 스키마 검증도 가능한가요? 가능하다면 어떻게 해야되나요?

아래 두가지 방법을 제공하고 있습니다.

A. http://www.ifunfactory.com/engine/doc... B. http://www.ifunfactory.com/engine/doc...

  1. key 2 개 사용

key 가 2 개 이더라도 생성이 되어야 합니다. 문제가 있다면 오류 로그가 남을 것으로 예상되는데요, 로그와 엔진버전을 여기 올려주시면 확인해보겠습니다. 혹시 이벤트 안에서 생성하는 것은 맞는지도 확인 부탁드립니다.

감사합니다.

edit flag offensive delete link more
0

answered 2016-11-30 18:14:20 +0900

inkeun.kim gravatar image

Answer by david_yoo · 2016-09-21 AM 06:01

나머지는 다 이해했습니다.

마지막 부분 로그는 어떤 부분드리면 될까요? 이벤트에서 실행한게 맞고 동인 이벤트에서 키가 없이 create 하는 db insert는 정상적으로 동작하는데 이부분만 안되네요...

엔진버젼은 1.0.0 1739 trusty 로 되있네요

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2016-11-30 18:12:55 +0900

Seen: 84 times

Last updated: Nov 30 '16