묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
템플릿 문법적인 질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 위와 같은 내용에서 typename 이 TypeAt 앞에 선언된 이유가 무엇인지 알 수 있을까요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
무상태성에 대해 질문드립니다.
안녕하세요 영한님 강의 잘 듣고있습니다 ! 다름이 아니라 '무상태'에 대해 헷갈리는 부분이 있는데요, 결국 상태를 저장할지 말지 결정하는 주체는 서버라고 이해가 되는데 그럼 HTTP를 사용해서 통신을 하는 경우, 서버측에서는 '아 이건 HTTP 규약을 따르는거니까 아무것도 저장하지 않아야지' 라고 판단하는건가요 ? 즉, '무상태 프토토콜'이라는게 상태를 저장하지 않는 것을 '지향하는' 규약이기 때문에 이미 약속이 되어있어서 서버측에서도 저장을 하지 않는건가요 ? 그리고, 만약 세션을 사용해서 서버측에 클라이언트 상태를 저장하거나 하는 경우 HTTP의 stateless한 특성이 사라지게 되는건가요 ??
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
함수 포인터 질문드립니다!
1) using FuncType = Ret(*)(Args...);일 때, 매개변수로 FuncType func를 주는 것과 Ret(*func)(Args...)를 주는 것은 완전히 동일하다고 봐도 되나요? 찾아본다고 찾아봤는데 익명 함수 포인터라는 단어는 없고, 기본적으로 함수이름을 붙여서 사용하는 것만 설명이 되있어서 백퍼센트 확신을 하기가 힘드네요 2) using FuncType = Ret(*)(Args...) 와 using FuncType = std::function<Ret(Args...)>가 의미상으로는 완전히 동일하다고 봐도 되나요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
캐시 삭제 관련 질문입니다.
만료시간이 지난 후에도 캐시를 제가 직접 삭제하지 않는 이상 삭제 안되나요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
복습중에 질문이 생겨 글을 쓰게 되었습니다.
HTTP는 비연결지향 프로토콜이고 TCP는 연결지향 프로토콜이며 IP는 비연결지향 프로토콜인데...그럼 어떻게 동작이 되는 것인지 궁금증이 생겨 질문을 남기게 되었습니다. (네트워크 전송방식에 대한 이해가 얕아 위와같은 궁금증이 생긴것 같습니다. 혹시, 네트워크 전송방식 혹은 웹 애플리케이션의 작동 흐름에 대해 디테일하게 알 수 있는 도서를 추천해주시면 정말 감사하겠습니다!!) 항상 좋은 강의 감사합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Iocp 함수 관련 질문 드립니다!
WSAGetOverlappedResult 함수의 4번째 매개변수인 fWaitAll 불리언값의 경우 기본적으로 false를 사용하지만, 하나만 깨우거나 전부 깨우거나 개별 설정을 할 수 있는데요. 복습하다 보니까 GetQueuedCompletionStatus의 경우 iocp핸들, recvLen포인터 같은것, 컴플리션키 포인터, overlapped포인터, 시간 을 매개변수로 받는데 여기는 fWaitAll을 설정하는 부분이 없더라구요. 궁금한 점은 GetQueuedCompletionStatus는 내부적으로 fWaitAll을 false로 가지고 처리되는 함수인가요? 검색해서 찾아보니 GetQueuedCompletionStatus 역시 IO Completion Queue에 처리결과가 삽입되는 순간 깨어나는 시스템이고 이게 Alertable Wait와는 조금 다른 매커니즘이라는 것 까지는 알겠는데 자세하게는 잘 모르겠어서 디폴트로 false인 fWaitAll 플래그를 가지고 처리되는건지 아닌지를 잘 모르겠습니다..ㅠ
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
DNS 관련 질문입니다.
nslookup 같은 툴을 이용해서 google.com을 조회하면 172.217.175.78 IP를 확인할 수 있는데요. 이 주소를 443 포트와 결합하여 브라우저에서 접근하면 에러 메시지가 나타나서 80번 포트와 결합하여 접근해야 하는데 이동하는 페이지는 HTTPS로 보호가 되어있는 것으로 확인됩니다. 이 경우에는 HTTPS 연결을 하되 포트만 80번 포트를 사용하는 것인지 아니면 80번 포트로 접근하면 리다이렉트를 통해 다른 IP주소의 443 포트로 연결해주는 것인지 궁금합니다~ 그리고 리다이렉트 시나리오가 맞다면 이런식으로 리다이렉트를 시켰을 때 이점이 무엇인지도 궁금합니다~
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
내용이 생각보다 되게 어렵네요. 학습 방법에 대한 질문을 드립니다
처음에 해당 강의를 전부 이해하고 넘어가는 것이 좋을까요 아니면 아 이런게 있나보다 하고 일단 끝까지 간 다음에 큰 틀을 대강 이해하고 여러 번 반복해서 숙달하는게 나을까요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
검색 엔진에서 변경 인지 관련
안녕하세요 김영한 팀장님! 검색 엔진 등에서 변경을 인지한다는 의미가 와닿지 않아서 문의드립니다. 예시처럼 영구 변경된 URL이 있을 경우 사용자가 이전 URL로 요청하게 되면, 최초 1회 영구 리다이렉션으로 새로운 Location 응답 -> 브라우저에서 자동으로 리다이렉트해서 변경된 URL로 요청을 진행한다고 이해했습니다. 1) 이후에도 사용자는 URL 변경됨을 인지하지 못하므로 (자동 리다이렉트로 인해) 기존 URL로 계속 요청을 하게 될 텐데 이를 브라우저에서 새로운 경로를 쿠키등의 형태로 가지고 있어, 서버의 리다이렉션 없이 새로운 경로로 Request를 보낸다는 의미인가요? 2) 1)이 맞다면, 정확히는 '검색 엔진'이 아닌, 브라우저에서 변경을 인지하는게 아닐까요? 검색 엔진은 네이버 / 구글같은 검색 웹사이트를 의미하는 것으로만 알고 있는데, 웹사이트 자체가 이러한 기능을 가진다는 것과, 강의 내용과 연관성에 대해 조금 의문이 들어서 문의드렸습니다. 얕은 지식을 가지고 있어 너무 기본적인 질문을 드리는 거 같네요 ㅠㅠ 양해 부탁 드립니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓에 바로 메세지를 보내는게 아니라 버퍼를 만들어서 넣어주고 주고받는 이유가 있나요?
수신과 송신 버퍼를 둘 다 가지고 있고 거기에 일단 메시지를 넣어서 보내거나 버퍼를 통해서 받고 있는데 버퍼를 사용하는 이유가 소켓이 바로 메세지를 받지 못하고 대기하는 경우나 병목이 있을 경우를 대비해서 그런건가요?
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]
nginx 버전 문제에 관해 질문드립니다.
안녕하세요 도커강의 듣고 있는 학생입니다. 현재 웹서버 이해와 도커로 웹서버 구축하기의 nginx 웹서버 설정 이해 1 을 듣고있는데요, 3분 38초쯤 나오는 nginx 설치하는 부분에 있어서 질문이 있습니다. apt-get install nginx=1.18.0-0ubuntu1 명령어로 nginx를 install 하는데, 다음과 같은 에러가 나옵니다. E: Version '1.18.0-0ubuntu1' for 'nginx' was not found 다음과 같은 에러가 나옵니다. 위 버전 말고 다른 버전을 설치해야할까요? 추가: 방금 명령어를 버전 빼고 입력했는데, 해당 버전의 nginx가 설치되었습니다. apt-get install nginx로 1.18.0 버전 설치된걸 확인했는데, 뒤에 버전명 입력하면 위 에러가 뜨는 이유가 궁금합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
헤더의 변화?에 대한 질문
안녕하세요 선생님 강의 항상 잘 듣고 있습니다! 헤더가 결과적으로 어떻게 변경된건지 모호한 부분이 있어서 질문드립니다. 강의안에 따르면, 1. 예전 헤더 정의 2. 폐기? 3. 새 헤더 정의 이전 4가지 분류가 아예 사라진 건가요 도메인만 표현으로 바뀐건가요? 즉 현재 헤더는 1. general 2. request 3. reponse 4. representation 인건가요 아님 representation 하나인건가요? 아니면 헤더==표현헤더이고 표현헤더 = 표현 메타데이터+페이로드 메타데이터 인건가요? 궁금해서 헤더를 살펴보니 다음과 같았습니다. 오히려 representation만 없더라구요 ㅠㅠ query string parameters가 전달하려는 데이터, 즉 representation인건가요?
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
stateless, stateful의 장단점이 납득이 안됩니다..
안녕하세요 선생님! 이해가 안되는 부분이 있어서 질문 남깁니다! stateless의 장점을 언급하실 때, "상태를 유지하지 않으면 서버가 바뀌어도 된다. 그렇기 때문에 서버가 확장될 수 있다." 라고 이해했습니다. 반대로 stateful의 단점을 언급하실 때, "상태를 유지하면 서버가 바뀌면 안된다. 그렇기 때문에 서버가 확장될 수 없다"라고 하셨는데 이 부분이 이해가 안됩니다. 1. 서버가 바뀌면 안되는 것과 서버가 확장될 수 없는 것이 무슨 상관인지 모르겠습니다..ㅠㅠ 기존 요청은 기존 서버와 연결을 유지하고, 새로 추가된 요청들은 새로운 서버와 연결해주는 방식으로 서버를 확장할 순 없나요?? 2. 대부분 서비스는 세션 등으로 로그인 유지를 하고 있지 않나요? 그럼 대부분 서비스는 서버가 확장될 수 없나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라이언트에서 보낸 데이터가 다 도착하지 않았을 때...? 처리하는 부분이 있는건가요?
클라이언트에서 보낸 데이터가 다 도착하지 않았을 때 다음 데이터가 올 때까지 기다린 후 처리한다고 말씀하셨는데, 이 부분이 코드 어디에 구현되어있는건가요...? 위에 있는 코드를 나름대로 해석해보니 1. OnWrite()는 _recvArgs.Buffer에 들어있는 데이터만큼 _recvBuffer의 _writePos를 증가시킨다. 2. OnRecv()한 데이터(_recvArgs.Buffer에 들어있는 데이터)의 크기를 processLen에 담는다. 3. processLen의 크기만큼 _readPos를 증가시킨다. 라고 이해했는데, 클라이언트에서 보낸 데이터가 완전한지 불완전한지 딱히 판단하는 부분은 없어보이고 그냥, [1.데이터가 들어온만큼 _writePos를 증가시킨다 2. 처리한다 3. 처리한만큼 _readPos를 증가시킨다]를 실행시킨거같아서요!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
에러가 발생합니다..
dummyClient측에서 sendAsync를 하려고 할 때.. 에러가 발생합니다. 에러 내용 Unhandled exception. System.ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net.Sockets.Socket'. at System.Net.Sockets.Socket.SendAsync(SocketAsyncEventArgs e, CancellationToken cancellationToken) at System.Net.Sockets.Socket.SendAsync(SocketAsyncEventArgs e) at ServerCore.Session.RegisterSend() in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/ServerCore/Session.cs:line 71 at ServerCore.Session.Send(ArraySegment`1 sendBuff) in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/ServerCore/Session.cs:line 57 at DummyClient.GameSession.OnConnected(EndPoint endPoint) in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/DummyClient/Program.cs:line 20 at ServerCore.Connector.OnConnectCompleted(Object sender, SocketAsyncEventArgs args) in /Users/mini/Desktop/projects/Game/MMO_Server_Tutorial/ServerCore/Connector.cs:line 42 그리고 찍히는 로그가.. 좀 이상한 것 같은데요.. [From Server]: 메시지 OnDisconnected: [fe80::1%1]:7777 OnConnected: [fe80::1%1]:7777 이러고 나서 바로 위 에러가 나버립니다. 도저히 원인을 찾을 수 없을 것 같아서 질문 남겨드립니다..
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Host가 Port같은 느낌인건가요?
앞의 강의에서 Port를 설명해주실때, Ip가 아파트라면 Port는 상세주소라고 설명해주셨습니다. 이번 강의를 들으면서 Host도 여러개의 어플리케이션중에 어떤 어플리케이션으로 보낼지 정해주는 의미로 이해를 하였습니다. 그렇다면, Port와 Host는 비슷한 개념인건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
서버 로그 출력
서버와 클라를 실행했을 때 500명 모두가 OnConnected가 뜨지 않고 약 200 ~ 300 사이에서 서버 로그출력이 멈춥니다. (어쩌다가 한번씩은 500까지 찍힙니다.) 왜 그런것인가요? 어떻게 해결해야하나요? 리스너의 백로그를 늘려도 마찬가지네요...
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
URL Scheme에서 Port를 생략할 수 있는건 http 규약덕분인가요?
안녕하세요 영한님 URL Scheme에서 http, https를 사용할때 우리가 뒤에서 Port 명을 따로 기입하지 않아도 되는 이유가 http, https 등 scheme에 port는 몇번으로 하라는 표준화가 이미 되어있어서 그런것인지 아니면 Client Browser에서 사용하는 프로토콜에 따라 port를 자동으로 잡아주는 기능이 있어서 그런것인지 여쭤봐도 될까요? 그리고 Query String의 경우 &로 추가한다고 하면 흔히 우리가 논리연산자에서 이야기하는 AND 연산자를 연상하기 쉬운데, Query String에서 OR을 사용하는 경우도 있을까요? 처음 들었을때는 구성이 그렇구나 이해하면서 들었는데 두번 들으니까 의문점이 생기기 시작하네요 항상 감사합니다 :)
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
DNS 서버 관련 질문입니다
안녕하세요 영한님! 다름이 아니라 DNS 서버 관련해서 강좌를 듣다가 궁금한 부분이 있어 질문 남깁니다 DNS의 IP가 교체되었을 경우는 밑의 다른 분 질문에서 도움을 얻었는데 아직 의문이 가시지 않는 부분이 있어서요...! DNS 제공자가 많은걸로 알고있습니다. Google, 1.1.1.1, IBM, KT, SKB... etc) 컴퓨터상에는 기본 DNS와 보조 DNS 두가지만 기본적으로 입력하게 되어있는것으로 알고있어서... 질문드립니다! 모든 회사의 DNS에 세상에 현존하는 모든 IP의 도메인 네임이 저장되어 있을 것 같지는 않은데요, 만약에 시스템상에 등록된 Domain Name Server에 찾고자하는 Domain Name에 해당하는 IP가 없을 경우 DNS는 이를 어떻게 처리하는지 궁금합니다!
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
안녕하세요 질문입니다 :)
안녕하세요 영한님 항상 양질의 강좌 촬영해주셔서 감사합니다 :) HTTP를 다시 복습하고 있는데 질문이 있습니다 :) PORT의 경우 앞에서 같은 IP에서 프로세스를 구분하는 역할을 한다 즉, 클라이언트 내에 돌아가는 많은 애플리케이션들은 각자 PORT를 갖고 있고 이를 통해 구별되게 통신한다라고 이해했는데 뒤에서 FTP - 20, 21포트, TELNET - 23포트 HTTP - 80포트 HTTPS - 443 포트라고 따로 존재한다면 이 포트들은 위의 FTP HTTP 프로토콜을 포함하는 패킷의 처리를 위해 OS나 시스템상에 존재하는 애플리케이션의 고정 PORT라고 이해하면 될까요? 감사합니다 :D