- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Form컴포넌트에서 props로 받던 handleFormSubmit을 직접 구현하려면 props에서 꼭 빼야하나요? 그게 아니라면 App에 있었던 handleFormSubmit에서 같이 구현해서 props로 넘겨서 쓰는것도 한 방법일까요?
안녕하세요, 항상 강의 정말 재미있게 수강하고 있습니다! 서버의 구조가 어떤지, 어떻게 동작하는지 전반적으로 알 수 있게 되어서 루키스님께 정말 감사할 따름입니다. 강의를 듣고나서 추가적으로 궁금한 점이 생겨서 질문 드립니다! 강의에서 만든 TCP 서버(게임 서버)와 클라이언트가 패킷을 주고 받을 때 현업에서는 어떻게 보안 처리를 하는지 궁금합니다. 현재 서버 구조는 패킷 전체를 암호화한다면 패킷 헤더에 있는 내용을 읽을 수 없어서 ReadBuffer에서 몇 바이트를 읽어와야 하는지 알 수 없게 될텐데 게임 서버 구조가 이러한 구조라면 헤더는 빼고 암호화를 하여 보안처리를 해야 복호화 후에 데이터를 읽어올 수 있을 것 같아서요. 아니면 다른 방법을 사용하는 것인지 궁금합니다!
diaryList[0].filter 이렇게 하시면 콘솔창에서 필터가 되어 있는 모습을 볼 수 있습니다. 한 30분동안 왜 필터가 안 되는지 forEach로 찍어봤는데 배열 하나 안에 객체가 여러개 있는거기 때문에 저렇게 해야하는거 같긴 한데, 또 강사님은 그냥 하셔도 출력이 되시네요. 무튼 저는 위의 방식으로 해결했습니다.
개인적으로 강의 들으면서 as const를 썼을 때 왜 다를 까를 추측해봤는데 제 생각이 타당한지 같이 고민해주시면 감사하겠습니다. 혹시 배열이랑 튜플에 내장하고 있는 pop, push, shift, unshift와 같은 메서드들의 존재 때문이 아닐까요? 배열이나 튜플에 as const를 쓰면 기존 배열과 튜플에 있는 메서드들이 사라지니까 타입이 달라져서 에러가 뜨는거고 객체에는 그런 메서드들이 없어서가아닐까요?
강의 도중 중요한 내용은 아니라고 하셨지만 궁금해서 이렇게 질문을 남깁니다. 커넥션을 사용하고 반환하는 과정에서 Proxy로 감싸지 않고 반환하면 다시 재사용하는데 있어서 어떤 문제가 발생하는 것인지 궁금합니다. 또한, Proxy 로 감싸서 얻는 이점이 무엇인지도 궁금하네요.. 강의 감사합니다!
[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
api 설계할 때, 클라이언트로 전달해야하는 값이 list 형태이면 컬럼을 string[] 배열로 설정해도 되나요?? 엔티티 구성할 때 string[] 형태의 컬러은 본 적이 없어서 헷갈립니다,,, ex) 대상 : [ 10살, 11살, 12살] 하나의 컬럼에 여러 값들이 들어갈 경우,,,,, 어떤식으로 처리해야 하는지 모르곘습니다.
강사님 안녕하세요 이건 기본적인 질문 같아서 질문드리기가 좀 그래서.. 계속 찾아봤는데, 해결이 안되어서 봐주시면 감사하겠습니다 의외로 간단한 문제 같은데 잘 모르겠어서요 User를 가져와서 User.create({}) 는 성공했습니다 그런데, 30행처럼 User . findAll ({ attributes : [ 'name' , 'age' ], }); 이렇게 적어줘도 콘솔창에, 레코드들이 안나타나더라구요 그렇지만, 터미널을 확인해보면 확실히 select 문은 작동했습니다 select문이 실행되어도 콘솔창이나, 터미널에서 레코드들을 확인할 수 없는지 질문드리고 싶습니다
from collections import deque def solution () : n = int ( input ()) tree = [ list ( map ( int , input (). split ())) for _ in range (n)] m = int ( input ()) for _ in range (m) : c, d, v = map ( int , input (). split ()) tmp = deque (tree[c - 1 ]) if d == 0 : for _ in range (v) : tmp. append (tmp. popleft ()) else : for _ in range (v) : tmp. appendleft (tmp. pop ()) tree[c - 1 ] = list (tmp) s = 0 e = n - 1 res = 0 for i in range (n) : res += sum (tree[i][s : e + 1 ]) if i < n // 2 : s += 1 e -= 1 else : s -= 1 e += 1 print (res) solution () 코드는 위와 같습니다. 마지막에 곳감갯수 더하실 때 for문을 활용하여 더하셨는데 위 코드처럼 슬라이싱과 sum을 활용해도 괜찮을까요?? for문을 사용하는것이 시간복잡도가 덜 할까요??
리액티브 연산자 개요 및 생성 연산자 강의에서 질문 있습니다. TimeUtil.sleep 과 관련된 질문입니다. 이와 관련된 질문이 이미 있었고, 해당 답변도 봤는데요. (Q&A 링크 : https://inf.run/TUZc ) 뭔가 제가 알던 쓰레드 동작 방식과 차이가 있어서 재질문합니다. 이미 답변 주신 글에서는 " 이유는 interval 연산자는 내부적으로 main 쓰레드가 아닌 Computation 쓰레드에서 실행이 되기 때문에 Observable.interval.. 코드가 실행이 되기도 전에 main 쓰레드가 종료되기 때문입니다." 라고 답변을 주셨는데요. 그런데 제가 알기로는 main 쓰레드와 별개로 동작하는 쓰레드가 있으면 애플리케이션이 종료되지 않는 걸로 알고 있습니다. 예를 들어서 아래와 같은 간단한 코드를 실행하면 바로 알 수 있습니다. public static void main(String[] args) { System.out.println("main Start!"); Thread thread = new Thread(() -> { try { Thread.sleep(3000); System.out.println("wow"); } catch (InterruptedException e) { throw new RuntimeException(e); } }); thread.start(); System.out.println("main end"); } 실행해보면 main 쓰레드와 관련된 동작은 모두 끝나도 3초가 지나야만 프로세스가 종료됩니다. 혹시 답변에서 주셨던 Computation 쓰레드 는 혹시 Daemon 쓰레드인가요? 아니면 제가 놓치는 부분이 있는 건가요??
1. AcceptAsync 재귀 - 백로그 큐의 크기가 있다고 해도 초기 오픈한 게임의 경우 사용자가 지속적으로 들어올것 같은데, 이 때는 AcceptAsync 호출 시 계속 pending에서 false가 나올것 같은데 이 때는 코드적으로 조치를 취해야 겠죠? 2. ReceiveAsync - 사용자가 지속적으로 데이터를 보낼 경우 지속적으로 수신 버퍼에 데이터가 있을 수 있기 때문에 pending false 로 인한 재귀에 빠질 수 있을것 같은데 이 때도 조치를 취해야 하나요?