월 66,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
환경설정 이해하기
안녕하세요. 강의 첫 시작하고 있습니다. 선생님 영상 보면서 따라해서 Hello World 출력까지 잘 되었습니다. 비주얼 스튜디오 설정은 처음만져보는데요 하면서 궁금한점이 2가지 있습니다. 1. pch (프리 컴파일 헤더)를 사용하려면 프로젝트 마다 속성으로 들어가서 미리컴파일된헤더를 설정 해줘야하는 건가요? 2.VC++ 디렉터리 -> 포함디렉터리 설정을 해준 이유는 해당 클래스 파일과 헤더파일을 가져오기 위해 경로 설정을 해준건가요? 만약에 맞다면 포함 디렉터리 설정만 해주고 라이브러리 디렉터리 포함 설정은 안해줘도 되지 않나요? 3.VC++ 디렉터리 -> 포함라이브러리 디렉터리 설정은 ServerCore 에서 빌드된 파일들을 가져오기 위해서 해준건가요? 만약 맞다면 ServerCore 프로젝트를 수정하고 다시 적용하려면 ServerCore를 다시 빌드 해야하는지 궁금합니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
_popCount에 관한 질문입니다.
지금 해당 코드에 대해서 4번째 의심하고있는 학생입니다. 찾아보니 유사한 질문이 있음에도 이해가 되질 않아 먼저 해당 글부터 링크 걸어두겠습니다.https://www.inflearn.com/questions/365349 _pendingList와 _popCount를 atomic으로 선언해서 사용하고 있는 상황인데 if (_popCount == 1) { // 여기부터 Node* node = _pendingList.exchange(nullptr); // 이 사이에 if (--_popCount == 0) { DeleteNode(node); } else if (node) { ChainPendingNodeList(node); } delete oldHead; 저 주석 사이에 둘 이상의 스레드가 동시에 접근 할 수 있는 건가요?그리고 접근 할 수 있어도, 혹은 다른 함수에서(ChainPendingNodeList) _pendingList에 접근을 시도해도 exchange 연산을 통해 분리해내는데 둘 이상의 스레드가 동시에 같은 포인터를 잡고있는 상황이 있을 수 있나요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
CoreGlobal과 ThreadManager::InitTLS 관련 질문
1. ThreadManager은 여러곳에서 여러 방식으로 사용될 수 있으니 그대로 두는 건 이해 되는데 CoreGlobal은 실수로든 어떻게든 생성자가 2번 이상 실행되는 순간부터 이전의 GThreadManager를 덮어쓸 위험이 있지 않나요? CoreGlobal을 싱글톤으로 만들지 않으신 이유는 무엇인가요? 2. ThreadManager::InitTLS() 안에 두신 정적변수 SThreadId는 ThreadManager가 여럿이 되어도 공유하게 되는데 이것은 의도하신 건가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 루키스님 학원관련하여 질문이있습니다
안녕하세요 서버 강의를 수강중인 학생입니다.이제 취업준비시기가 다가와서어소트락이라는 곳의 서버프로그래밍 국비학원을 다닐 생각인데(프로카데미라는 곳은 수강료때문에 다니기가 힘든 상황입니다) 과정이 길지 않은 6개월이고 내년에 수강이 가능하다고 들어서루키스님 서버 강의로 미리 공부하고 내년에 학원에서 6개월의 기간동안 공부하면서 포트폴리오 열심히 준비를 하면 현실적으로 신입 서버프로그래머로 취업이 가능한지 궁금합니다..ㅎㅎ(물론 취업은 개인재량인건 숙지하고 있습니다!)
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
네트워크 입출력이 아닌 파일입출력에서의 직렬화
파일 입출력 할 때 파싱하는것과 패킷 열어보는거랑 비슷한 느낌이 들었습니다. 그렇다면 엔진같은곳에서 저장하는 프리팹, 씬 등의 정보도 직렬화 시켜서 저장하는게 더 효과적인가요? 강의 내용처럼 저도 학원에서 통째로 저장하다가 터져서 하나씩 따로 수동으로 했었는데 3편까지 보고오니 굉장히 효율적이라고 생각나서 질문드려요 결론 : 네트워크 외의 모든 저장할 파일은 직렬화를 통해 저장하는게 좋나? 가 궁금증입니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
-> 연산자 구현이 잘 이해가 안됩니다.
class TSharedPtr 에서 T* operator->() { return _ptr; } 부분에서 원래 -> 라는게 멤버 변수에 접근하기 위한 연산자 인데 wraight->ReleaseRef(); 를 할 때 ->연산자로 인해 _ptr이 반환이 되잖아요 근데 그 상태에서 ReleaseRef()가 실행 되는게 연결이 안되는 거 같습니다. -> 연산자가 그냥 return _ptr; 만 해주는데 ReleaseRef()에 접근해 실행하는 건 정의해 주지 않아도 자동으로 되는 거라고 이해해되 될까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Event에 관한 질문입니다.
1) 강의에 나온 코드에서는 생산자와 소비자가 각각 하나씩의 쓰레드로 존재하고 생산자는 sleep_for를 이용한 텀이 있기에 문제되진 않겠지만 만약 생산자나 소비자의 쓰레드가 하나가 아니거나 생산자의 텀이 불규칙해지면 Event의 Signal의 상태에 RaceCondition이 일어날 수 있나요?2) SetEvent나 ResetEvent는 커널에게 해당 HANDLE의 signal의 상태에 대한 변경을 요청하는 거 같은데 문맥교환이 일어나나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
thread 오류 질문드립니다
LockGuard Lock(_mutex); _threads.push_back(thread([=]() { InitTLS(); callback(); } )); 위가 원본 코드이고 LockGuard Lock(_mutex); _threads.push_back(thread([&]() { InitTLS(); callback(); } )); 수정본 입니다 데이터를 전부 복사 보다 참조로 들고 있는게 좋을 것 같아서 위와 같이 수정하자 abort() has been called 에러가 뜹니다 원본코드시는 문제가 없는데 혹시 쓰레드에서 참조를 들고 있으면 안되나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이벤트 질문입니다.
(이 질문이 이벤트랑 관련이 있는건가 싶기는 하지만...) 궁금해서 SpinLock과 mutex의 차이점을 찾아봤었는데 SpinLock은 CPU의 자원을 계속 사용하면서 기다리는 것이고 mutex는 lock이 풀릴 때 까지 sleep상태에 들어간다고 본 기억이 있습니다. 그럼 mutex는 sleep방식을 사용하는 건가요? 아니면 내부적으로 이벤트를 이용하는 건가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
compare_exchange_strong과 compare_exchange_weak
compare_exchange에 해당하는 두가지 함수가 있기에 궁금하여 해당 내용을 찾아보았지만 이해가 가지 않습니다.https://cplusplus.com/reference/atomic/atomic/compare_exchange_strong/ Unlike compare_exchange_weak, this strong version is required to always return true when expected indeed compares equal to the contained object, not allowing spurious failures. However, on certain machines, and for certain algorithms that check this in a loop, compare_exchange_weak may lead to significantly better performance. 1) spurious failures? weak는 해당 오류가 어떻게 나올 수 있다는 걸까요?2) weak와 strong을 선택하는 대표적인 기준은 무엇인가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
14분부터 나온 atomic 헤더와 C++버전에 관한 질문입니다.
코드를 따라치면서 컴파일해보다가 14분 30즘에 나온 방식으로 atomic<int32> sum = 0;으로 치고 컴파일 했을 때 -std=c++11과 -std=c++14로는 에러가 났습니다. 1) atomic은 C++ 버전 몇에서 표준화되고 추가되었나요?2) 지금은 모든 Makefile의 CXXFLAGS에 -std=c++17를 추가해 통일시켜놨는데 앞으로 나오는 강의를 기준으로 C++17로 괜찮을까요? 아니면 해당강의에 맞는 추천버전이 있으신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
인디게임 개발할때도 c++서버지식이 필요할까요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 수강하고있는데요 서버 개발자로 취업하는게 목적이 아니고 인디게임을 출시하는게 목적이라면 포톤같은 상용서버 사용하는 이외에도 c++ 서버 지식이 필요할까요??
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
데이터베이스의 read, write는 동기적으로 실행되는 건가요?
클라이언트에서 로그인 패킷을 던져서 서버의 PacketHandler에서 login을 처리하는 함수가 아래와 같다고 예를 든다면 void handle_c_login_packet(){ ... 다른 코드들 dbBind.Execute() // select query dbBind.Fetch() ... 코드 A } 코드 A는 db의 정보를 읽어온 뒤에 실행되는 건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
현업에서는 서버에서 어떤 게임 엔진을 주로 사용하나요??
캐릭터가 스킬을 쓰면 projectile 도 spawn 해주고 collision detection도 해줘야 할텐데 보통 한국 게임회사의 c++ 서버에서는 어떤 게임 엔진을 사용하나요?? 혹시 언리얼로 서버를 돌리는 방식도 현업에서 사용하나요? (제가 unreal은 아직 잘 몰라서 unity로 예를 들자면 DontDestroyOnLoad에 Server라는 게임오브젝트를 만든뒤 script를 통해서 서버를 띄우고 production 모드에서는 server build로 빌드해서 사용하는 등과 같은 방식)
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session 에서 sendQueue 관련 질문입니다 !
안녕하세요, 강의 서버를 테스트 툴로 유저를 유입시킨뒤 채팅 BroadCast 테스트를 해봤습니다. 당연한 것이겠지만 유저 많아질 수록 _sendQueue.push 의 수가 _sendQueue.pop 보다 많아지면서 메모리가 계속 올라가는 이슈가 생기고, 또 WRITE_LOCK 경합에서 pop 이 잘 이루어 지지않아 패킷 send 에도 지장을 주는 현상이 발생됩니다. 테스트툴은 100 Msec 마다 N 명의 유저가 계속 채팅을 하는 방식으로 테스트 하였습니다.위에서 말한 이슈는 어떻게 해결하면 좋을까요 ? 어떤 노하우가 있을지 궁금합니다 !
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문이 있습니다 선생님
TLS가 쓰레드들 마다 각기 가지고 있는 독립적인 저장공간이고, 처음에 Heap이나 데이터 영역에서 어느정도의 메모리 block을 가져올때 Lock을 걸고 이후부터는 TLS를 가지고 있는 해당 쓰레드는 별도의 경합이 없이 해당 변수를 사용할 수 있다는것은 이해가 갔습니다. 그런데 여기서 궁금한게 만일 TLS가 가져온 데이터가 다른 쓰레드들도 읽거나 써야되는 데이터라면 어떻게 되나요? TLS에 있는 데이터를 반납하고 다시 데이터 영역에서 경합을 시키나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
언리얼 연동 질문드립니다
언리얼이랑 서버 연동하실 때 언리얼에 래핑되어 있는 Fsocket을 사용하셨나요 아니면 윈속의 Socket을 사용하셨나요? 언리얼이랑 IOCP 연동 자료가 별로 없는데 혹시 참고 할만한 곳이 있을까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
VS 테마 어떤거 사용하시나요?
컬러가 가독성이 좋은데 어떤 Theme인지 못 찾겠네요 ㅠㅠ 어떤 Theme 사용하시는지 알려주실 수 있나요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
제가 맞게 이해한것인지 모르겠습니다.
안녕하세요, 강의를 들으면서 SpinLock과 Sleep을 좀 정리를 해보고 있는 상태입니다. A,B,C,D의 4개의 스레드가 있다고 할 때 SpinLock은 개인주의인 4번마냥 cpu자원을 계속 사용하면서 아무런 행동도 하지 않으면서 자원을 선점할 기회를 엿보는것이고 Sleep은 "어? 쓰고있네? 그럼 난 쫌만 쉬고 있어야지." 하면서 탱자탱자 놀고있다고 보면 되는걸까요? 그리고 sleep_for를 사용하게 되면 정해진 시간동안은 cpu사용을 위한 시간 자체를 할당받지 못하는 것이 맞나요?? (sleep_for 를 사용하면 A >> B >> C >> D 인게 D에서 정해진 시간이 지나기 전 까지는 계속 A >> B >> C >> A >> B >> C 같은 거라던가...) yield 역시 A >> B >> C >> D 로 실행되는게 D에서 yield를 호출하면 A >> B >> C >> A >> B >> C >> D 가 된다고 봐도 되는걸까요? 강의를 계속 듣다보면 LockFree에 대해서도 당연히 배우겠지만(어디서 주워들은건 있어서...) 지금 SpinLock과 Sleep은 Lock을 사용하기 때문에 내가 자원을 사용할 수 있는 상태가 아니면 아무런 행동도 하지 않는다고 볼 수 있을까요??
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
변수 하나가 PAGE_SIZE 만큼의 메모리를 잡고있는 건가요?
변수 하나를 StompAllocator를 사용하여 선언한다면 한 변수가 PAGE_SIZE 만큼의 메모리를 잡고있는 건가요? 변수 몇 개만 선언함으로서 큰 양의 메모리를 차지하는게 아닌가요?