묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
언리얼 네트워크 처리 과정 질문..
강의들은 리슨서버 기준으로 에디터에서 리플리케이트 관련 방법들과 규칙만 알려주고, 에디터 시작/클라이언트 추가로 멀티를 이루는 실습을 진행하는데요. 문제는 패키징 이후 실행파일로 실행했을 때 멀티가 어떻게 이루어지는지 잘 알려주지 않습니다. 개별 컴퓨터에서 실행파일을 틀었을 땐, 전부 개별로 리슨 서버로 시작하는게 맞나요?아니면 처음부터 클라이언트로 실행할 건지 리슨서버로 시작할 건지 정하는 기능이 따로 필요한 건가요? 게임을 실행했을 땐 초기는 누구든 전부 리슨 서버인지, 리슨 서버일 때, 다른 서버에 접속하는 방법이 있어서 접속하면 클라이언트로 바뀌는 것인지. 이런 과정을 잘 모르겠습니다. 리플리케이트, RPC, 커넥션, 넷드라이버 등 기능들은 이해하지만 게임 시작부터 전체적인 네트워크 흐름을 잘 모르겠습니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
캐시 관련 질문입니다.
안녕하세요.강의 매우 잘 듣고 있습니다. 감사합니다. 캐시 부분 수강 중 질문이 있는데요.강의에서 말씀하시는 캐시 무효화 부분은 서버 설정을 말씀하시는 거죠?그렇다면,서버 설정과 html 파일에 아래와 같이 작성하는 메타 태그와의 차이점은 무엇이며 적용되는 우선 순위가 있나요?<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate"> 강의를 듣고 위 메타 태그를 html에 추가해보았는데 여전히 캐시 저장을 합니다. 브라우저에 따라 다른것인지, 서버 설정을 해야하는 것인지 궁금합니다. 감사합니다.
-
해결됨[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 안해도되는) 서버쪽에 마음이 가는데 조언 부탁드립니다 ㅠㅠ
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
ETag 질문입니다.
(1) ETag는 파일의 Content가 똑같으면 똑같은 해쉬 값이 나오고 조금이라도 다르면 다른 해쉬 값이 나온다 고 말씀하셨는데 그럼 ETag는 무조건 해쉬 알고리즘으로 돌아가는 건가요? 아님 이런 형태로 돌아간다는 건가요?(2) ETag는 Content가 똑같냐 다르냐를 비교하는데 수업에서 말씀하신서버에서 별도의 캐시 로직을 관리하고 싶은 경우예) 스페이스나 주석처럼 크게 영향이 없는 변경에서 캐시를 유지하고 싶은 경우이 경우는 해결못하는 거 아닌가요?? 주석이 있냐 없냐는 Content가 다르니까.. 답변 주시면 정말 감사하겠습니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
캐시의 설정 주체
안녕하세요 좋은 강의와 질문답변 항상 감사합니다. 캐시랑 쿠키 -> 서버, 프런트 개발자(브라우저가 개발자 이외 서비스 개발자들) 가 구현하지 않아도 브라우저(크롬 등) 에서 자동으로 설정이 기본적으로 되어 있나요?예를 들어, 브라우저의 캐시 저장소에 캐시를 저장한 클라이언트가, 재요청을 할 때에 먼저 캐시 저장소를 찾잖아요? 이런 로직은 브라우저 소프트웨어(크롬 등) 이 구현해 놓은 건가요? 역시 비슷한 질문으로, 캐시 무효화와 같은 Cache-Control: no-cache 등을 서버에서 내려주면 프런트에서는 브라우저? 또는 프런트 개발자 ? 스토리지에 저장을 하지 않도록 로직을 설정하는 주체가 어딘가요? 감사합니다,
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
영속쿠키 질문입니다.
사용자가 로그아웃을 하면, 브라우저의 쿠키와 서버의 세션이 모두 삭제되고쿠키는 브라우저(클라이언트), 세션은 서버에서 관리하는 정보라고 알고 있습니다.다른분의 답변에서 Spring boot의 경우는 기본적으로 1800s(초)로 세션이 지속된다고 되어있고,따로 특성을 관리하는 파일에서 다르게 설정해주면, 해당 시간을 늘리는 것도 줄이는 것도 가능합니다. 보통 세션의 지속시간은 그 시간이 지나면 바로 삭제되는 것이 아니라, maxIntervalTimout 이라고 해서 세션을 사용하지 않은 시간, 즉 특정 세션값을 마지막으로 사용한 시점으로 부터 어느정도 지나면 지운다는 의미입니다.라고 되어있는데 그러면 B사이트에서 A 사용자의 영속쿠키를 일주일로 설정을 했다고 가정을 하면 A는 로그아웃이나 브라우저를 종료하고 3일동안 B사이트의 안들어오면 쿠키는 남아있고 세션은 지속시간이 끝났으니까 A 사용자의 영속쿠키에 대한 세션 ID를 삭제했다가A가 4일만에 그 사이트에 재방문시 A 사용자의 영속쿠키에 대한 새로운 세션 ID를 발급해주는 건가요?? 답변주시면 정말 감사하겠습니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
협상(accept-language)
안녕하세요 친절한 강의와 질문 답변 항상 감사드립니다. Accept-language : ko-KR 등등(q값) -> 서버에서는 이 우선순위 등을 서버 개발자들이 파싱하나요? 아니면 브라우저에서 자동으로 구현이 되어 있나요? 실수로, 내보낼 때 content-language: ko 인데 내용은 영어로 (휴먼에러) 내보낼 수도 있는 것인가요? 이런 불일치가 있다고 해서 에러가 나거나 그럴 수 있나요?
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
에러 코드의 구현 주체
안녕하세요 좋은 강의 감사합니다.자바/스프링 부트 기준으로 프로젝트를 했을 때, 제가 에러처리를 별도로 해주지도 않았음에도 500 에러(NPE 등등)가 나거나, 성공시 200 성공 코드가 나가는 것은 누가 만드는 것인가요? 웹서버(ex. 내장형 톰캣) 또는 스프링부트(컨테이너) 인가요? 친절한 답변 항상 감사합니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
웹서버가 구현?
안녕하세요 좋은 강의 항상 감사합니다.강의에서 405 에러를 내보내면 Allow 헤더 필드 값에 가능한 메서들 값을 내보내준다고 웹서버에서 구현되어 있다 => 이 말이 궁금합니다.다음과 같은 api(/members -GET, DELETE) 를 자바/스프링부트 로 구현해놨습니다. 그런데 프런트에서 /members - POST로 요청을 하게 되었을 때의 경우가 궁금합니다.웹서버에서 자동으로 405 에러와 함께 Allow 헤더 값에 GET, DELETE 값들을 내보내준다는 것인가요?위의 경우에서 말하는 웹서버는 내장형 톰캣을 말하고, 이렇게 구현되어 있는 다른 내장형 웹서버들도 많나요? 친절한 답변 미리 감사드립니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
필수헤더?
안녕하세요. 좋은 강의 잘 듣고 있습니다.필수헤더에서의 '필수'라는 의미가 무엇인가요?궁금한 점은 아래입니다.자주 사용하는 웹 브라우저 소프트웨어(크롬, 엣지 등) 이 요청할 때 알아서(api통신일 경우 프런트 개발자들이 명시하지 않아도) '무조건' 넣는다는 말인가요?필수가 아니라면 어떻게 되나요? 강의를 보면서 구글에서 f12로 api들을 살펴보니, request 부분의 헤더에 HOST가 없는 것들도 있떠라구요. 친절한 답변 항상 감사드립니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
Host와 Port
안녕하세요 좋은 강의 항상 잘 듣고 있습니다.아래 질문들을 봤는데도 이해가 되지 않아 질문을 올립니다. 2:21 그림에서 aaa.com, bbb.com, ccc.com 은 모두 다 하나의 ip(200.200.200.2)에 연결이 된 거잖아요? 궁금한 점들은 아래입니다.그런데 aaa.com, bbb.com, ccc.com 들은 하나의 host 개념인 것이지, port로 구분하는 프로세스의 개념이 아닌거죠? aaa.com(200.200.200.2:15포트), bbb.com(200.200.200.2:16포트), ccc.com(200.200.200.2:17포트) 처럼 다른거죠? 가상호스트라는 개념을 쓰면 여러 호스트들을 하나의 ip에 연결을 할 수 있고, 각각의 host들은 서로 중복되는 포트를 사용할 수 있는 것인가요? 아래처럼요.aaa.com(200.200.200.2:15포트), bbb.com(200.200.200.2:15포트) ccc.com(200.200.200.2:15포트)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Session #2 내용중 왜 스레드가 동시다발적으로 접근 불가능한지 질문
Session#2 강의 시작부분에 설명해주신 내용에서, SEssion의 receive는 OnRecvCompleted()메서드에 여러 스레드가 동시다발적으로 들어가는 경우는 없다. 라고 하셨는데, 왜 그런지 이해를 못했습니다. ServerCore의 OnAcceptHandler는 콜백함수라서 콜백함수는 다른 스레드가 생겨나서 실행이 된다고 들었던 것 같은데, 그렇다면 두 스레드가 OnAcceptHandler에서 Session.Start()를 해버리면 OnRecvCompleted()메서드를 두 스레드가 동시에 실행할 경우가 생기지 않나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
listener, session 간의 차이
안녕하세요, listener, session 코드간 차이점에 대해서 질문이 있습니다. 1, listener에서는 OnRecvCompleted()와같은 메서드에서 socketerror가 발생했을 때, disconnect를 하지 않았는데, session에서는 왜 disconnect를 하는 건가요? 2.listener 에서는 registerRecv() 와같은 함수를 OnRecvCompleted의 if, else와 상관없이 실행한거같은데, 왜 session에서는 if(args.Bytes.Transferred > 0 && ~~~) 을 만족해야 OnRecvCompleted를 실행하는건가요? using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; namespace ServerCore { class Session { Socket _socket; public void init(Socket socket) { _socket = socket; SocketAsyncEventArgs recvArgs = new SocketAsyncEventArgs(); recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted); //userTocken으로 추가적인 정보를 아무거나넘겨줄 수 있다(object를 받기 때문) recvArgs.SetBuffer(new byte[1024],0,1024); RegisterRecv(recvArgs); } void RegisterRecv(SocketAsyncEventArgs args) { args.AcceptSocket = null; bool pending = _socket.ReceiveAsync(args); //바로 성공했으면 if(pending == false) { OnRecvCompleted(null, args); } } void OnRecvCompleted(object obj, SocketAsyncEventArgs args) { //BytesTransferred == 몇바이트 받았는지 if (args.BytesTransferred>0 && args.SocketError == SocketError.Success) { try { string recvData = Encoding.UTF8.GetString(args.Buffer, args.Offset, args.BytesTransferred); Console.WriteLine($"[from client] : {recvData}"); RegisterRecv(args); } catch(Exception e) { Console.WriteLine($"onrecvcompleted failed {e}"); } } else { //TODO Disconnect } } } }
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Listener, Session 에서의 콜백메서드 질문
안녕하세요, listener, session 클래스를 구현할 때, 콜백메서드에 대해 질문이 있습니다. 아래와 같은 코드에서, using System; using System.Collections.Generic; using System.Net.Sockets; using System.Text; namespace ServerCore { class Session { Socket _socket; public void init(Socket socket) { _socket = socket; SocketAsyncEventArgs recvArgs = new SocketAsyncEventArgs(); recvArgs.Completed += new EventHandler<SocketAsyncEventArgs>(OnRecvCompleted); //userTocken으로 추가적인 정보를 아무거나넘겨줄 수 있다(object를 받기 때문) recvArgs.SetBuffer(new byte[1024],0,1024); RegisterRecv(recvArgs); } void RegisterRecv(SocketAsyncEventArgs args) { args.AcceptSocket = null; bool pending = _socket.ReceiveAsync(args); //바로 성공했으면 if(pending == false) { OnRecvCompleted(null, args); } } void OnRecvCompleted(object obj, SocketAsyncEventArgs args) { if (args.SocketError == SocketError.Success) { string recvData = Encoding.UTF8.GetString(args.Buffer, 0, args.Buffer.Length); Console.WriteLine($"[from client] : {recvData}"); } else { Console.WriteLine(args.SocketError.ToString()); } RegisterRecv(args); } } } 해당 RegisterRecv()메서드에서 pending이 false인 경우 바로 OnRecvCompleted()를 호출해주는거고, true인 경우 콜백메서드로 OnRecvCompleted가 호출되는 형식이라고 이해를 했는데, void RegisterRecv(SocketAsyncEventArgs args) { args.AcceptSocket = null; bool pending = _socket.ReceiveAsync(args); //바로 성공했으면 if(pending == false) { OnRecvCompleted(null, args); } }그렇다면, pending이 false인 경우에는 if(pending == false) { OnRecvCompleted(null, args); }여기서 OnRecvCompleted() 호출되고 또 콜백메서드에서 또 한번 호출되는 것 아닌가요? 콜백메서드가 false인 경우에 2번호출되지 않는다는 것을 어떻게 이해하면 될까요?
-
미해결외워서 끝내는 네트워크 핵심이론 - 응용
SPI 관련 질문 있습니다
SPI 와 DPI를 검색해보면, 가장 많이 나오는 spi는 stateful packet inspection입니다. 널널한 개발자님께서 말씀하신 spi는 shallow packet inspection을 말하시고, http 헤더까지만 보는 것이라고 하셨고, stateful packet inspection를 검색해보면, L1~3계층 까지 조사하는 것으로 ip 헤더까지만 조사하는 것으로 이해했습니다shallow packet inspection와 stateful packet inspection는 다른거라고 생각하며 되나요?DPI는 L1~7까지 조사하는 것인데 모든 패킷을 검사하는 것이라고 생각하면 되나요?
-
해결됨20년 경력자의 알기쉬운 컴퓨터네트워크
이미 구성된 토폴로지 그려보기
토폴로지 구성을 파악하려면 방법이 있을까요?정말 유익한 강의 감사드립니다.다름이 아니라 처음부터 토폴로지를 구성하는 것이 아닌,이미 구성되어 있는(회사같은) End-Point 단말에서 ping 이나 tracert 같은 혹은 더 유용한 툴을 통해서 어떻게 토폴로지가 구성되어 있는지 파악하는건 가능할까요?강의를 보고 ping 이나 tracert 를 해봐도 대부분 제대로 된 응답을 안주는 경우가 많아서 어떻게 구성되어 있는지 보이지가 않습니다.도움말씀 부탁드립니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
표준 헤더와 임의 헤더
안녕하세요 좋은 강의 잘 듣고 있습니다. 표준 헤더라는 것은 브라우저가 자동으로 넣어주는 것인가요? 예를 들어 백앤드에서 만든 api의 response의 헤더에는 사실 java/spring 기준으로. 'return new ResponseEntity(response, HttpStatus.OK)' 만 내보내줌에도 불구하고, 개발에 배포한 후 브라우저에서 f12로 개발자 도구로 확인하면 제가 넣지 않은 여러 헤더들(Origin, Host 등 다양한 값) 이 들어있더라구요. 표준헤더의 기준(몇 가지는 꼭 브라우저가 넣어준다 등) 은 어떻게 정하는 걸까요? 브라우저마다 다른가요? 미리 감사드립니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
POST 등록 후 Location 헤더
안녕하세요좋은 강의 항상 잘 듣고 있습니다. 다름이 아니라, post에서 등록한 후 201, CREATE(또는 200, OK) response 에서 Location헤더 필더에 해당 리소스의 생성된 위치를 보여준다고 했는데요(ex /members/100) 꼭 실무적으로 그렇지 않고 개념, 이론적으로 그렇다는 것 맞을까요? 개발자가 직접 해당 소스의 위치 값을 response Header 의 Location 필드값에 넣어주는 것이요. 반드시 post api에서 자동적으로 내려주는 것은 아니라서 여쭤봅니다. 감사합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
환경설정 질문입니다
안녕하세요 선생님, 제가 새 프로젝트를 만들면서 이름과 위치를 정하고 다음으로 넘어갔더니 대상 프레임워크에 .NET Core 3.1 (지원하지 않음) 이라고 나옵니다.visualstudio installer에서 제가 보기에 c#에 관련된 것은 다 설치한 상태인데 더 설치해야 하는 것이 있는걸까요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
프로세스의 상태가 변경되는 경우에 Post 사용
안녕하세요 좋은 영상 항상 잘 보고 있습니다.궁금한 점이 있습니다.프로세스의 상태가 변경되는 경우 등에 post를 사용한다고 했습니다.주문에서 결제완료 -> 배달시작 -> 배달완료 등그런데 이런 과정에서 만약 requestBody에 내용이 필요없는 경우에(프로세스의 상태를 변경하는 경우에 그럴 경우 낮지만)도 만약 의미적으로 프로세스의 상태가 변경되는 경우라면 post를 사용하는 것이 맞을까요? 현업에서, 호출하는 동기화 api 를 batch로 작업한 적이 있었는데요. 주기적으로 엑셀을 읽어서 내용들을 DB에 동기화하는 작업이었습니다. 그런데 해당하는 Api를 호출할 때는 requestBody가 필요한 것이 아니었으므로 post로 만들었었는데요, 강의를 다시 들으면서 궁금해서 여쭤봅니다. requestBody 의 유무 등이 중요한 것이 아니라 의미적으로 다가가는 것이 더 맞겠죠?