만약 한 쓰레드에서 ReadLock과 WriteLock이 전부 호출된다고 했을 때 반드시 호출의 역순으로 Unlock을 호출해야 되나요? 아래는 C#에 구현돼있는 ReaderWriterLockSlim 클래스를 사용하여 실행한 예시입니다. class Program { static ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); static void Main(string[] args) { Task.WaitAll( Task.Run(() => { _lock.EnterWriteLock(); _lock.EnterReadLock(); Thread.Sleep(5000); _lock.ExitWriteLock(); _lock.ExitReadLock(); })); } } WriteLock -> ReadLock -> WriteUnlock -> ReadUnlock 순으로 호출했고 정상적으로 작동합니다. 강의에서 구현한 ReaderWriterLock을 사용해도 예외가 발생하지는 않습니다만 위의 순서로 호출하면 flag가 엉망이 됩니다. public void WriteUnlock() { int lockCount = --_writeCount; if (lockCount == 0) Interlocked.Exchange(ref _flag, EMPTY_FLAG); } 동일한 쓰레드가 ReadUnlock을 호출하지 않은 상태에서(즉 read count가 0이 아닌 상태에서) WriteUnlock을 호출할 경우 flag가 0으로 초기화되기 때문에 이후에 ReadUnlock을 호출할 경우 flag가 -1로 초기화됩니다. 제가 생각하기엔 굉장히 특이한 케이스고 실제로 함수가 재귀적으로 호출되기 때문에 발생할 일은 없다고 보는데요...혹시라도 휴먼에러로 위와 같은 상황이 벌어질 경우를 대비해서 예외를 추가하거나 WriteUnlock 로직을 수정해서 'EMPTY_FLAG'가 아닌 '_flag & READ_MASK'를 대입하면 어떤가요?
정답 예시에서는 91개가 조회되는데 제가 생각한 쿼리는 89개만 조회가 됩니다. 쿼리가 잘못된걸 까요? SELECT c.customerId `고객아이디`, c.customername as `고객이름`, sum(Quantity) as `주문량` FROM OrderDetails od join Orders o on o.OrderId = od.OrderId join Customers c on c.customerId = o.customerId group by o.customerId order by sum(Quantity) desc ;
서버에서 쿠키를 생성할때 도메인을 설정하는 이유는?만약 클라이언트가 다른 도메인에서 요청한것이라면 서버가 쿠키를 응답 자체를 안해주는걸까요? 서버에서 쿠키 생성시 samesite를 설정하는 이유는?클라이언트가 쿠키를 먼저 서버로 부터 받은후, 다시 다른 api 요청시에 나의 도메인과 쿠키에 설정된 도메인이 다른 경우 막으려고 하는건가요? 2가지 차이점에 대해 명확히 좀 알려주셨으면 ㅠㅠ
이해가 안갑니다.. 서버는 하나의 아이피를 가지자나요? 그런데 지금 상황은 도메인을 여러개 등록할때 당연히 같은 아이피로 등록했다는거자나요? 그런데 서버에서 저 호스트 정보가 왜 필요한걸까요? 현재 서버에서 어플리케이션 3개가 띄어져있다고하면 3개는 모두 포트가 다를수밖에 없습니다 그러면 클라가 요청시에 포트만 다르게 요청하면 되는 것인데 굳이 호스트가 왜 필요한걸까요?..
강의 BGP 4:36에서 'AS 내부 경로는 모르는데 어떻게 전달하나요' 라는 내용이 있는데, 이는 양끝의 ASBR이 서로 데이터를 전달하는 방법에 대해 설명해주신 거 였습니다 AS 내부의 특정 라우터에 접근하기위해선 이 라우터가 어떤 AS에 속해있는지 알아야지 BGP를 이용해서 그 AS 까지 갈텐데요, 어떤 AS에 속해있는지는 어떻게 알 수 있나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 안녕하세요. 현재 프로젝트로 스케줄러 rest api 개발을 하고 있습니다.하지만 rest api 설계 중 어떤 형식으로 설계해야 좋은 설계가 될지 고민이 들어 질문 드립니다. 스케줄러 시나리오는 다음과 같습니다. 유저A가 여러 유저들과 그룹a'를 만들고 그룹a'에서 스케줄을 생성할 수 있습니다. 유저A는 모든 약속을 한번에 모아볼 수 있고, 또는 그룹a'의 방에 들어가서 그룹a'의 스케줄을 볼 수 있습니다. 1번 /user/{userId}/schedules : 유저의 모든 스케줄 /group/{groupId}/schedules : 그룹의 모든 스케줄 /schedules/{scheduleId} : 상세 스케줄 2번 /schedules/user/{userId} or /schedules?userId= 유저의 모든 스케줄 /schedules/group/{groupId} or /schedules?groupId 그룹의 모든 스케줄 /schedules/{scheduleId} 상세 스케줄 어떤 방식이 좋은 방식인가요? 1번은 계층적 구조에 중점을 두었다 생각하고 2번은 리소스에 대한 가시성이 좋다고 생각이 듭니다. 웹페이지를 라우팅할때는 1번 rest api를 설계할때는 2번 방식을 무심코 썼었던거 같은데 둘의 URL매핑 구조는 달라야 하는게 맞는건가요? 글이 두서가 없어 죄송합니다! 아직 지식에 부족함이 많아 정리가 잘 안되네요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 앱 클라이언트나 Ajax? 라고 부르셨던 리액트도 url를 이용하여 json 데이터를 서버와 통신을 하나요? URL를 이용하지 않으면 어떤 방식을 이용하나요??
제 생각에는 락프리 스택 만들 때도 그렇고 이번 강의 큐도 그렇고 노드 안에 있는 data 타입을 그냥 T data 라고 해도 될 것 같은데 굳이 shared_ptr로 하는 이유가 있을 까요? shared_ptr 로 하면 메모리 비용과 시간 비용이 더 드는것으로 알고있는데요! 별 이유는 없을까요
위쪽에도 같은 맥북 질문이 있는것으로 확인 하였는데 해결방법을 모르겠어서 질문드립니다. 쓰레드가 Console.WriteLine까지는 진입을 하지만 출력이 되지는 않는 문제가 발생합니다. 또한 중간에 쓰레드가 전부 사라져버리고 디버깅이 더이상 진행되지 않는 문제가 발생합니다.
안녕하세요 PacketSession에서 if (buffer.Count < dataSize) break; 이 부분의 코드가 왜 필요한지에 대해서 의문이 생겨 질물 남깁니다 예를들어 100바이트 크기의 버퍼가 OnRecv매개변수로 들어왔고 해당 100 바이트가 5가지 패킷의 정보를 들고 있다고 했을 때 하나의 패킷을 처리할 때 마다 해당 크기의 dataSize만큼 buffer크기(Count)가 갱신 될텐데 그렇게 된다면 위의 조건에는 들어오게 될 일이 전혀 없게 되는거 아닌가요?
안녕하세요! 마지막 부분에 Destination Address ~ FCS까지를 이더넷 프레임으로 묶으셨는데, Preamble과 SFD는 이더넷 프레임으로 취급하지 않는건가요? 이더넷 헤더에 Preamble과 SFD가 포함되어 있고, 이더넷 프레임은 네트워크 계층에서 받은 패킷에 이더넷 헤더와 트레일러를 붙인 것이라고 이해했는데, 잘 이해가 가지않습니다. 감사합니다^^
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 201 상태코드 부분에서 질문이 있습니다. 요청이 성공해서 새로운 리소스가 생성된 경우 201 상태코드와 생성된 리소스에 대한 정보를 body에 넣고 Location에 리소스의 위치를 넣어서 보낸다고 하셨는데 응답의 body와 Location 정보가 꼭 필요한 것인지 궁금합니다. 클라이언트는 리소스를 생성해야되므로 body에 내용이 필수적으로 필요하지만 서버의 응답의 경우 201 상태코드만 보내어 리소스 생성이 정상적으로 이루어졌는지만 클라이언트에게 알려주면 되는것 아닌가요? 서버에서 응답으로 보낸 Location과 body의 데이터가 클라이언트에서 어떤식으로 사용되기를 바래서 이러한 데이터를 함께 보내는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 영구적 리다이렉션과 일시적 리다이렉션이 의미에 따라 나눠지는것 말고 따로 기술적인 차이가 있는 지 궁금합니다. 관련하여 구체적인 질문 2개가 있습니다. 두 리다이렉션 모두 요청을 보낸 후 응답의 Location 헤더를 참고하여 URI 를 이동하게 되는데 그럼 두 리다이렉션의 기능은 동일하지만, 단순히 내가 처음에 보냈던 URI 가 유효한 주소인지, 그렇지 않은지에 따라, 즉 의미에 따라 나눠진건가요? 일시적인 리다이렉션 설명에서 리소스의 URI가 일시적으로 변경된 것이기 때문에 검색 엔진 등에서 URL 을 변경하면 안된다 고 하셨는데, 응답의 location 을 참고해 다른 URL 로 요청을 보내는것은 이와 다른 의미인가요?(예시의 /order -> /order-result/19 와 같은) 그렇다면 검색 엔진에서 URI을 변경하면 안된다는게 무슨 뜻인지 궁금 합니다.
안녕하세요! 강의 내용 복기중에 몇가지 의문점이 생겨 질문드립니다! 서비스에서 MaxSessionCount, SessionCount의미 -> 제가 이해한거로는 클라가 한명 연동 될 때마다 SessionCount가 1씩 증가하고 MaxSessionCount는 최대 허용 접속 수라고 이해하고 있는데 맞는지 궁금합니다. -> 이게 맞다면 한계치는 어느정도로 정하고 기준은 무엇인지 궁합니다. 리스너에서 AcceptEvent N개 사용의 의미 -> StartAccept 부분에서 5개 만들고서 그거를 각각 Register에 등록했다는 말은... 동접 5명을 받을 수 있다는 의미인가요? -> 만약 동접 의미로의 N개 사용이라면 포폴 수준에서는 1개만 사용해도 무방한가요? 테스트해보니까 패킷 전송 속도에는 별 차이가 없어보여서요! C++ 서버 & 유니티 클라 연동 ? -> 패킷 정보가 Proto가 중간 역할 해주고 있고 직렬화 하면서 결국 정수로 데이터 핑퐁이라고 이해되고있는데 이게 맞다면 저런 관계의 연동에도 문제가 없나요? 이제 강의 막바지가 되어가고 복기를 쭉 해나가면서 질문들이 계속 나올것 같은데 지금처럼 커뮤니티 게시판에 질문드리면 될까요? 아니면 따로 질문 올리는 곳이 있을까요??
System.InvalidOperationException: 'The ThreadLocal object is not tracking values. To use the Values property, use a ThreadLocal constructor that accepts the trackAllValues parameter and set the parameter to true.' 코드를 작성했는데 이러한 오류가 나옵니다. 제가 작성한 코드에 오타를 뒤져봐도 찾을 수가 없습니다. 혹시 어떠한 경우에 이런 오류가 생기나요 100% 로 오류가 나옵니다. public static ThreadLocal<SendBuffer> CurrentBuffer = new ThreadLocal<SendBuffer>( () => { return new SendBuffer(ChunkSize); }, trackAllValues: true); 찾아보니 스레드 로컬 커런트 버퍼를 만들 때 이렇게 해주면 오류가 사라지긴 합니다. 왜 이런 문제가 발생하는 건가요?