묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
여러 GW를 거칠 때 MAC주소 변경
안녕하세요. 강의 잘 듣고 있습니다.예시처럼 호스트에서 naver까지 여러 GW를 거쳐간다고 할 때, 첫 번째 GW에 도착하면 decapsulation을 하여 목적지(3.3.3.3)를 확인하고 이를 알고있는 다른 GW를 찾아 MAC 주소를 변경 후 다시 encapsulation 한다고 다른 분의 질문에서 봤는데요. 여기서 GW가 어떻게 최종 목적지 IP주소를 가지고 다음 목적지인 GW의 MAC 주소를 얻는 건가요? 처음 호스트에서 출발할 때는 DHCP 서버가 GW 주소를 알려줘 ARP 리퀘스트를 보내 GW MAC주소를 얻는다고 하지만, 다음 GW 주소는 어떻게 알고 있는건가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라연동 질문드립니다.
안녕하세요 루키스님 강의를 따라하면서 클라를 콘솔이 아니라 winapi를 이용해 연동에 성공했는데요.(싱글톤으로 서버 세션을 만듬)일단 연결이 된걸 확인했으나 클라에서 창을 닫고 나가면 deque헤더에서 액세스위반 크래쉬가 나더라구요.그래서 디버깅을 열심히 해보니 클라가 나갈때 CoreGlobal의 소멸자가 호출되고 그중에 SendBuffer매니저를 지워줄때 문제가 생기더라구요. 그래서 혹시몰라 CoreGlobal 에 delete 하는 부분을 없애봐도 프로그램이 종료 되면SendBufferManager::PushGlobal함수 호출 ->SendBufferManager::Push 함수 호출 되고 나가는 과정에서 Lock이 문제가 발생했습니다..아무리 제가 찾아도 문제를 못찾겠어서 기존에 만들어주신 더미클라이언트에선 콘솔을 닫을때 코어글로벌 소멸자호출을 확인하니까 아예 호출이 안되는걸 확인했고 이 문제를 해결하려고 여러방면으로 시도를 해봤는데 잘 되지않아서 질문드립니다..서버를 열지않은상태에서 클라를 닫을때 크래쉬가 안나는걸 봐선 클라문제는 아닌거같은데 어떻게 해결하는게 좋을까요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
쿠키와 https
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]좋은 강의에 항상 감사드립니다. 쿠키의 한계 중에서, 민감한 정보(예를 들어서 클라이언트의 비밀번호)를 쿠키에 포함하게 될 경우, 네트워크를 감청하는 다른 사용자에게 노출될 수 있다고 배웠습니다. 그런데 혹시 https 메시지를 이용하게 되면, https요청과 응답이 모두, 클라이언트와 서버 둘만이 알아볼 수 있도록 암호화 되서 송수신이 될 텐데, 쿠키에 비밀번호를 노출시켰다고 한들 네트워크를 통한 감청은 예방되지 않나요?
-
해결됨CloudNet@ - Amazon EKS 기본 강의
Prometheus ALB 443 Listener Issue
EKS hands-on with CloudNet@의 "4장 실습 프로메테우스와 그라파나 구성하기" 에서"1.1. 프로메테우스 스택 설치"의 "프로메테우스 스택 설치" 진행 후"crd, servicemonitors, targetgroupbindings 확인"의"kubectl get targetgroupbindings -n monitoring" 명령어 조회 시,(admin@myeks:default) [root@myeks-bastion-EC2 ~]# kubectl get targetgroupbindings -n monitoring No resources found in monitoring namespace AWS Home Page의 EC2 Load balancers에서 Listener 조회 시, 443 Target 확인 되지 않는 현상.상기 Issue의 Solution은 아래와 같습니다. (CloudNet@ Team의 노고에 감사 드립니다.) Prometheus Stack을 배포함과 동시에 ALB는 Listener를 지정 후 Targetgroup 정보를 수신 합니다. 이때, 실습에서 생성한 AWS Certification Manager (略 ACM) 정보를 기반으로 합니다.(AWS Console Home에서 "Certification Manager" 로 검색하여 찾을 수 있습니다.) 만일, 실습 진행 간 배포한 Stack을 삭제 후 재 생성 한 경우, ACM에 대한 기존의 생성 정보를 호출,재차 변수로 반영하는 작업에서 추가로 생성 후 ACM을 변수로 반영하고자 하면,기존의 Issued 된 ACM이 추가 생성에 의한 Pending Validation 상태인 ACM을 기준으로 등록합니다. 또한, 재차 생성된 ACM은 Status가 변경 즉, Issued가 되기까지 일정 시간이 소요 되며,그 전에 Prometheus-stack 배포를 시도 할 경우, ACM 값을 호출하지 못하여 아래와 같이 표시 됩니다. ADDRESS (myeks-ingress-alb-123456789.ap-northeast-2.elb.amazonaws.com) 확인 불가Every 2.0s: kubectl get pod,svc,ingress,pv,pvc -n monitoring NAME CLASS HOSTS ADDRESS PORTS AGE ingress.networking.k8s.io/kube-prometheus-stack-grafana alb grafana.example.net 80 6m57s ingress.networking.k8s.io/kube-prometheus-stack-prometheus alb prometheus.example.net 80 6m57s 따라서 ACM 메뉴에 진입하여 기존의 생성된 ACM을 전부 삭제하고, ACM을 재차 생성하여 변수로 선언,Prometheus-stack을 삭제 후 재 배포시 성공적으로 주소가 할당 되는 것을 확인 할 수 있습니다.재 생성 후 일정 시간 소요 시 Issued를 확인 하고, ACM 선언 및 변수 적용 절차를 재차 수행 합니다.// Prometheus stack & PV with PVC Uninstallation // (admin@myeks:default) [root@myeks-bastion-EC2 ~]# helm uninstall -n monitoring kube-prometheus-stack release "kube-prometheus-stack" uninstalled (admin@myeks:default) [root@myeks-bastion-EC2 ~]# kubectl delete pvc prometheus-kube-prometheus-stack-prometheus-db-prometheus-kube-prometheus-stack-prometheus-0 -n monitoring persistentvolumeclaim "prometheus-kube-prometheus-stack-prometheus-db-prometheus-kube-prometheus-stack-prometheus-0" deleted // ACM Renewing // (admin@myeks:default) [root@myeks-bastion-EC2 ~]# aws acm list-certificates { "CertificateSummaryList": [ { "CertificateArn": "arn:aws:acm:ap-northeast-2:398561966751:certificate/4a83d353-c8f1-4418-a007-3ad49eb5d7fd", "DomainName": "*.example.net", "SubjectAlternativeNameSummaries": [ "*.example.net" ], "HasAdditionalSubjectAlternativeNames": false, "Status": "ISSUED", "Type": "AMAZON_ISSUED", "KeyAlgorithm": "RSA-2048", "KeyUsages": [ "DIGITAL_SIGNATURE", "KEY_ENCIPHERMENT" ], "ExtendedKeyUsages": [ "TLS_WEB_SERVER_AUTHENTICATION", "TLS_WEB_CLIENT_AUTHENTICATION" ], "InUse": false, "RenewalEligibility": "INELIGIBLE", "NotBefore": "2024-05-22T09:00:00+09:00", "NotAfter": "2025-06-21T08:59:59+09:00", "CreatedAt": "2024-05-23T00:10:55.366000+09:00", "IssuedAt": "2024-05-23T00:13:12.752000+09:00" } ] } // ADDRESS VALIDATION // Every 2.0s: kubectl get pod,svc,ingress,pv,pvc -n monitoring NAME CLASS HOSTS ADDRESS PORTS AGE ingress.networking.k8s.io/kube-prometheus-stack-grafana alb grafana.example.net myeks-ingress-al b-123456789.ap-northeast-2.elb.amazonaws.com 80 20m ingress.networking.k8s.io/kube-prometheus-stack-prometheus alb prometheus.example.net myeks-ingress-al b-123456789.ap-northeast-2.elb.amazonaws.com 80 20m
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
POST 응답 데이터 중 Location에 관한 질문입니다.
[질문 내용]강의 중 POST 요청으로 데이터를 저장 후 새 리소스 경로(강의에서는 /members/100)를 응답 데이터의 Location에 담아서 클라이언트에게 보낸다고 말씀해주셨는데, 그럼 응답 데이터를 받은 클라이언트에서는 Location에 담긴 /members/100이라는 경로로 리다이렉트(GET 요청)하는건가요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
단일쓰레드로 어디까지 커버가 될까요?
루키스님 강의 잘 듣고 여러가지 연동을 시도해서 컨텐츠를 만드는 중인데요 지금은 데이터나 오브젝트들이 많지 않아서 별 문제가 없는데 나중에 3d 포폴도 이걸 기반으로 만들고 싶어서 멀티쓰레드를 사용해야할 정도는 어느정도 되야하는지가 궁긍합니다. 그리고 마지막에 aws 에 서버 올리시는 부분을 잠깐 언급해주셨는데 c++서버강의엔 그런부분이 없는것 같아 그부분 강의 예정이 있는지도, 아니면 관련 자료나 공부를 어떻게 해야하는지도 궁급합니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버 OnAcceptCompleted, 클라이언트 OnConnectCompleted 함수의 Start()
Lister 클래스Session session = sessionFactory.Invoke(); session.Start(args.AcceptSocket); // ★ Connector 클래스Session session = _sessionFactory.Invoke(); session.Start(args.ConnectSocket); // ★ 1)args.AcceptSocket args.ConnectSocketStart 함수의 매개변수 둘 다 클라이언트 소켓이 맞나요??
-
미해결5G 네트워크 이해하기
수업자료
안녕하세요 수업자료는 어디서 받나요?? outline에 page별로 안내사항이 되어 있는 것을 봤습니다.이 강의자료는 제공되지 않는건가요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
Static UserManager um을 포인터로 만들어서 리턴 하면 안되는 이유가 궁금합니다.
아래의 코드와 같이 포인터로 변수를 만들어줘서 넘겨주면 AddUser() 함수를 부를때 '_userCount' 올려주는 변수에서 '액세스 위반 this가 nullptr 입니다.' 라고 뜹니다.그 이유가 객체를 생성해 주지 않았기 때문에 'nullptr'이 생성 되는 건가요? 이해가 잘 되지 않는 부분이 static 함수를 부를 때 변수를 초기화 되어 전역 변수로 사용되는데, 포인터는 객체가 생성되지 않는 것 같더라구요.그래서 new UserManager( ) 를 통해 동적 할당을 하니 객체가 하나씩 생기는 문제가 발생하고, static 메모리와 동적 할당 되는 메모리 위치(?), 특성(?)이 달라서 생기는 문제인가 싶습니다.public: UserManager() :_userCount(0) {} static UserManager* GetInstance() { static UserManager* um = new UserManager(); um->_userCount = 0; return um; } 주저리 주저리 궁금한 내용을 적다보니 제대로 설명했는지 모르겠네요... ㅡㅜ 답변해 주신다면 감사하겠습니다. 혹시 몰라 _userCount를 생성자로 초기화 시켜줬습니다.class UserManager { public: UserManager() :_userCount(0) {} static UserManager* GetInstance() { static UserManager* um = nullptr; return um; } public: void AddUser() { _userCount++; } int GetUserCount() { return _userCount; } private: int _userCount = 0; };
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
리소스 파일 경로
강사님 혹시 제 코드와 강사님 코드를 비교하려고 파일을 다운받았는데요 리소스파일 이미지 경로가 틀려서 확인을 못하는데 혹시 어디서 변경할 수 있는지 알 수 있을까요? 오류는 계속 이렇게 뜹니다.
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
TCP 연결 종료과정 TIME_WAIT
TCP 연결 종료과정에서 (4-way handshaking), TIME_WAIT 를 최대한 줄이기 위해서 client가 active 하게 종료를 하자고 하는건 이해를 했습니다. 그러면 server 입장에서는 TIME_WAIT가 없는데 socket 회수를 언제하는지 궁금합니다. client 의 마지막 ack를 받고 바로 socket 회수를 하나요? 그러면 client도 server에게 마지막 ack를 보내면서 바로 socket 회수를 하면될텐데 TIME_WAIT의 존재의의가 궁금합니다.
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
데디케이티드 서버 관련 질문
안녕하세요, 강의 관련 질문은 아니지만 궁금한 점이 생겨 질문 올립니다. 개인 프로젝트로 TPS 생존 게임을 제작하려 합니다. 한 경기에 10명 내외의 클라이언트가 접속할 예정입니다.언리얼 엔진에서 제공하는 리슨 서버와 데디케이티드 서버 중 어떤 방식이 알맞을까요?만약 데디케이티드 서버가 알맞다면 리슨 서버에서 구현했던 if(Hasauthority()) 등의 로직들은 제거해주면 되는 것인가요? 만약 데디케이티드 서버로 구성하면 어디서 클라이언트의 데이터 검증을 하게 되는지 등 리슨 서버와 어떻게 다르게 구성해야 하는지 잘 와닿지가 않습니다. characterplayer.cpp 등에 작성한 코드 자체가 서버 로직임과 동시에 클라이언트 로직인 것인지.. 인터넷에는 데디 서버를 구축하는 방법만 나와 있어서 여쭈어 봅니다. ++) 그리고 게임을 제작할 때 BP와 C++을 혼용해도 상관 없을까요? 강의는 전부 C++로 진행되어서 웬만하면 C++로 제작할 예정이지만, BP를 혼용하여 사용하는 것에 있어서 주의점 등이 있는지 궁금합니다.
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강연장 부탁드립니다..!
안녕하세요. 최근 취뽀하고 다시 AWS를 만질일이 생겨 공부하려고 하는데 수강 기간이 거의 끝나가네요.송구스럽지만 수강 기간 연장을 요청 드립니다.감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
패킷을 만들 때 사용되는 IP, PORT 정보가 궁금합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]웹 브라우저 요청 흐름에 대해 제가 이해한 순서입니다.요청이 들어오면 DNS에서 조회해 IP, PORT를 얻는다.IP, PORT를 바탕으로 HTTP 요청 메시지를 생성한다. TCP/IP 패킷을 생성하여 서버로 전달한다.(전송계층에서 PORT 정보 추가, 인터넷계층에서 IP 정보 추가)이 과정에서 TCP/IP 패킷을 생성할 때의 IP 주소와 PORT 번호는 어디서 가져오는지 의문이 들었는데요, 1번 DNS에서 조회해 얻은 IP, PORT를 각각 전송계층, 인터넷계층에서 헤더 값으로 추가해주는 것인가요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
knight 기본생성자
knight에 기타 생성자를 만들어 주면, 기본 생성자를 사용 할 수 없다고 했는데, 새로운 knight를 만들어 주어 기본 생성자를 이용하니깐 잘 만들어 지더라구요.제가 잘 못 이해 하는걸까요?같은 객체일 경우 기본 생성자가 실행이 안된다는 말씀 일까요?새로운 객체면 상관 없는거구요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
UE MMO 콘텐츠 구현은 언제쯤 출시 예정이실까요?
C# 서버 듣고 돈이 안아까워서C++서버랑 게임도 붙여보고 싶습니다.UE MMO 콘텐츠 구현은 언제쯤 출시 예정이실까요?올해 말까진 출시됐으면 좋겠는뎅
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
데디케이티드 서버 개발 문의
현재는 리슨 서버로 개발하고 있어서 서버 클라 코드가 동시에 들어가지만데디케이티드 서버 개발은 서버 코드만 있으면 되기 때문에 더 편리하다 라고 하셨는데이게 머릿속에 잘 그려 지지가 않습니다 ㅠ 데디케이티드 서버 개발 방식이라는게아예 프로젝트를 분리해서 서버와 클라를 구분해서 개발 하는 것으로 생각 해야 할까요?(예를 들어 캐릭터 액터의 경우를 보면 같은 이름의 ABCharacter.h & cpp 파일이 있지만 안의 내용은 다르게 (어떤건 같은 내용) 되어 있다고 생각해야 할까요?)아니면 프로퍼티 리플리케이션의 경우는 콜백으로 OnRep_ 함수가 클라이언트 측에서만 실행 할 수 있는 걸로 나오는데, 이렇게 되면 애초에 서버 클라가 분리된 형태로 볼 수 있고, 이를 기반으로 프로퍼티를 바꾸는건 서버 코드, OnRep_ 콜백 함수는 클라이언트 코드 로 해서 각 파트가 개발 하는 방식이 데디케이티드 서버 개발 방식일까요?
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
[문자열] 강의 부분에서 StrCpy함수 포인터로 구현 하는 부분 질문 있습니다.
글로 질문은 처음이라 두서 없을 수 있다는 부분 양해 부탁 드립니다. char* StrCpy(char dest, char src) 함수에서 char * ret = dest; 선언을 통해 기존 원본 위치값을 저장해 주는것은 알겠는데,while문이 다 돌고 나서 'dest'의 값을 확인해 보면 문자열이 없는 것을 데이터를 확인 하여 알았습니다.그 이유가 'dest++'을 통해 포인터의 시작 위치 값을 변경해 주어서 값이 없는 주소 부분을 가르키기 때문에 'dest'의 데이터가 아무것도 없는 것이 맞을까요? 그렇기 때문에 원본 데이터에는 정상적으로 들어있고,함수내에서 'dest'의 주소 시작점이 뒤로 밀려나 데이터가 없다고 판단해도 되는지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Queue가 비어있을 때, TryPop 질문입니다.
shared_ptr<T> TryPop() { // [data][data][ ] // [head][tail] CountedNodePtr oldHead = _head.load(); while (true) { // 참조권 획득 (externalCount를 현시점 기준 +1 한 애가 이김) IncreaseExternalCount(_head, oldHead); Node* ptr = oldHead.ptr; if (ptr == _tail.load().ptr) { ptr->ReleaseRef(); return shared_ptr<T>(); } // 소유권 획득 (head = ptr->next) if (_head.compare_exchange_strong(oldHead, ptr->next)) { T* res = ptr->data.load(); // exchange(nullptr); 로 하면 버그 있음! FreeExternalCount(oldHead); return shared_ptr<T>(res); } ptr->ReleaseRef(); } } static void IncreaseExternalCount(atomic<CountedNodePtr>& counter, CountedNodePtr& oldCounter) { while (true) { CountedNodePtr newCounter = oldCounter; newCounter.externalCount++; if (counter.compare_exchange_strong(oldCounter, newCounter)) { oldCounter.externalCount = newCounter.externalCount; break; } } }void ReleaseRef() { NodeCounter oldCounter = count.load(); while (true) { NodeCounter newCounter = oldCounter; newCounter.internalCount--; // 끼어들 수 있음 if (count.compare_exchange_strong(oldCounter, newCounter)) { if (newCounter.internalCount == 0 && newCounter.externalCountRemaining == 0) delete this; break; } } }TryPop을 할 때는 ExternalCount를 증가시키는데head와 tail이 같을 경우에는 internal 카운트를 감소시키고 return 합니다.만약 push가 없고 pop만 반복된다면, ExternalCount는 계속 증가하고internalCount는 계속 감소하는것같은데 맞나요? externalCount 와 internalCount가 일정해야하는게 옳은 결과값 같아서 질문합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
vector 생성시 메모리 참조 오류가 납니다
stomp allocator를 적용한 vector를 생성시에 내부에서 아래와 같이 1바이트를 할당하는데 그이후에 쓰기 액세스 오류가 발생합니다.memory, allocator파일 그대로 받아서 넣어도 동일합니다 ㅠ