묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
12주차 스프라이트 강의 영상이 재생이 안 됩니다
다른 영상은 정상적으로 재생이 되는데 12주차 스프라이트 만 재생이 안 되고 무한로딩이 됩니다. 재부팅이나 새로고침해도 해결이 안 되는데 확인 해주실 수 있을까요
-
해결됨김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
SessionManagerV6 에서 synchronized 부분이 이해가 잘 안갑니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]package network.tcp.v6; import network.tcp.v5.SessionV5; import java.util.ArrayList; import java.util.List; public class SessionManagerV6 { private List<SessionV6> sessions = new ArrayList<>(); public synchronized void add(SessionV6 session) { sessions.add(session); } public synchronized void remove(SessionV6 session) { sessions.remove(session); } public synchronized void closeAll() { for (SessionV6 session : sessions) { session.close(); } sessions.clear(); } }여기서 closeAll() 에서 스레드가 작업중일때 다른스레드가 remove() 를 호출할 수 없다는 부분이 잘 이해가 안 갑니다.synchronized 는 메서드 단위로 적용이 된다고 알고 있어서 closeAll() 에 스레드가 작업중이더라도 remove() 같은 다른 메서드랑은 관련 없다고 생각했습니다.뭔가 흐름을 잘못 이해하고 있는 걸까요?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
Instance<- ->보안 그룹 매칭 질의입니다.
Instance를 생성할 때 생성되는 보안 그룹과 instance 매칭은 어떻게 하면되나요?? 여러개의 instance가 생성되니 보안 그룹과의 1:1 매칭이 어려워서 질문남깁니다.
-
해결됨모든 개발자를 위한 HTTP 웹 기본 지식
쿠키 관련 질문
[질문 내용]안녕하십니까 강의 너무 잘듣고 있습니다.쿠키의 만료에 관한 질문인데, 인프런사이트의 경우 제가 강의영상 화면에서 화면재생을 멈추고 오랜기간동안 해당 브라우저를 사용하지 않은경우, 브라우저를 종료하지 않았음에도 로그인이 끊겨있는 경우가 있습니다. 반대로 화면을 조작중에는 오랜시간동안 조작하여도 로그인이 끊기지 않습니다.그렇다면 조작을 하는경우에 쿠기의 만료일이 갱신되는 방식같은걸까요? 아니라면 알려주시면 감사하겠습니다!
-
해결됨풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]
도커 컨테이너와 이미지 조사하기-docker run 실행시 컨테이너 생성 안됨 오류
섹션 9-1 강의 4분 47초 docker build --tag myweb -f Dockerfile-ubuntu .실행 후 docker run -d -p 9999:80 --name mywebserver --rm myweb해당 명령 실행하면 웹페이지도 뜨지 않고... 컨테이너도 생성되지 않습니다.프로그램 재 실행 해 봐도 동일한 결과가 나오는데, 어떻게 해결 가능할까요?
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
closed 사용하는 이유
NormalCloseServer 할때 close()가 여러번 호출돼도 예방하는 코드가 있다고 했습니다. 그러면 V6SessionV6에서 closeAll() 하기전에 closed를 확인 안해도 되지 않나요?
-
미해결OpenStack을 활용한 클라우드 환경 구축하기
강의 자료를 같이 올려주시던가 링크를 알려주셔야 하는거 아닌가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 듣는 중에 설정 파일이라든가 강의에 사용하는 파일들이 전혀 보이지 않습니다.. 기본적으로 올라와 있어야 하는거 아닌가요? 하다못해 링크에 대한 안내도 없습니다. 질문들 중에 저와 같은 질문을 한 사람이 있어 그 사람의 답변에 남겨진 링크를 클릭해 봣는데 404 에러 나옵니다. 자료 올려주시거나 링크 올려주시기 바랍니다.
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 기간 연장 부탁 드립니다.
안녕하세요.강의 엄청 유용하게 잘 듣고 있습니다.아직 시험준비가 좀 미비해서 수강 기간 가능하시면 연장 부탁 드립니다!
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강 연장 문의
안녕하세요복습을 위해 수강연장 가능할지 문의드립니다.가능할 경우 연장해주시면 감사하겠습니다!
-
미해결취미로 해킹#4(Nebula)
nebula level01-권한문제
echo파일을 만든 후에 chmod o+x echo명령어를 쳐서 order에 실행 권한을 주었습니다./home/flag01/flag01을 쳐서 실행해보니 permissin denied라고 권한이 없다고 뜹니다.chmod 777 echo를 사용해서 권한을 다 주니 정상적으로 flag01권한을 얻을 수 있었는데, 왜 chmod o+x echo는 권한이 없다고 뜨는지 궁금합니다.1.chmod 777 echo 2.chmod o+x echo
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
스핀락이 올바르게 작동하지 않는 것 같습니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ServerCore { class SpinLock { volatile int _locked = 0; // true: 잠겨있음, false: 잠겨있지 않음 public void Acquire() { while(true) { ////Interlocked.Exchange의 반환값은 원래값이다. //int original = Interlocked.Exchange(ref _locked, 1); ////original == 0이면 잠금 성공, original == 1이면 잠금 실패 //if (original == 0) //{ // //내꺼 // break; //} //CAS (Compare-And-Swap) 함수라고 한다. int expected = 0; int desired = 1; if(Interlocked.CompareExchange(ref _locked, desired, expected) == expected) { break; } } } public void Release() { //잠김을 푼다. _locked = 0; } } class Program { static int _num = 0; static SpinLock _lock = new SpinLock(); static void Thread_1() { for (int i = 0; i < 1000000; i++) { _lock.Acquire(); _num++; _lock.Release(); } } static void Thread_2() { for (int i = 0; i < 1000000; i++) { _lock.Acquire(); _num--; _lock.Release(); } } static void Main(string[] args) { Task task = new Task(Thread_1); Task task2 = new Task(Thread_2); task.Start(); task2.Start(); task.Wait(); Console.WriteLine(_num); } } } 다음과 같이 작업 후 디버깅해보았는데 결과값이 때로는 맛이 간 값을 출력합니다.제시된 코드와 같은 것 같은데 이유를 모르겠습니다!그리고 다음과 같은 상황일 때 어떻게 브레이크포인트를 잡아서 버그수정을 시도해야 할 지 감이 안잡힙니다ㅠㅠ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
다른 스레드가 write하고 있을 때 readlock 허용하나요?
ReadLock 코드uint32 expected = (_lockFlag.load() & READ_THREAD_MASK); if (_lockFlag.compare_exchange_strong(OUT expected, expected + 1)) return;WriteLock 코드const uint32 desired = ((LThreadId << 16) & WRITE_THREAD_MASK); ... uint32 expected = EMPTY_FLAG; if (_lockFlag.compare_exchange_strong(OUT expected, desired)) { _writeCount++; return; }Write할 때 lockFlag를 LThreadId << 16로 저장하기 때문에 첫 비트 ~ 15비트까지는 0으로 초기화가 될것입니다.ReadLock에서는 Read용 Mask를 쓰는데 그럼 Write에서 초기화해준 lockFlag를 볼 수 없어서 항상 참값이 나와 expected + 1로 수정되는거 아닌가요?? 다른 스레드가 Write하고 있을 때 Read를 허용하는것인지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Protobuf 사용시 Lnk2001 에러 두줄
이 두줄을 이틀째 해결 못하고있습니다.3.17.0 ~ 3.19.x 버전은 빌드 O5.27.0 ~ 5.28.x 버전은 빌드 X 최신 버전 및 그 근처 버전들은 전부 마지막에 저 두 에러가 떠서 결국 잠시 내려놓고 다른 방법을 찾아봤습니다.공식문서를 참고해 vcpkg에서 가장 최신버전을 설치해보니 4.25.1로 빌드되고 니 프로젝트가 문제 없이 빌드 되는것 확인했습니다. 최신버전 한 번 사용해보겠다고 이것저것 시도한건 다 실패한건 아쉽지만 그래도 안전하게 사용하가능한 여러 버전을 알게 됐네요.vcpkg에서 설치하면 .lib이나 google을 안넣어도 자동으로 적용되는데 문제 없을까요?아니면 안전하게 설치되는 버전을 파악했으니 삭제하고Cmake로 해당 버전을 다시 빌드할까요?그리고 최신 버전은 꼭 사용할 필요 없는 거겠죠?
-
미해결AWS Certified Solutions Architect - Associate 자격증 준비하기
수강기간 연장 부탁드립니다.
일이 바빠서 거의 듣지 못하다가대기기간이 되서 지금 들을려고 하는데수강기간 연장 부탁드립니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
오류 원인을 찾기가 어렵네요.
안녕하세요.거의 하루종일 보고 있는 문젠데요.클라이언트에서 에코해줄 때 강사님은 OnRecvCompleted() 함수 안에서 인자로 받은 length가 아니라 sizeof send_buffer를 사용하고 계셔서 오류가 발생 안 했어요.인자로 받는 length를 해주면 프로그램 구동하고 나서 얼마 안돼서 주고받는 데이터가 영원히 증가합니다. 물론 ASSERT_CRASH가 있기 때문에 메모리 할당해주는 부분에서 결국 멈추긴 합니다.정확한 이유를 못 찾겠네요. 이리저리 중단점 찍어보는데, 한 가지 확실한 건 서버에서 WSASend() 해주고 클라에서 받을 때 갑자기 데이터 사이즈가 튑니다. 더미 클라에서 세션을 하나만 넣어줘도 재현돼요.이럴 때 비동기 + 멀티스레드는 정말 헬이네요. ProcessSend()로 들어오는 sendBytes가 갑자기 26, 52..이렇게 되어버립니다. GSendBufferManager에서 반환하는 메모리 위치는 문제가 없어요. 어느 순간 데이터를 미친 듯이 이어 붙입니다.위 이미지처럼 하나씩만 오고 가야 하는데(Hell, World!)어느 순간 아래 이미지처럼 확 늘어납니다.계속 누적돼요. 강사님 코드 거의 그대로입니다.WSASend() 동작이 중첩됐나까지 의심하게 되네요. 그러나 송신 큐 부분에 락 걸고 이후 코드는 스택 변수라 강사님과 동일하게 진행됩니다.void Session::RegisterSend() { _send_event.Init(); _send_event.owner = shared_from_this(); // 보낼 데이터를 send_event에 등록 // 레퍼런스 카운트 유지를 위해 SendEvent의 멤버변수를 이용한다 { WRITE_LOCK; while (false == _send_queue.empty()) { SharedSendBuffer send_buffer = _send_queue.front(); _send_queue.pop(); _send_event.send_buffers.push_back(send_buffer); } } xvector<WSABUF> wsabufs; wsabufs.reserve(_send_event.send_buffers.size()); for (SharedSendBuffer send_buffer : _send_event.send_buffers) { WSABUF wsabuf; wsabuf.buf = reinterpret_cast<char*>(send_buffer->Buffer()); wsabuf.len = static_cast<LONG>(send_buffer->WriteSize()); printf("wsabuf len: %d\n", wsabuf.len); wsabufs.push_back(wsabuf); } DWORD send_bytes = 0; int32 result = WSASend(_socket, wsabufs.data(), static_cast<DWORD>(wsabufs.size()), &send_bytes, 0, &_send_event, nullptr); int32 error = WSAGetLastError(); if (SOCKET_ERROR == result && error != WSA_IO_PENDING) { HandleError(error); // release ref _send_event.owner = nullptr; _send_event.send_buffers.clear(); _send_registered.store(false); return; } } 정상적인 에코 서버라면 주고 받는 데이터의 크기가 계속 일정해야 한다고 생각해서 테스트한 건데 고통의 시간을 겪고 있습니다..참고로 GameSession에서 OnRecv 재정의할 때 1회만 브로드캐스트 해주고 있습니다.int32 GameSession::OnRecvCompleted(BYTE* buffer, int32 length) { // temp echo printf("GameSession OnRecvCompleted len: %d\n", length); SharedSendBuffer send_buffer = g_send_buffer_manager->Open(4096); memcpy(send_buffer->Buffer(), buffer, length); send_buffer->Close(length); g_session_manager.Broadcast(send_buffer); return length; }
-
미해결그림으로 쉽게 배우는 네트워크
스위치 포워딩
스위치는 처음부터 브로드 캐스팅 하지않고 포워딩으로 보내나요??
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
BufferedOutputStream 질문입니다.
[질문 내용]CreateFileV3 코드에서반복문을 돌고 fos로 보내는 메소드는없는데어느 시점에서 버퍼에 담긴 데이터가 fos로 보내지는건가요?bos.close() 때 강의에서 설명하신 내부적 flush() 실행으로 보내는줄 알았는데 아니더라구요. 반복문이 종료되는 시점에 보내지는지아니면 버퍼가 가득찼을때 보내지는지.. 어느 시점인지 궁금합니다.
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
IntelliJ 에서 클래스 생성시 Exception 생성 기능
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요. 영한님처럼 클래스 생성시 Exception이 따로 안떠서 어떻게 하면 Exception도 클래스나 인터페이스처럼 바로 생성하는 기능을 추가할 수 있는지, 단순 버전 차이인지 궁금합니다.(2번째 사진은 제가 클래스 생성할 시 뜨는 창입니다.)
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
교안으로만 공부해도 충분할까요?
팬심 또는 언젠간을 위해 강의를 전부 구매했습니다.구매 후 기본편 까지는 강의를 다봤거든요.그런데 교안을 너무 잘만드셔서 교안만 봐도 될꺼같다 라는 생각이 들더라구요.물론, 강의를 진득하게 듣고 이해하여, 그것을 체화하면 자바에 대해 더 깊게 이해할 수 있겠지만,문제는 역시 트레이드오프... 시간이 너무 많이 걸리네요. 자바 고급 2편까지 1달 반에서 2달 내로 끝내고 싶은데 강의를 들으면 도저히 그 시간을 맞출 수 없을꺼같아서 질문해봅니다.제목 그대로 교안만으로도 충분할까요?
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, flask 배포) [풀스택 Part3]
mysql 접속 port 개방할 때 궁금한 점이 있습니다.
강사님 안녕하세요. 강사님 강의 저번주 부터 열심히 듣고 있습니다. 😀 15:50 분 쯤에 mysql port를 개방하시는 부분이 있는데 조금 궁금한 점이 생겨서 질문드립니다.aws에서 인바운드 규칙으로 모든 외부 ip에서 mysql db로 접속이 가능하도록 열어두셨는데(0.0.0.0/0), 비밀번호 설정이 되어있기 때문에 그냥 열어두신 건가요? 보안 상 ip주소를 관리자 ip만 허용하는 것이 좋다고 생각이 드는데.. 실무에서도 이렇게 하는 것이 관행인지 궁금합니다. 만약 보안 상 큰 문제 될 것이 없다면 그러한 이유가 무엇인지도 알고 싶습니다.