묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
char8_t 관련 protobuf 질문
google Protobuf에서 한글을 보낼때는 utf8 형식으로 보내야하는 걸로 알고 있습니다. 그래서 u8을 앞에 붙여서 set_name()에 인자를 넣은거구요. 근데 C++언어 표준을 latest 로 해놓고 하면 google protobuf 쪽에서 char8_t 를 지원을 안해주어 컴파일에서 걸렸습니다..C++ latest 로 지정하고 u8을 하면 문자열이 const char8_t 로 변환되더라구요. 이전 C++ 17 이전으로는 u8을 해도 const char로 변환되었습니다. 그래서 기존에는 컴파일타임에 걸리지 않고 실행이 된것 같습니다.그래서이렇게 u8을 쓰지 않고 converter 를 통해 utf8 로 변환 후 패킷을 보냈습니다.이렇게 하니까 한글이 정상 출력이 되는 걸 확인했습니다..이런 방식도 나쁘지 않은 방식인가요...?제가 의심을 하는 이유는 codecvt_utf이 deprecated 된 것인데 경고를 무시하는 코드를 넣고 실행을 돌리기 때문입니다.C++ latest 에서 사용하기 위해서는 제가 생각한 최선의 방법이었습니다.좋은 방법이 있을까요
-
해결됨[2025 리뉴얼] 스스로 구축하는 AWS 클라우드 인프라 - 기본편
스스로 구축하는 AWS 네트워크 입문?
안녕하세요. 강사님..학습과 별개의 질문이긴 한데.. 어디다 문의해야 될지 몰라 여기에 문의 드립니다."스스로 구축하는 AWS 클라우드 인프라-기본편" 을 구입하여 기본을 익히는데 많은 도움을 받았으며, 인프라 기본편 구매 당시에 "스스로 구축하는 AWS 네트워크" 강의도 있었는데 어느 순간 없어졌더라구요..해당 강의가 어떤 구성인지 궁금하기도 하고 인프라 기본편이 너무 만족스러워서 강사님의 네트워크 강의를 통해 좀 더 학습하고자 하는데 혹시 다시 강의를 게시할 계획이 있으신가요?아니면 다른 대체할 추천해주실 만한 강의가 있는지 여쭤봐도 될런지요?감사합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
World Update Packet 처리
안녕하세요 강의 잘 보고 있습니다!!다름이 아니라 IOCP를 이용하여 언리얼 클라이언트와 연동을 하고 있는데 패킷을 보내는데 의문이 들어서 이렇게 질문을 남깁니다. 클라이언트 코드에서는 타이머를 이용하여 초당 60개의 패킷을 서버로 전송합니다.(서버에 접속이 성공적인 경우에 한해서) 그후 서버에서는 작업자스레드에서 모든 입출력을 처리를 하게 되는데, 만약 클라이언트 수가 많아지면 그만큼 서버에서 모든 클라이언트의 초당 패킷을 처리하게 되므로 과부하가 심해질 것으로 예상이 됩니다. 이에 따라 PQCS함수를 이용하여 저가 자체적으로 UPDATE이벤트를 넣어주어 처리를 하려고 했는데 생각한것처럼 잘 되지가 않아서요.. 아니면 그냥 서버에서 UPDATE쓰레드를 따로 구분지어서 클라이언트에게 브로드캐스트를 하는것이 방법일까요? 어떤 것이 좋을지 감이 안잡혀서 이렇게 질문남깁니다!!
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강기간 연장
바뻐서 거의 듣지를 못했습니다. 수강기간 연장 부탁드립니다. 꼭 부탁드려요
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 연장 부탁드립니다
완강했는데 한번 더 복습하고 싶습니다! 연장 부탁드립니다!
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
3-way handshaking 시 Segment, MSS 질문
안녕하세요 널널한 개발자님. 우선 질 좋은 강의 제공에 감사인사부터 드립니다. 제목에 작성된 것처럼 2가지 질문이 있어 남깁니다! 질문에 해당하는 강의 제목은 [TCP 연결과정] 입니다. 3-way handshaking 동작을 설명해주시면서 클라이언트, 서버 간에 전달하는 데이터 단위가 Segment이고, 이 Segment 정보에 (데이터가 담긴) 페이로드는 없고 IP, TCP 헤더 정보만 있다고 하셨는데요! 그렇다는 것은 3-way handshaking 동작은 뭔가 클라이언트가 서버쪽으로 데이터를 전달해서 서버에서 로직을 처리하고 응답을 받는 것이 목적이 아닌 단순히 클라이언트가 서버와의 연결이 정상인가를 확인하는 용도이기 때문인 건가요? 그러면 페이로드는 그럼 언제 전달되는 것인지 궁금합니다.TCP 연결 시 랜덤하게 생성한 시퀀스 넘버를 교환하는 것 말고 기타 정책 중 MSS 라는 정보를 전달주신다고 하셨는데요. 그러면서 서버의 MSS가 클라이언트의 MSS 보다 작을 경우, 클라이언트 쪽에서 서버의 MSS에 맞게 축소시켜 전달한다고 하셨는데요! 예를 들어, 클라이언트의 MSS가 1.5KB 이고, 서버의 MSS가 1.4KB 라고 가정해봅니다. 클라이언트 쪽에서 서버의 MSS에 맞게 축소하려고 하는데, 클라이언트가 전달하려는 Segment의 용량이 맥시멈 사이즈인 1.5KB라고 한다면 어쩔 수 없이 용량을 1.4KB로 축소하게 되고, 이 과정에서 데이터 손실?이 발생할 수도 있는 건가요?(질문하다 보니 2번 질문은 3-way handshaking 과정에서 payload 부분이 전달 된다는 가정하에 질문일 수 있겠네요)질문이 다소 이해가 가지 않으시면 말씀 주세요 감사합니다~
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강신청 연장 부탁드립니다.
수강신청 연장 부탁드립니다.일이 바빠서 조금씩 밖에 듣지 못하고 있네요...
-
해결됨20년 경력자의 알기쉬운 컴퓨터네트워크
VLAN 내 디폴트 게이트웨이 IP 지정 문의
VLAN 내 디폴트 게이트웨이 IP를 해당 VLAN에서 할당 가능한 첫 번째 주소(보통 1)라고 설명해주셨는데요.예를 들어 VLAN 10번의 디폴트 게이트웨이 IP를 200.200.200.1로 지정한다면, 이때 200.200.200.1이 가리키는 물리적 대상은 없고 이것도 가상의(?) 인터페이스인 건가요?디폴트 게이트웨이가 의미하는 것이 라우터이고, 라우터가 하나라면, IP 주소도 동일한 1개여야 할 것 같은데VLAN마다 IP 주소가 어떤 똑같은 1개로 지정되는 게 아니라, 그 VLAN 내에서 각기 다르게 (X.X.X.1)로 지정되는 게 이해가 안 되어서요. 200.200.200.1이 가리키는 대상이 무엇인가요? 답변 주시면 감사하겠습니다.
-
해결됨20년 경력자의 알기쉬운 컴퓨터네트워크
스위치 CLI에서 en 모드에서 vlan database가 되지 않습니다.
VLAN 강의 후반 실습 중, 패킷 트레이서에서 스위치 CLI에서 en 모드로 전환 후 #vlan database 입력하면 아래와 같이 오류가 뜹니다. 해결 방법이 있을까요? 감사합니다.
-
해결됨20년 경력자의 알기쉬운 컴퓨터네트워크
Layer 2 네트워크 개요 및 특성 강의에서 스위치 맥 주소 학습 관련 문의
강의 중 패킷트레이서 실습 내용에서, 각 장치에 ip를 할당하고 나서야 스위치 맥 테이블에 정보가 노출되는 것을 볼 수 있었는데요.스위치는 MAC 주소를 기반으로 프레임을 전달하기 때문에 IP 주소 할당 여부와 관계없이 연결된 장치의 MAC 주소를 학습할 수 있어야 하는 것이 아닌가요?! ip를 할당하기 전에는 왜 맥 테이블이 비어있었던 건지 궁금합니다.
-
미해결CloudNet@ - Amazon EKS 기본 강의
karpenter 동작이 이상합니다..(안됩니다)
순서대로 따라했으나, karpenter가 제대로 동작하지 않습니다.프로비저너 스펙으로 spot이나, 직접 인스턴스 유형을 지정한 경우나 둘 다 p4d.24xlarge 라는 말도 안되는 인스턴스를 요청하거나 계속 waiting on cluster sync 라는 문구가 나옵니다.왜 이런 오류가 나는건지 알 수 가 없네요 ㅠ ㅜ완전히 싹다 밀고 처음부터 하나하나 다시 천천히 입력해봐도 여전히 똑같습니다..
-
미해결그림으로 쉽게 배우는 네트워크
제가 이해한게 맞나 궁금합니다.(Window 관련해서)
Window에 data가 있고 크기도 있는데 이게 데이터를 네트워크를 통한 실질적인 전송을 위해 적절한 크기로 분할한 조각 들일까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문 있습니다
영상에서 7분즘에 이런 말씀을 하셨는데요."커넥터를 딱 하나만 하는 경우도 있겠지만 경우에 따라서는 우리가 리스너에서 계속 뺑뺑이를 돌면서 천명이건 만명이건 계속 받을 수 있는 것처럼 커넥터도 한 번만 받고 끝내는게 아니라 여러 병을 받을 수 있으니까 굳이 이런 식으로 소켓으로 받기 보다는 이런 식으로 이벤트를 통해서 인자를 넘겨주고 있는 것이다."하지만 그 리스너에서는 Socket을 필드로 들고 있도록 하셨었잖아요? Socket을 필드로 들고 있는 것과 SocketAsyncEventArgs의 Token으로 socket을 넘겨주는건 결국 똑같이 작동하는 건가요?connector에서는 Socket을 필드로 두지 않고 args의 token으로 socket을 건네주신 이유를 이해하지 못하겠습니다.아니면 그냥 똑같이 동작하는데 이런 방법도 있다고 알려주기 위함이셨나요?
-
미해결CloudNet@ - Amazon EKS 기본 강의
안녕하세요
질문 드립니다. 현재 4장에서 프로메테우스 스택 인스톨까지 진행하고나서예전 질문에 답변주셨던 1장의 마리오 게임을 배포했던 부분과4장의 Nginx 웹서버 배포를 복습하고 있습니다.원클릭 -> 프로메테우스 스택 -> mario apply, nginx apply 마리오는 Service로/ nginx는 인그레스로 apply 하는데요 NLB와 ALB로 외부 노출해야하는 조건이나 이유가 있는건가요 앱에 따른 차이일까요? 프로메테우스 스택을 보면 하나의 ALB로 묶기 위한 그룹이 명시되어있는데 그룹으로 묶어서 ALB로 열어주는 kind: IngressClass 은 보이지 않습니다, helm install시 알아서 설치되는 건가요?노드 익스포터가 포드로 배포되었기 때문에 노드에 존재하는 모든 앱의 메트릭 값을 자동으로 수집할 것이라고 생각했는데, nginx 파라미터 파일을 보면 metrics.enabled : true 소스가 있습니다. 각 앱을 apply 할때 metrics.enabled : true 값을 명시하는 것이 필수인 건가요?metrics.enabled : true값이 필수라면 마리오 게임을 배포할 때 metrics.enabled : true 값이 없었으므로 메트릭 값이 수집 되지 않는 건가요? 추가해야 할까요?4장의 nginx 파라미터 파일에 spec 소스를 추가 작성하면 도커허브의 html파일을 가져와서 배포할 수 있을까요?nginx배포시 레플리카 부분이 명시되어 있지 않아 1개의 포드만 생성될 것이라 예상했고, kubeops를 확인하니 실제로 1개만 배포되었습니다. 하지만 kubectl get pods 명령어 확인하니 nginx 2/2 ready 상태입니다.부하발생 실습 부분에서 레플리카를 늘려서도 시험해 보고 싶어서 helm upgrade nginx bitnami/nginx --version 14.1.0 -f nginx-values.yaml --set replicas=2 명령어를 사용했는데요, 업그레이드 됐다는 메시지는 출력 되는데 포드의 변화가 없습니다 어떻게 하면 될까요? NGINX 모니터링 대시보드 : 12708 사용,while true; do curl -s https://nginx.$MyDomain -I | head -n 1; date; sleep 1; done명령어 입력 후 3분 뒤 초록색 GO 사라지고 빨간색 NO DATA 출력, 모든 그래프 사라짐 -> Home Dashboards Kubernetes / Compute Resources / Namespace (Pods)에서 모니터링 네임스페이스 확인해보니 메모리 사용부분 1400% 찍혀있는데 서버 다운된건가요? 인스턴스 스케일업 해야하는건가요? t3미디엄입니다. - 만약 맞다면 추후 HPA나 CA를 통해 해결이 가능할까요?앱 배포시 프로메테우스 target에 nginx 잡히는 것은 확인했습니다. 실제로 부하를 줄 시 프로메테우스에서 부터 수집되는 메트릭 값을 확인해 보고 싶고 -> 그 값이 실제로 그라파나에 동일한 값이 출력되는지 확인해보고 싶습니다. 하지만 현재 프로메테우스에서는 어떻게 확인하는지 모르겠고, 그라파나에서는 No Data로 오류발생입니다
-
미해결자동차 SW - UDS 진단통신 정복하기
DTC이나 스냅샷은 비휘발성 메모리에 저장하나요?
DTC, 스냅샷의 메모리와 각종 데이터 저장에 관련된 고민글을 작성하신걸 블로그에서 보았는데, 혹시 지금은 정답을 찾으셧는지 궁금합니다. 아니면 이 또한 제조사마다 다른것인지 궁금합니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Variadic 함수 인자 포워딩 관련
수업의 JobSerialize::PushJob() 함수에서, template<typename T, typename Ret, typename.. Args>void PushJob(Ret(T::*memFunc)(Args...), Args... args){.... std::forward<Args>(args...)} 이 부분에서PushJob() 인자 중 Args&&... 가 아닌 Args... 로 &&을 생략해도 포워딩이 정상적으로 진행이 되는 건지 궁금합니다. 구글링을 해 보니 전부 Args&&... 형태로 쓰는 것으로 보여서요. 가변 템플릿 문법은 언제나 굉장히 헷갈리네요.
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
한번만더연장부탁드립니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. ans saa 두개 다 연장 가능할까요ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
GameRoom.Flush() 수행 중에 _sessions가 변경 되면, 컬렉션 변경 에러가 나옵니다.
// GameRoom.cs public void Flush() { foreach (ClientSession s in _sessions) s.Send(_pendingList); _pendingList.Clear(); }foreach를 돌며 s.Send()를 하는 와중에_sessions가 변경되면,(_sessions.Add 되거나 _sessions.Remove 되면)아래와 같이 컬렉션 변경 에러가 나옵니다. 이를 해결하려고 아래와 같이 _sessions를_sessionsCopy에 복사하여 foreach 돌렸습니다.// GameRoom.cs public void Flush() { List<ClientSession> _sessionsCopy = _sessions.ToList(); // 복사 foreach (ClientSession s in _sessionsCopy) s.Send(_pendingList); _pendingList.Clear(); _sessionsCopy = null; } 더 좋은 방법이 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
명시적으로 함수를 호출하지 않으면 무조건 스레드 세이프할까요?
안녕하세요? 강의 재밌게 보고 있습니다.아래 인프런 질문을 보면Q. Receive()는 lock을 사용하지 않는 이유?A. 명시적으로 Recv()처럼 호출하지 않기 때문에 1번에 1개의 스레드만 접근하여 스레드 세이프함이라는 질문을 보았는데요, 이 답변을 조금 확대 해석해 봤는데Q. 명시적으로 함수()를 하지 않으면 무조건 스레드세이프할까요? 답변 미리 감사합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ClientSession의 Room이 null인 경우
안녕하세요.Part 4를 완강하고 Part 7으로 넘어가기 위해새로운 솔루션을 생성해서 기존 Part 4 솔루션 내의프로젝트들을 우선 Ctrl + C, V 한 뒤 기존 프로젝트 추가로Part 7에서 사용할 서버 솔루션을 Part 4와 동일하게 맞추는 작업을 하고 있었습니다!그런데, DummyClient의 연결 수를 20개 정도로 하면 문제가 없지만, 30개부터는 특정 ClientSession의 Room이 null인 상태에서 서버 측의 C_MoveHandler가 실행되어 서버가 뻗어버리는 경우가 간헐적으로 발생하고 있습니다.(강의 보면서 따라 한 솔루션은 100이면 100 잘 되며, 새롭게 복사한 솔루션은 대부분 잘 되지만 가끔식 위 오류가 발생합니다..) 처음엔 단순히 Ctrl+C , V 하는 과정에서프로젝트나 솔루션의 설정값들이 새로운 경로로 옮기면서 동기화가 안되어 생기는 문제인 줄 알았는데,코드를 계속 천천히 읽다보니 의문이 들게 되었습니다. public GameRoom? Room { get; set; }public override void OnConnected(EndPoint? endPoint) {Console.WriteLine($"OnConnected: {endPoint}");Program.Room.Push(() => Program.Room.Enter(this));}제가 이해한 바로는ClientSession의 Room은Listener에 의해서 ClientSession.OnConnected가 호출되며 Program.Room에게 Enter(this)를 요청하고,이후 Program.Room은 Flush()를 통해 특정할 수 없는 시점에 비로소 Enter를 호출하게 되며, ClientSession.Room이 자기 자신을 가리키도록 합니다. 그런데, 정말 운이 안 좋다면 Program.Room이 A번 ClientSession에 대한 Enter 작업이 미처 다 수행되기 전에DummyClient 측의 SendForEach로 인해 A번 ClientSession과 대응되는 ServerSession으로 이동 패킷을 보내고,최종적으로 A번 ClientSession의 Room이 null인 상태에서 C_MoveHandler를 실행 할 여지가 있는 것이 아닌가 생각하게 되었습니다. 혹시 제가 생각하고 있는 것이 맞는건지,아니면 단순하게 솔루션을 잘못 복사해와서 문제가 생긴건지궁금합니다..만약 그런 여지가 있다면 단순히 room이 아직 null인지 체크하고 이동 패킷을 무시하면 되는걸까요?