월 66,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리 릭이 쌓이고 있는지에 대한 체크
안녕하세요 선생님유니티 클라, C++ 서버로 탑뷰 슈팅게임을 만들고있습니다.C++서버가 종료됐을때 메모리 릭이 남는것이 아닌 프로그램이 가동중에 유저, 총알등이 삭제되고 생성되면서 계속해서 릭이 쌓이고있는지 확인하고 싶은데 방법이 있을까요?선생님이 알려주신 메모리기법들은 적용하지 않았습니다.(알려주신것들을 최대한 공부하고 이해는 했기 때문에 어떻게든 써먹을수있겠지만 적용하지 않은 이유는 제가 감당할수없기 때문입니다. 문제가 생겨 필요한 상황이 나왔을때 그때 구현해볼 생각입니다. 사용하는 부분들도 있습니다. 버퍼관리라던지...)
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라이언트 프로그래머 커리어 고민
안녕하세요 루키스님! 저는 4년차 유니티 클라이언트 프로그래머입니다.강의 항상 잘 보고 있습니다! 최근 여러 일을 병행하시느라 바쁘신것으로 알고있는데 이런 질문 드려 죄송합니다. 꼭 답변해주지 않으셔도 괜찮습니다!https://www.inflearn.com/questions/680598/%ED%81%B4%EB%9D%BC%EC%97%90%EC%84%9C-%EC%84%9C%EB%B2%84-%EC%A0%84%ED%96%A5저도 이 글에 질문자분처럼 유니티로 커리어를 시작했고 4년차가 되었고 비슷한 이유로 유니티쪽 프로젝트에 신물이 난 상황이라 언리얼 클라이언트 혹은 게임 서버 프로그래머로 전향을 생각하게 되었습니다.저 질문자분처럼 서버 학원을 다닐 생각은 아니지만 퇴근후에 짬짬히 언리얼이든 서버쪽이든 공부해 이직을 하고 싶은데 루키스님은 저 질문글에서 서버쪽보다는 언리얼 클라이언트로의 전향을 추천해주셔서요.같은 클라이언트지만 언리얼 경력이 없다보니 이직을 하더라도 유니티 경력을 온전히 인정받지는 못할것같은데 언리얼 클라이언트쪽을 추천해주신 이유를 알 수 있을까요?사실 질문자분이랑 엄청 비슷한 상황이고 언리얼이든 서버든 기초는 있는 상태입니다. 둘다 흥미는 있지만 뭔가 서버쪽이 MMORPG에 서포터(힐러)처럼 좀 더 대우받는것같고 큰 기업쪽에 취업이 쉬울것같다는 인상때문에(+ UI 안해도되는) 서버쪽에 마음이 가는데 조언 부탁드립니다 ㅠㅠ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Lock-Based Queue 병목현상 질문 드립니다.
Lock-Based Queue를 제작하여 테스트를 할 때 waitPop을 사용할 경우 sleep을 지우고 디버깅을 해보면 Queue 사이즈가 무한정으로 늘어납니다. Push를 한 번 Pop을 2번 돌려도 마찬가지입니다. 실제 스레드에서 사용할 시에는 sleep을 사용하지 않고 while문으로 돌리게 될텐데, wait를 쓰면 이렇게 병목현상이 발생하는 걸까요? 이 현상을 해결할 방법은 없나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
할당 범위? 오류? 질문 있습니다. 메모리 매니저 생성자 부분
강의영상 23;29초을 보면 두 번째 루프가 1024부터 시작함0~1024바이트까지는 32바이트 단위로 증가1025~2048바이트 까지는 128바이트 단위로 증가즉 1025바이트가 필요하면 1024+128바이트의 메모리 풀에서 메모리를 가져다 쓴다(메모리 매니저의 pools의 1025번지는 1024+128단위로 할당되는 메모리 풀을 가리킨다.)로 의도하셨다고 생각이 듭니다.하지만 size=1024로 대입하는 구문을 빼면size=1024+32 부터 시작합니다.따라서 사용자가 1025바이트가 필요로 하면메모리 매니저의 pools의 1025번지에는 1024+32바이트의 메모리풀에서 pop해서 사용할 것 같습니다.의도했던것에서 값이 밀렸기에 3번째 루프에서 size는 2080에서 시작하고2080 > 2336>2592 >...>3872 > 4128루프탈출그렇기에 3873~4096번지까지는 NULL이들어갑니다. 루프시작시에 1024, 2048부분이 들어가야 할 것 같습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
MemberJob 생성자 부분에서 에러가 발생해 질문드립니다.
아래 질문을 올리신 분과 동일한 문제인데 아래처럼 에러가 발생합니다.강의 중간에 std::apply( )를 사용하기 위해 c++ 17로 변경하셨고, c++17 이전 버전에서 동작하기 위한 xapply 코드를 작성하셨습니다. 저의 생각으로는 std::apply( )를지원하지 않는 이전 버전에서 동작하기 위함이니까 저의 원래 환경인 c++14로 변경해서 빌드를 진행하니 에러가 발생합니다.일단 다시 c++17로 변경해서 진행해보니 에러는 발생하지 않는데 강의에서 설명하신 코드(MemberJob)가 c++17 이전 버전에서는 동작하지 않는 것인가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
LIst<구조체> 형태의 패킷을 보내는 방법이 있나요?
List<구조체> 형태를 패킷으로 보낼려고 하는데 BufferWriter부분에서 List<구조체> 데이터를 쓸때 엑세스 위반의 오류가 나오게 됩니다.List<구조체> 형태의 패킷을 보내는 방법이 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
기능 구현을 할 때 어떤 생각을 하고 만드시는지요 ?
기능 구현을 하실 때, 어떠한 기능을 구현할 것인지 먼저 결정하고 실제 구현을 하고나면 해당 기능은 특정 이벤트가 발생할 때, 컨트롤러나 이벤트 핸들러단에서 로직을 호출할텐데 이때 궁금한점이... 기능을 구현하실 때 특정 컨트롤러나 핸들러단에서 호출해준다고 가정하고 구현하시는게 맞으신가요 ??(예를들어, AccountManager나 UserManager 객체에서 제공하는 기능들에서도 어디에서 호출되는지는 생략하고 특정 기능을 구현하시는 부분)개발에 대한 이해가 부족한 상황에서 무작정 게임 개발이 궁금해서 도전하게 되었는데... 해당 부분이 자꾸 생각나서 질문 남겨봅니다. 감사합니다 :)
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
IOCP 서버 연동 강의 출시 및 프로그래밍 커리큘럼 관련 문의를 드립니다.
안녕하세요. ROOKISS강사님. 강사님의 c++ 과 서버 강의에 연일 감동을 받으면서 공부중인 퇴사한 직장인 취준생입니다. 사실 저는 학부는 전자과를 나와서 대학원을 정보보안쪽을 나왔으나 프로그래밍에 대한 콤플렉스가 있었습니다. c언어 f학점을 받고 프로그래밍과는 담을 쌓았던 웃지못할기억이 있습니다. 그러나 직장을 6년 다니면서 문서작업업무를 주로 하면서 개발을 모르면 it에서 성장하는데 한계가 있음을 느끼고 직장정치등의 여러 사정에 과감히 퇴사를 결심하고 다시 취업을 준비중입니다. 개발역량을 키우고자 프로그래밍 공부를 하던중 강사님 커리큘럼을 알고 주저없이 신청하게 되었습니다. 제가 개발실력은 많이 형편 없지만 강사님의 서버커리큘럼을 보고 우선은 서버 커리큘럼은 무조건 다 뛰고 강사님께서 설명하신 내용을 제가 안보고 코드를 짤 수 있는 역량을 기르기로 마음먹은 상태입니다. 궁금한 점은 제목과 같이 다음과 같습니다.iocp서버 연동강의 출시일 대략 일정은 어떻게 될까요?강사님의 c++과 c# 서버 커리큘럼외에 c#웹개발/DB도 들을 생각입니다. 혹시 추후에 C++로 웹개발이나 DB, 프레임워크와 같은 강의도 출시 계획이 있으신지와 있다면 대략적인 일정이 궁금합니다.WINAPI의 경우 나온다면 언제쯤 출시하실 계획이신지 궁금합니다. 강사님이 만일 어떤 후배가 게임분야가 아니더라도 이건 꼭 공부하면 좋겠다 하시는 분야나 내용이 있다면 추천좀 부탁드립니다. 저는 이 강의 이외에 리눅스시스템 프로그래밍과 컴파일러도 만들어볼 계획을 갖고 있습니다. 실천을 당연히 할 준비는 되어 있습니다. 프로그램과 담을 더이상 안쌓기로 맘 먹었기에 용기내서 길을 가보고자 합니다. 좋은 강의 출시 많이 부탁드립니다. 역량을 키워서 게임분야나 그곳이 아니더라도 IT에서 통할 수 있는 인재가 되어보고자 합니다. 바쁘시겠지만 일정을 알려주시면 감사하겠습니다. 좋은 컨텐츠 너무 감사드립니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
IOCP 핸들러 질문 드립니다.
처음에 CreateIoCompletionPort 함수를 통해 INVALID_HANDLE 을 주며 IOCP 핸들 만드는 것에 대한 질문입니다.강의에서는 한개의 IOCP 핸들이 모든 요청을 처리 하는것으로 보이는데단편적인 예로 아래와 같이 AcceptEx 를 담당하는 IOCP 핸들 1개Send/Recv 를 담당하는 IOCP 핸들 1개이처럼 각자 다른 IOCP 핸들이 해당 오퍼레이션만 담당하게 설계 할 수 있을까요 ?이렇게 설계한다면 문제점이 있을까요 ?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
연산자 질문
그 인벤토리와 관련된 예시를 드실 때 (순환 x 예시) 인벤토리의 생성자와 소멸자를 호출해본 결과 k1 = nullptr 후에도 인벤토리의 소멸자가 호출이 안되더라구요 k1->inventory = new Inventory(k1) 이부분에 관련해서 분석을 진행하고 있는데new Inventory(k1)에서 인벤토리의 ref 카운트 1 증가. (refcountable 규칙에 의해)InventoryRef _inventory = new Inventory에서 이동 대입 연산자로 인해 레퍼런스 증가 x메인 스레드 종료 후 k1의 소멸자가 호출되고서 멤버 변수도 초기화되는 과정에서 _inventory = nullptr 로 인해 레퍼런스 감소가 되어 소멸자가 출력되어야 하는게 정상 아닌가요? 제가 어느 부분에서 놓친건지 잘 모르겠습니다.. knight의 소멸자에 inv의 레퍼런스 카운트 값을 감소 시키니 inv의 소멸자가 출력됐는데, 어느 부분에서 레퍼런스 카운트 값이 1이 추가로 들어왔는지 못찾겠네요..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Lock-Based Stack / Queue 강의 관련 질문입니다.
안녕하세요. 선생님.항상 좋은 강의 만들어주셔서 감사합니다.다름이 아니라 강의 영상을 보면 queue의 TryPop(OUT data)와 같이 OUT이 TryPop 함수 다음에 붙어있는데요.visual assist에서 제공해주는 기능인 것인가요?찾아봐도 C++ 관련 OUT 키워드 문법이 없는 것 같고, 해당 키워드를 입력해도 저는 컴파일이 되지 않아서 질문드립니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Push의 LCurrentJobQueue관련 질문입니다.
현재 JobQ에 Push하는 과정에서LCurrentJQ를 확인하여 GlobalQ에 넣을지, 스스로 실행할 지를 결정하는 것으로 보입니다. TLS는 각 Thread마다 별개의 주소 공간으로 소유하고 있는 것처럼 동작한다고 이해하고 있습니다.한 thread에는 실행 흐름이 하나인 것으로 알고 있는데LCurrentJobQueue가 nullptr이 아닌 상황에서 Push가 발생할 수 있나요?Execute를 실행하는 thread의 LCurrentJQ만 nullptr이 아닐 것 같은데 Execute가 실행 중인 thread라면 Push를 동시에 실행할 수 없을 것으로 생각됩니다. ㅜㅜ
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
SendBuffer Pooling 관련 질문있습니다.
여기서 다 썼으면 버리고 새거로 교체할 때 교체하지 않고 그냥 Reset만 호출해서 _usedSize를 0으로만 해줘도 되지 않을까 했었는데 WSASend를 호출하는 과정에서 아직 예전 버퍼가 날아가면 안되는 상황이 있기 때문에 새로 할당해준다. 가 맞게 이해한 부분인가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ACQUIRE_TIMEOUT_TICK에 관해 질문이 있습니다.
여기서 ACQUIRE_TIMEOUT_TICK 보다 작업 시간이 길어질 때도 일반적인 경우 엄청난 문제가 있다고 생각하지만... 여기서 CRASH를 때려서 서버를 죽이는 것이 맞는지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Job 생성자 관련 질문입니다.
위의 생성자를 이용하여 아래와 같은 코드로 job 객체를 따로 생성해보려고 하였습니다.맞는 생성자 instance가 없다고 하며 코드가 정상 동작 하지 않았습니다.JobSerializer::PushJob의 과정을 똑같이 따라한 것 같은데 동작이 안되는 이유를 모르겠습니다.원인을 알고 싶어 찾아보았으나 제가 template 에 대한 이해가 미숙하여 어떤 이유로 객체 생성이 되지 못하는 건지 모르겠습니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
패킷 데이터 크기를 유동적으로 바꾸고싶습니다.
안녕하세요. 선생님지금 탑뷰 PVP게임 슈팅게임을 포폴로 만들고있습니다.서버에서 현재 월드에 올라와있는 객체들의 데이터를 클라이언트한테 보내있습니다. ex)모든 객체Update패킷{객체[10];}예시로 이런식으로 패킷내부에 최대 객체배열의 크기를 10개로 잡고 데이터를 전달하는 형식으로 하고있습니다. 이때 현재 존재하는 객체의 갯수 만큼 크기를 잡아 패킷을 전달하고싶습니다. 아 또 추가로 질문이 있습니다.보통으로 패킷의 최대량을 몇으로 설정하시나요? 구글링을 해보니까 네트워크 전송과정 때문에 1460바이트를 되도록 넘지 말라고 되있더라구요. 그래서 저는 1024바이트로 맞춰놨습니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TLS와 공유자원
제가 강의를 시청하고나서 TLS 같은 경우에는 각 스레드 별로 사용할 수 있는 extern 변수를 따로 만들어 준 느꼈습니다. (실제 강의에서도 그렇게 말씀하셨구요) 근데 이걸 서로 다른 스레드에서 읽거나 수정할 수 없다고 하면, 서로 다른 스레드에서 읽고 수정할 수 있는 공유 자원과는 좀 거리가 먼 느낌이 있어 활용도가 낮을 것 같다는 개인적인 생각이 드는데... 강의에서 예로 드신 사례 외에 게임쪽 과 관련해서 추가적인 예가 있을까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TLS의 물리적 저장소 위치가 어디인가요?
TLS는 쓰레드마다 가지고 있는 고유한 저장 공간인데메모리 모델 강의에서 나온 CPU코어 마다 가지고 있는 고유 캐시 영역에 저장이 되는 것인지아니면 RAM에 쓰레드 갯수만큼 공간이 할당되는 것인지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
저연차 프로그래머 공부 방향성 질문입니다.
안녕하세요. 강의에 많은 도움을 받고 있는 저연차 게임 프로그래머입니다. 코드 리뷰만 받으면 설계나 코드 구조로 매번 지적받는데, 공부 좀 하라는 소리을 들어도 언어 문법이나 프로그래밍 기술 이론과 달리 어떻게 공부해야 하는지 감이 잘 잡히지 않습니다. ㅠㅠ나름대로 클린 코드나 리팩토링같이 근본(?)이라 하는 책들도 읽어 봤지만 읽을 땐 그렇구나 하면서 술술 읽다가도 실제 코드에 적용하려 하면 잘 와닿지 않는 것도 사실입니다.코드 설계나 좋은 구조를 짜는 능력은 어떻게 쌓는것이 좋을까요? 혹시 도움받으신 강의나 책이 있는지 궁금합니다.강의 내용과 직접적인 관련이 있는 질문은 아니지만… 궁금증이 생겨 남겨봅니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session의 RegisterSend 의 wsaBufs 관련해서 질문드립니다
Vector<WSABUF> wsaBufs; wsaBufs.reserve(_sendEvent.sendBuffers.size()); for (SendBufferRef sendBuffer : _sendEvent.sendBuffers) { WSABUF wsaBuf; wsaBuf.buf = reinterpret_cast<char*>(sendBuffer->Buffer()); wsaBuf.len = static_cast<LONG>(sendBuffer->WriteSize()); wsaBufs.push_back(wsaBuf); }강의의 코드는 위와 같이 작성되어 있습니다.이렇게 할 경우 wsaBufs.push_back(wsaBuf) 가 복사 연산으로 수행되는 건가요?만약 그렇다면 복사 연산을 거치지 않고 바로 객체를 벡터에 넣을 수 있는 방법은 없을까요?