월 66,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
제가 RW락을 제대로 이해한 건지 질문드립니다.
write-lock은 락을 건 스레드를 제외한 모든 스레드가 블로킹된다.write-lock 후에 read-lock을 잡는것은 허용된다.그 반대는 불가능하다.read-lock상태에서 값의 변경은 없어야 한다.제가 제대로 이해한 것인지 모르겠네요..ㅎㅎ
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 관련해서 고민이 있습니다.
안녕하세요.현재 게임 서버를 지망하고 있는 대학생 3학년 학생입니다. 아마 내년 여름? 부터 프로카데미라는 학원에 다니게 될 것 같습니다. 현재 반년동안 시간이 남는데, 그 동안 rookiss님의 게임 서버 강의와 그 외의 cs이론지식들을 공부하려고 계획을 하고있습니다만,제가 우려되는 점은, 강의를 통해 기술을 습득하게되어, 답을 알아버리면 개인이 문제를 직면하고 헤딩하는 이러한 과정이 없어지지는 않을까?라는 점입니다. 원장님의 무료 수업을 들었는데, 이러한 부분을 강조하셔서 고민입니다. 그렇다고 반년동안의 시간이 있는데, 아무것도 안하고 있기에는 스스로 불안하고, 그렇다고 아예 독학하기에는 막막하고 이러한 상황입니다..프로카데미에 다녀본 선배님으로써, 학원가기전에 Rookiss님의 c++ 서버 강의를 듣는 것이 도움이 될지, 조언부탁드립니다.작년부터 Rookiss님 강의 정말 잘 듣고있습니다. 작년에 군 복학하고 C++강의부터 듣기 시작했는데 벌써 시간이 빠르게 지나 취업을 고민할 시기가 되어버렸네요. 항상 좋은 양질의 강의를 올려주셔서 감사합니다!
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
packaged_task를 이용한 잡큐
안녕하세요 루키스님잡큐를 공부하면서 궁금사항이 있어서 질문드립니다.https://modoocode.com/285우연히 packaged_task와 future를 이용하여서 쓰레드 풀을 구현하는 글을 보게 되었는데흥미로워서 참고하면서 공부를 하고 있는데이런 방식으로 잡큐를 구현하였을 때 접속자 수가 많은 mmorpg에서는 문제가 되나요??또,멤버함수를 받을때 Ret(T::*memFunc)(Args...)를std::function<Ret(T&, Args...) memFunc 이런식으로 변경하면 오류가 나는데똑같은 함수를 받는 포인터인데 왜 오류가 나는지 궁금합니다!감사합니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
기존 쓰레드 - Oh my god (Select모델 강의)
예전에 작업할 때, 소켓 접속마다 쓰레드 만들어줬었는데그렇게하면 안되는거였군요.구글에 찾아봐도 대부분 소켓마다 쓰레드 만들던데 (물론 국내 사이트)
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
스마트포인터 관련 질문입니다
현업에서는(클라,서버) raw ptr 대신shared_ptr로 많이 쓰는 추세인가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
CreateIoCompletionPort 사용 문의
좋은 강의 감사합니다. 이전 Completion Port 강의와 비교하며 이해하는 과정에서 물음의 생겨 질문드리게 되었습니다. Listener내 StartAccept에서 CP 등록을 하는 부분에서 물음이 있습니다.이전에는 listenSocket을 accept한 결과 값인 clientSocket을 CP에 등록한 반면,현재는 listenSocket 자체가 CP에 등록되는데, 이러한 차이가 발생한 이유를 알수있을까요 ?현재 코드에서 AcceptEx 동작이후 session->GetSocket() 에 대해 CP에 등록을 하지 않은 이유는 무엇인가요 ??[이전 Completion Port 강의]1. listen Socket 생성 , bind(), listen()2. accept() SOCKET clientSocket = ::accept(listenSocket, (SOCKADDR*)&clientAddr, &addrLen);3. 소켓을 CP 등록 ::CreateIoCompletionPort(clientSocket , ~ ~)[현재 강의]1. listen Socket 생성2. listenSocke을 CP 등록 ::CreateIoCompletionPort(listenSocket , ~ ~)3. bind(), listen()4. clientSocket 생성 (session() 생성자)5. AcceptEx(_listenSocket, session->GetSocket() , ~~)
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
WSASend
좋은 강의 감사드립니다.::WSASend(_socket, wsaBufs.data(), static_cast<DWORD>(wsaBufs.size()), OUT &numOfBytes, 0, &_sendEvent, nullptr))전체적인 소스에서 데이터가 일부만 보내진 경우에 대한 처리가 안되어 있는것 같은데요,일부만 보내지는 경우가 거의 희박하여 구현하지 않으신건지, 아니면 구현되어 있으나 제가 잘못 이해하고 있는건지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
JobQueue Push 부분관련해서 질문이 있습니다
Push 부분에서 LCurrentJobQueue가 nullptr이면 Execute를 하고 있는데, else 부분으로 떨어지는 경우가 어떻게 생기는지 이해가 잘 가지않습니다.LCurrentJobQueue는 쓰레드마다 고유하게 가지고있는 큐인데, Execute를 할때는 LCurrentJobQueue가 this가 되면서 nullptr가 아닐 수 있지만 while 반복문이 끝나야만 nullptr가 되고 Push가 실행될 수 있는데, 다른 쓰레드가 접근 불가능한 LCurrentJobQueue가 Push 실행 시 nullptr가 아닐 수 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라에서 서버 전향
안녕하세요 루키스님, 언제나 좋은 강의 감사합니다. 강의와 관련된 질문이 아니라 죄송하지만 따로 여쭤볼만한 곳이 없어 이렇게 질문 드립니다. 저는 4년차 클라이언트 프로그래머입니다. 쥬신 아카데미 출신으로 운 좋게 취업에 성공했지만 어쩌다보니 유니티로 커리어를 시작하게되어 지금까지 유니티 엔진을 사용하는 모바일 게임 프로젝트에서만 일하고 있습니다. 어렸을때부터 주로 온라인게임을 플레이 해왔었고 이직하고 싶은 팀도 MMORPG팀이지만 그런 곳은 주로 언리얼 엔진을 사용하다 보니 이직이 쉽지 않더군요 ㅠㅠ이러다 평생 모바일 수집형 게임만 만드는게 아닌가란 걱정도 들고 지금 있는 회사보다 좀 더 좋은 회사로 가고 싶다는 생각도 있다 보니 어느 순간 서버에 생각이 닿았습니다.남의 떡이 더 커보인다는건 알지만 저희 팀에서도 반년째 서버 개발자가 구인이 되고 있지 않고 있다 보니(나름 규모 있는 회사입니다 ㅠㅠ) 더 그런 생각이 들었던 것 같습니다. 여튼 그렇게 루키스님 강의와 시중에 있는 서버 책을 보며 공부도 하고 서버를 연동해 게임도 만들어 보고 있지만 회사 일과 병행하며 전향을 준비하기에는 조금 벅찬감이 있는것같아 퇴직 후 1년정도 학원(프로카데미)을 다닐까 고민하고 있습니다. 1년이 짧은 시간은 아니다 보니 회사 일을 병행하면서 준비를 계속할지 아니면 학원에 들어갈지 망설여지고 있는데 조언 부탁 드립니다 ㅠㅠ나이는 27살이고 연봉이 높은 편은 아니다 보니 이직 후 신입 연봉을 받게되더라도 크게 아쉬움은 없을 것같습니다..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
책 추천 문의드립니다.
우선 좋은 강의 감사합니다. 강의 초반 Modern C++ Design 책 추천을 주셨는데요, 이 외에 추천 해주실 책이 있으신지 문의 드립니다. (개인적으로 추천해주시는 top5책을 알고싶습니다.) 코드를 짜면서 생소한 패턴를 만날때다마 블로그에 떠도는 글을 보면서 알음 알음 알아가고 있는데요, 혹시 이러한 지식들을 체계적으로 쌓고 싶은데, 해당 책 외에 추천 가능하실까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Recv (TCP) 관련 질문이 있습니다.
2:05초에서 TCP로 보낼경우 한 번에 패킷이 다 오지 않을 수 있다고 했는데요.위에 그림과 같이 1 클라이언트가 16byte 보내고2번 클라이언트가 3바이트 보낸다고 했을 때,1번 클라이언트 16바이트가 다 도착하지 않았는데 2번 클라이언트의 3바이트가 끼어들 수 있나요? 그럼 1번 클라이언트의 패킷이 끝까지 왔는지 판별하기 어려울 것 같은데요. TCP 구조를 잘 몰라서 동시에 패킷을 보냈을 때 순차적으로 접근해서 해결이 되는건지(IO단에서) 아니면 통신 두절이나 통신 오류(물리적 오류)로 인해 지연 현상이 생겨 패킷이 꼬일 수 있는지 궁금합니다. 요약하자면 1번클라이언트 패킷이 전송완료(받기완료)가 되지 않은 상태인데 2번 클라이언트의 패킷이 끼어들 수 있는지 궁금합니다. 이럴때는 처리를 어떻게 해야하나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
전송 순서 관련 질문입니다.
Send 코드를 보던 중 궁금증이 생겼습니다. 컨텐츠 구현시 정확히 Send를 호출한 순서대로 패킷이 가야 하는 경우가 있는가? 입니다. 만약 1번 스레드가 Send 호출 후 connected 확인만 하고 멈추고, 2번 스레드가 이후에 Send를 호출해 lock을 잡을 경우 1->2 순서로 호출했지만 데이터는 2->1 순서로 전송될 것입니다. 이렇게 자세하게 따져야 하는 경우가 있는지, 있다면 send 시작부터 exchage까지 lock을 잡으면 해결되는 문제인지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
sendQueue 관련 질문입니다.
강의를 들으며 1send + sendQueue를 사용하는 경우의 장점은 1.더 많은 클라이언트를 받을 수 있다. 2.TCP 헤더가 적게 붙어 네트워크상 이점이 있다. 이렇게 생각했습니다.하지만 실제로 서버를 만들다 보니 동시 send가 불가능해 대부분의 시간을 lock에 소비했고, n send에 비해 동시접속 가능한 클라이언트 수가 줄어들었습니다.그럼 2번 장점이 확실한가? 궁금해서 wireshark로 확인해 봤을 때 별 차이가 없었습니다. 큐에 넣지 않고 WSAsend를 많이 호출해도 os가 패킷을 뭉쳐 보내는 것 같습니다. 지금 방식의 장점이 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AcceptEvent를 하나만 사용할때 세션관리
안녕하세요 제가 궁금한 게 있어서 질문드립니다.위 사진과 같은 상황이 발생하면 AccetEvent를 하나만 사용하기 때문에 애써 힘들게 구한 세션이 Register 할 때 초기화 돼버리지 않나요 ㅠㅠ? Register를 하기 전에 따로 세션을 저장해야 하는 거 아닌가요? 혹시라도 다음 강의에서 다르는 주제라면 죄송합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Memory Pool#2 삭제 Lockfree stack 과의 값 교환 차이가....?
이전에 Lock free stack 에서는 ABA problem 이 발생하지 않는다고 별도로 들고 있었기 때문이라고 하셨는데 이전에도 링크드 리스트 처럼 포인터를 들고 있던 방식이고 현재 이것도 그것과 유사한 방식인데 왜 이전에는 ABA 가 발생하지 않았다고 하는건지 잘 이해가 가질 않네요 이전 lock free stack 에서 삭제 할때의 로직과 크게 달라보이진 않는것 같은데요..이전 lock free stack 에서도 ABA Problem 이 발생하지 않나요?차이점이 명확하게 어떤 부분인지 모르겠습니다..답변좀 부탁드려요! Memory Pool#2 시간은 26:55 초에서 정도에서..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
스핀락 질문
CAS 의사코드를 설명하시면서 while(_locked){}_locked=true;이 코드를 한번에 실행할 수 있다고 하셨는데 두 스레드가 동시에 if문에 진입한다면 동일한 결과를 가지지 않을까라는 생각에서 의사코드 자체를 SpinLock 클래스 안에 새로운 매서드로 만들어서 실행해보니 0이 출력되지 않았습니다.어떤 원리로 두 코드가 한번에 실행되는지와 cp매서드를 어떻게 수정해서 compare_exchange_strong처럼 동작하게 할 수 있는 지 궁금합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
C++ ORM 질문드립니다
1 .C++은 EntryFramwork같은 라이브러리가 없을까요?실무에서는 ORM은 잘 사용하지 않는다고 하셨는데 혹시 사용을 안하는 이유가 있을까요?
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 수강 후 개인 프로젝트 적용
수강 후, 대학 동아리 수준에서 내용을 제대로 습득했다는 전제 하만든 게임과 서버를 연동할 능력을 갖출 수 있나요?동아리에서 mmorpg를 만들어 보려 하는데 서버를 담당하게 되어 미리 공부하려 합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이해한 내용이 맞는지 궁금합니다
데드락은 서로 락을 걸어버려 상대가 락을 풀때까지 하염없이 기다리는 상태먼저 AccountManager에서 ProcessLogin이 먼저 실행이 되었다고 가정했을 때 lock_guard를 사용하여 ProcessLogin이 끝날 때까지 다른 쓰레드의 AccountManager 접근을 막아버린다. 그와 거의 동시에 UserManager의 ProcessSave도 실행이 되면서 ProcessSave를 실행하는 쓰레드가 다른 쓰레드의 접근을 막아버린다. 이 때 ProcessLogin에서 UserManager::Inst()->GetUser를 실행하면 다른 쓰레드에서 UserManager에서 접근하지 못하도록 락을 걸고 GetUser를 실행해야 하는데 먼저 ProcessSave에서 user lock을 걸었기 때문에 추가적인 락을 하지 못하게 된다.또 GetAccount를 실행할 때도 ProcessLogin에서 먼저 account lock을 걸었기 때문에 GetAccount에서 lock_guard를 하지 못하고 멈춰서 다른 곳에서 account lock을 풀어줄 때까지 하염없이 기다리게 된다. 안녕하세요 강사님이렇게 이해를 했는데 맞는지 궁금합니다!
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
w->r (0) r -> w(x)
23:41초 에서w->r (0)r -> w(x) 라고 설명하셨는데 코드를 보면 write 를 누군가 했다면 write 를 한 스레드가 풀어주기 전까지는 다른스레드에서 read 는 못하는 상태가 되고 누군가 read를 했다면 readcount 라 0 이될때까지 다른 스레드에서 write 를 할 수 없는 상황인것 같은데 정리하자면 read 아니면 write 둘중 하나만 가능한 상태인것 같은데w->r (x)r -> w(x) 이렇게가 맞는거 아닐까요?뭔가 실행 흐름상의 맥락을 잘못 이해하고 있는건지 궁금합니다!