묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
혼자 정리해 본 Stateful과 Stateless의 차이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 강의에서의 예시로 보면 Stateful에서는 점원이 바뀌면 구매자가 어떤 것을 사고 싶은지 점원이 파악하지 못함 Stateless에서는 점원이 바뀌더라도 구매자가 필요한 모든 정보를 가진 채로 요청하기 때문에 주문에 문제 없음 이렇게 이해했는데, 그렇다면 Stateful에서는 "서버"가 "클라이언트"의 상태를 기억하고, Stateless에서는 "클라이언트"가 애초에 접속할 때 "서버"에게 필요한 상태를 제공하는 것으로 이해하면 될까요? 만약 그렇다면 "필요한 상태를 가지고 있어야 할 책임이 어느 쪽에 있는가?"에 따라 Stateful과 Stateless로 나누면 되는 것인지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
유저 간 패킷전송의 평등성? 에 대한 질문입니다.
온라인 게임을 하다보면 pc의 성능이 안좋거나 인터넷 환경이 불안정한 경우 렉이 걸려 해당 유저의 캐릭터가 멈추는 경우를 봤습니다. 이는 아마도 서버와 패킷을 전송하는 과정에서 pc성능의 문제로 패킷을 소화하지 못하거나 인터넷이 끊겨 패킷을 제때 전달받지 못해서 발생하는 문제라고 생각합니다. 그렇다면 반대의 경우 pc 성능이나 인터넷 환경이 타유저에 비해 압도적으로 뛰어난 경우는 타 유저에 비해 보다 많은 패킷을 주고 받을 수 있을 거라 생각합니다. 그럴 경우 타인보다 더 많은 이동, 공격을 하는 등 유저 간 벨런스에 문제가 생길 것 같고 그를 방지하기 위해 패킷 전송에 있어 일종의 상한선을 걸어야 하지 않을까 라는 생각을 합니다. 마치 프레임 제한을 거는 것처럼요. 이게 맞다면 제 개인적인 판단으로는 그러한 한 번에 전송할 수 있는 패킷의 양, 전송대기 시간 등을 클라이언트 쪽에서 제한하는 쪽으로 코드를 짜야하는 게 맞다고 생각이 드는데 이런 부분을 클라쪽에서 관리를 해야할까요? 아니면 서버 쪽에서 관리를 해줘야 할까요? -- 번외의 질문입니다. 롤의 경우 렉이 걸리는 유저는 혼자 렉이 걸리고 심할 경우 게임에서 나가지는 식인 반면에 닌텐도의 슈퍼마리오메이커2는 유저대전에서 한 명이 렉이 걸리면 전원이 렉이 걸리는 방식으로 알고 있습니다. 게임을 개발하는 개발자로서 마리오 방식보다는 롤의 방식이 유저에게 좀 더 긍정적인 평가를 받을 수 있을 거라 생각하는데 게임사 측에서 마리오 방식을 택하는 이유가 있을까요? 늘 좋은 강의 감사합니다.^^
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
컬렉션과 스토어 질문
안녕하세요. 다른 질문답변을 전부 찾아보았는데도, 컬렉션과 스토어 관해 이해가 명확히 되지 않아 질문드립니다. 컬렉션은 서버가 리소스의 URI를 생성하고 관리한다는 말이 회원 등록 POST에서 /members 라는 URI를 스프링 컨트롤러에 회원 등록 메소드(@PostMapping("/members"))를 만들어두었다는 것을 말하나요? 그러면 스토어는 클라이언트가 리소스의 URI를 알고 관리한다고 되어 있는데, 결국에 파일을 등록 PUT 하기 위해서는 /files/test.png 로 등록 요청을 해야할텐데 그러면 스프링 컨트롤러에서 (@PutMapping("/files")) 가 있어야 하지 않나요? 스토어 또한 결국 서버가 리소스 URI를 생성한거고 그거에 따라 클라이언트가 해당 URI에 맞춰 요청을 하는 것이 아닌가요? 컬렉션과 스토어 둘 다 어떤 요청이던간에 스프링 컨트롤러에 URI가 매핑된 메소드가 정의되어 있어야 해당 URI에 요청이 가능할텐데, 그러면 둘 다 서버가 URI를 생성하고 관리하는 것이 아닌지.. 잘 이해가 안되네요 ㅠㅠ 답변 부탁드립니다. 감사합니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
리눅스에서 이벤트 사용
쓰레드 강의파트에서 리눅스 영역을 고려해 <windows.h>를 사용하지 않고 <thread>를 사용한다고 하셨는데 이벤트는 <windows.h> 헤더를 대체할만 것이 있을까요?
-
해결됨네트워크, 그림으로 이해하자
결제수단 변경으로 질문드립니다.
어디에 남겨야 보실 수 있는지 모르겠어서 부득이하게 이곳에 질문드립니다. 삭제 요청하시면 바로 삭제하겠습니다 07/12일에 결제했는데 회사에서 교육 지원이 가능하다고 하여 결제한 카드를 변경하고 싶은데 이미 시간이 지났고 학습자료도 다운 받은 상태라서 결제수단을 변경할 수 있을까요? - 재결제 후 기존 카드결제를 환불하거나 이런식으로요
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
신규 강의 질문
안녕하세요 루키스님! 유튜브에 온라인 출판사 영상을 보고 궁금하게 생겨서 이렇게 질문드려요! 유튜브 영상에서는 WinAPI-D2D-D3D 커리큘럼, UE 커리큘럼, Unity 커리큘럼 이렇게 3개를 구상중이라고 하셨는데 C++ IOCP + UE5 연동 강의는 일정이 어떻게 되는지 알 수 있을까요? ㅠㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Func<Session> sessionFactory 사용에대해서 궁금합니다
Func가 리턴값이 하나인 함수를 캡슐화한다고 공식문서에서 찾아봤는데요 함수를 캡슐화한다는게 함수에서 매개변수로써 사용한다고 생각하면 될까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
생각을 해봤는데 이해가 잘 되지않습니다. 질문 드립니다
안녕하세요. 지금 ReadLock WriteLock 강의듣고 혼자서 구현해보는 연습중에 궁금한점이 있어서 문의드립니다. Main부분에서 for (int i = 0; i < 2; i++) { threaManger->Luncher(ThreadWrite); } for (int i = 0; i < 5; i++) { threaManger->Luncher(ThreadRead); } 고유 스레드 아이디를 부여해서스레드 2개는 Write("스레드 아이디" 1,2)스레드 5개는 Read ("스레드 아이디" 3,4,5)일을 시키는데이렇게 되면 Read만 하는 스레드는 ReadLock만 잡고Write만 하는 스레드는 WirteLock만 잡게 되어서1번 아이디의 스레드(Write)가 Read Lock을 잡을 수 없지 않나요?아래 코드에서 Readlock 함수를 보면WRITE_THREAD_MASK를 씌어서 threadId를 비교하는데 이 부분은 실행 안될 거라고 생각되는데 맞나요?실제로 디버그에서 ReadLock에 포인트를 잡고 봤는데 브레이크 포인트에 걸리지는 않았습니다.제가 궁금한 걸 글로 쓰려니 잘 정리가 안돼서 죄송합니다.질문을 요약하자면1.ReadLock을 잡는 스레드의 id는 WriteLock을 잡는 스레드 id와 똑같을 수가 있나요? // ReadLock const int lockThreadId = (_lockFlag.load() & WRITE_THREAD_MASK) >> 16; if (lockThreadId == SharedThreadId) { _lockFlag.fetch_add(1); return; } // WriteLock const int lockThreadId = (_lockFlag & WRITE_THREAD_MASK) >> 16; if (lockThreadId == SharedThreadId) { _writeCount++; return; }
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
하나의 쓰레드에만 일감이 몰리는 현상이 왜 안좋은가요?
하나의 쓰레드가 여러 개의 JobQueue를 점유하는 현상이 안좋은 이유는 알겠습니다. 다른 쓰레드가 다른 JobQueue의 Job들을 처리하지 못하게 되니까요. 그런데 모든 쓰레드가 모든 일감을 처리할 수 있는 만능 일꾼이 된 상황에서, 하나의 쓰레드가 하나의 JobQueue를 오래동안 잡고있는 현상이 왜 안좋은지는 잘 이해가 안갑니다. 어차피 하나의 쓰레드가 붙잡고 해야할 일이 아닌가요? 동시에 여러 쓰레드가 처리 가능한 것도 아닌 것 같구요... 예를 들어, 쓰레드 A, B, C가 있다고 해봅시다. 쓰레드 A가 JobQueue 'ㄱ'를 점유하고 계속 작업을 하고 있습니다. 쓰레드 B와 C는 'ㄱ'과 관련된 일은 모두 A에게 몰아주고 나머지 작업들을 처리하고 있습니다. 그런데 A의 'ㄱ'점유가 너무 길어져서 'ㄱ'의 점유를 B에게 넘겨주었습니다. 그리고 A는 B와 C가 하던 것 처럼 나머지 작업들을 처리하게 되었습니다. 그럼 결국 'ㄱ'의 점유가 A에서 B로 넘어갔을 뿐 달라진 것이 없지 않나요? 오히려 쓸 데 없는 스위칭 비용만 발생한 것이 아닌가요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
분할전송과 범위전송 관련하여 질문있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 영한님 HTTP 강의 잘 듣고 있습니다. 이번 강의는 전송방식을 다루는 부분이다보니까, 서버 -> 클라이언트로 데이터를 전송하는 예시가 나오는데분할전송과 범위전송의 차이가 궁금합니다. 제가 이해한 바로는 아래와 같습니다. 일단 기본적으로 둘 다 보내고자하는 데이터를 나눠서 보낸다는 점은 동일한거 같은데, 범위 전송의 경우, 여러번의 요청과 응답(?)으로 이루어지는 방식이라, 중간에 전송이 실패하더라도 성공적으로 보냈던 이후, 부터 다시 전송이 가능해보이지만 분할전송의 경우, 한번의 요청과 응답(?)으로 이루어지는 방식이라, 중간에 전송이 실패하면, 다시 처음부터 요청과 응답을 해야되지 않을까? 제가 제대로 이해한게 맞을까요?? 아니라면, 어떠한 차이점이 있는지 궁금합니다!!
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
HOST와 PORT 관련 질문입니다.
다른 분들의 질문들을 읽어보다가 생긴 궁금증입니다. Q1. 여러 도메인을 한번에 처리할 수 있는 서버라는 뜻이 여러 도메인이 같은 IP주소를 갖는다는 의미인건가요? Q2. 그렇다면 각각의 여러 도메인의 포트번호는 다를 수도 있고, 같을 수도 있는지 궁급합니다.
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]
docker-compose up -d 명령 실행 후 커서 작동 안함
안녕하세요 강사님, docker-compose up -d 실행후 lock이 걸린듯 아무 key 먹지 않습니다. 그래서 강제로 터미널을 종료하고 다시 ssh -i ~ 명령으로 ubuntu로 들어가려고 하면 ubuntu로 못 넘어가네요.. docker도 restart 해보고 AWS 인스턴스도 재부팅을 해 보았는데 똑 같은 상태 입니다. AWS 인스턴스를 중지하고 다시 기존 보안코드로 시작을 하였더니, ubuntu로 다시 들어 갈 수 있었고 docker-compose up -d 를 실행 할 수 있었습니다. docker-compose up -d 실행 때 갑자기 이런 현상이 또 발생할 경우 순조롭게 하려면 어떻게 하면 좋은지 알려 주시면 감사하겠습니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
GET도 message body를 포함하는 경우 캐시하기 힘든가요 ?
밑에 질문 글과 강의를 종합해 볼 때 1. 리소스가 변경되는 Method일 때는 캐시가 유용하지 않다 2. 요청이 message body를 포함할 때 캐시키를 만들기 어려워서 구현이 어렵다 이렇게 이해했는데요. 2번에 걸려서 GET도 캐시가 어려워질 수 있는지 궁금합니다
-
미해결기출로 대비하는 개발자 전공면접 [CS 완전정복]
Transport 계층의 process-to-process 통신은 network, data link, physical 단계를 거치지 않는 건가요?
"전송계층은 두 응용 계층 사이에서의 process-to-process 통신을 제공한다. 전송계층은 응용계층으로부터 메시지를 받아 전송계칭 패킷으로 캡슐화하여 전송한다" 라고 하셨는데, 제가 헷갈리는 부분이... 원래 TCP/IP 모듈을 보면 응용계층에서 데이터를 캡슐화하면서 Physcial layer 물리계층에 도달하면 0과 1의 신호가 돼서 다른 컴퓨터로 전선으로 전송이돼서 데이터를 받은 컴퓨터에서 다시 decapsulation을 거치면서 원본 데이터를 응용계층에 전달하는 것으로 알고 있는데요 전송 계층에서는 3way handshaking을 통해 두 컴퓨터의 transport 계층 사이에 논리적인 연결을 구축해서 데이터를 주고받는 것이라면... 아래의 network, data, physical layer은 거치지 않고 곧바로 주고받는 것인가요??? 그럼 어떤 상황에서 전송계층을 통해 곧바로 주고받고 어떤 상황에서 physical layer까지 도달해서 전달하는지 궁금합니다
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Receive 에 관해 질문 드립니다.
안녕하세요. 정말 신입 서버의 교과서 같은 강의라서 잘 보고 있다가 문득 궁금한 점이 생겨 질문 드리게 되었습니다. 제가 이해하기로는 TCP 는 Stream 방식이라서 100 byte 의 데이터를 send 하는 경우, 한 번에 받는다는 보장이 없어 20, 30, 50 이렇게 끊어서 받는 경우가 충분히 있을 것 같은데.. 현재 강의해서 제작된 RecvBuffer 를 사용함과는 무관하게 해당 현상을 해소하는 부분이 아직 안 보이는 것 같은데 이 부분은 따로 처리를 해야되는 부분인가요? 추후에 OnRecevie 함수 내부에서 처리를 하게끔 만드는 것인지, 아니면 해당 현상에 관련된 작업은 굳이 안해도 되는 것인지 궁금하여 질문드려봅니다.
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
8분쯤
1) ETag사용시 클라이언트가 캐시 메커니즘을 모른다고 하셨는데 그러면 Last-Modified사용시에는 클라이언트가 캐시 메커니즘을 알고있는건가요? 2) 혹시나 아는거라면 캐시 메커니즘을 안다고 하는게 정확히 무슨뜻인가요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
캐시 무효화 관련하여 질문이 있습니다.
안녕하세요.좋은 강의 잘 듣고 있습니다. 강의 중에 이해가 안가는 것이 있어서 질문드리고자 합니다. 캐시무효화 강의 중에 완벽한 캐시 무효화를 위해서는 Cache-Control: no-cache, no-store, must-revalidate와 같이 세가지 컨트롤 옵션을 모두 사용해주어야 한다고 하셨는데, 제 생각에는 no-store만 사용하여도 애초에 클라이언트가 캐시를 사용하지 않기 때문에 캐시를 무효화시킬 수 있을 것 같은데요. no-cache와 must-revalidate를 사용하는 것은 클라이언트가 캐시를 사용하지 않아도, 프록시 캐시가 작용할 수 있기 때문일까요?그리고, no-cache와 must-revalidate의 차이점은 이해가 가지만, 둘 다를 사용해야할 이유는 잘 모르겠습니다. 제 생각엔 서버가 origin server와의 통신이 안되는 상황에서 에러가 발생하기를 바란다면 must-revalidate를, 그렇지 않다면 no-cache를 사용하면 될 것 같은데요. 둘 다를 사용하면 오히려 클라이언트에게 혼동의 여지가 있지 않을까요?번거로우시겠지만 답변부탁드립니다. (_ _)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
여기 에서 이후에서 궁금 한것이 많아서 질문 드려요
1. 이동 등등 까지 해서 너무 좋은거같아요 이 이후에는 패킷 추가 하고 하는 방식으로 무기 선택 공격 피격 같은건서버에서 players list 에서 좌표 가지고 와서 피격 처리후 클라로 보내주는건가요? 아니면 클라에서 나 맞았어 라고 서버로 보내서 서버에선 Broadcast만 해주는건가요 ? 2. 또 강의 중에 들었던 프로토콜 버퍼 나 플랫 버퍼 같은 라이브러리를 이용해서 만들수도 있다고 하셧는데 지금 코드에서 수정 해서 만들어 봐도 될까요? 3. 지금은 서버 이긴한데 자체 컴퓨터 안에서만 돌아가는거 같아요. 노트북이나 쓰고있는 pc ip를 그냥 넣어서 다른 pc에서 접속으로 해도 될까요 수정이 많이 필요한가요?? 따로 강의는 없는거같아서 혼자 해보려고 해요.
-
해결됨네트워크, 그림으로 이해하자
LAN과 사설 네트워크 관련
안녕하세요 좋은 강의를 해주셔서 감사합니다 강의를 들으면서 궁금한 점들이 생겼는데 1. 사설 네트워크와 LAN, 공용 네트워크와 WAN은 서로 비슷한 개념인가요? 분류 기준이 확실히 다른 것 같긴 하지만 사설 네트워크의 사설 IP가 NAT을 통해 라우터가 할당받은 공용 IP로 전환되고 인터넷에 접속 LAN과 인터넷 공유기(라우터 기능 중 NAT 기능이 특화된 기기)를 연결해 ISP의 서비스를 통해 인터넷 접속 이 2개가 굉장히 비슷하게 생각되어서요... 2. 공용(인터넷) 네트워크의 구성요소는 인터넷 + 라우터로 이루어져있는 것이 맞을까요? 3. 사소한 것이긴 하지만 16페이지에 LAN은 소속 기기들을 모두 포함하는 그림으로 되어있는 반면, WAN은 소속 LAN들을 포함하지는 않고 중심에서 연결되는 그림으로 되어있는데 차이점이 있는 것인가요? 4. 16페이지에서 공유기를 통해 NAT 기능이 되어서 공유 IP로 변환이 된 것 같은데 왜 공유기 그림이 아닌 WAN 그림에 ISP 항목이 들어가 있는지도 궁금합니다...
-
해결됨[D.P.2(DappProject2)] 디앱 프로젝트2(Klaytn 네트워크를 활용한 NFT 생성 및 판매)
리믹스가 실행되지 않습니다
Cannot connect to the remixd daemon. Please make sure you have the remixd running in the background 라는 문구와 함께 웹에서 리믹스가 실행되지 않습니다. 인강과 다른점은 npm을 사용하지 않고 yarn을 사용하여 remix를 설치하고 remixd -s . --remix-ide https://ide.klaytn.com/ 명령어를 실행하였을때 발생하는 오류입니다. 터미널에는 remix가 성공적으로 실행되었고 몇시몇분몇초에 홈페이지에서 연결이 되었다는 문구가 뜨지만 웹에서는 연결이 안되네요... 무엇이 문제일까요 웹브라우저 chrome과 safari 2개를 사용해 보았지만 똑같은 현상이고 dapp프로젝트 1 인강을 들을때와 동일한 개인 작업 환경임에도 불구하고 실행이 되질않습니다 도와주세요 ㅜㅜ