묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
ssh 터널링으로 vm 접속이 안됩니다.
안녕하세요.며칠 전에 올린 질문 내용과 동일합니다.rsa 키 삭제 후 다시 만들어서 lightsail 터미널에서 authorized_keys에 새로운 rsa.pub 키를 넣어서 다시 접속해봤는데도 접속이 거부됩니다.아무리 찾아보고 권한도 600으로 줘봤지만 해결이 되지 않습니다. 진도를 못 나가고 있는데 도와주세요..ㅠㅠ
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
[배포용 Workflow 만들기] 에러 해결과 아직 남은 에러
에러 해결 infogithub secres 에 SSH_PRIVATE_KEY 저장할때 로컬에서$ cat ~/.ssh/github_id_rsa (뒤에 pub 없는거 )이렇게 조회 한걸 저장 해야 deploy.yml 에서 ssh 연결시에 인증 정보 틀림에 의한 에러가 발생하지 않았습니다 run: | ssh ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_PUBLIC_IP }} " cd sample_express git pull || exit 1 npm install || exit 1 npm run build sudo pkill node || exit 1 sudo npm run start & npx wait-on http://localhost exit "그런데 아직 에러가 남아 있는데 코드가 반영된 이후에 에러가 발생 합니다.ex)에러가 발생한 코드name: deployon: push: branches: - mainjobs: deploy: runs-on: ubuntu-latest steps: - name: Set up SSH run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa - name: Set up known hosts run: | echo "${{ secrets.SSH_KNOWN_HOSTS }}" >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts - name: SSH and deploy run: | ssh ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_PUBLIC_IP }} " cd sample-express2 sudo chown ubuntu:root .git/FETCH_HEAD sudo chmod +w .git/FETCH_HEAD chmod +w .git/FETCH_HEAD git pull || exit 1 npm install || exit 1 npm audit fix npm run build sudo pkill node || exit 1 sudo npm run start & npx wait-on http://localhost exit "
-
미해결스프링 핵심 원리 - 고급편
스레드 / traceId 구분
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]스프링부트 자체에서 찍어주는 log를 보면 스레드ID로 이미 충분히 구분이 되고 있는데, 선생님께서 진행해주시는 강의에서는 traceId를 추가해서 개발자가 직접 구분을 또 해주는 이유가 뭔지 알 수 있을까요?
-
해결됨카프카 완벽 가이드 - 코어편
log dir 관련 질문있습니다!
안녕하세요, log dir에 대해 질문이 있습니다.제가 실습을 하다보니 kafka-logs-0? 디렉토리에 많은 하위 디렉토리들이 생겨서 새로운 실습을 위해 비웠습니다. 기동 중인 모든 브로커에 대한 log dir를 초기화하였는데, 브로커에서 log dir관련 에러로그가 발생한 후 shutdown이 되길래 다시 구동을 시켰습니다. 그리고 각 브로커의 log dir를 다시 확인하니 topic 파티션 dir를 비롯해서 기존 모든 dir가 복원되어있었습니다. 제가 궁금한 점은 카프카 클러스터가 동작하면서 브로커만 있는 것이 아니니 복원 지점이 어디엔가 있을 수 있겠다고 생각은 하였는데, topic-partition의 log들은 replication을 배울 때 혹시 특정 브로커(노드)에 문제가 생길 때를 위한 복제라고 배운 것 같은데, 다른 모든 브로커도 모두 이 정보가 지워진 상태에서 어떻게 복원이 가능했던 걸까요?
-
미해결스프링 핵심 원리 - 기본편
HashMap<String, DiscountPolicy> 데이터
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.일단 LIst<DiscountPolicy>에 데이터들이 들어가있는 것을 보아 component 등록을 통해 컨테이너에 있는 것 같습니다.또한 getBeanDefinitionName을 통해서 bean으로 등록된 이름도 출력되는데hashMap<String, DiscountPolicy> 에 들어가 있는 데이터가 하나도 없어요...결국 beanDefinitionName이 HashMap에 있는 String에 들어가지 않은 거 같은데 어떻게 해결할 수 있을까요?
-
미해결Atlassian Confluence 사용법 기초
confluence 관련 질문입니다
안녕하세요 강의 수강생입니다. 강의 내용과는 다르나 혹시 스페이스, 페이지의 업로드나 업데이트 시에 이메일 알람이 수십개가 오는 데 관리자가 해당 알람을 안가게 할 수 있는 방법이 있을까요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
boards 수정 1편에서 useState() 초기값
이렇게 초기값을 설정 해주지 않았을 때, 하나의 항목만 수정하고 수정하기 버튼을 누르면 다른 항목들은 그 전 내용 그대로 띄워졌는데 그 이유가 궁금해요 !굳이 boards 수정 2편에서 한 방법이 아니더라도 이렇게 하면 문제가 되는 걸까요 ? 초기값을 설정 안해주면 안되는 이유가 있나요 ㅜㅜ강사님께서 그냥 여기 초기값을 "" 빈문자열로 바꾸고 다시 실행하시기만 하셔서 왜 이 방법을 쓰면 안되는지, boards 수정 2편의 방법과는 무슨 차이가 있는지 잘 모르겠습니다 ..!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jpa활용1 상품주문
안녕하세요. 상품 주문의 값들을 다 체크하고 제출시 해당에러가 발생합니다.list의 경로를 확인해봐도 정상 이었고, order관련 클래스에 문제가있나 확인해 보았지만 문제가 없지만 에러가 발생하여 이렇게 질문합니다.findAllByString findAllByString혹시 몰라 https://drive.google.com/file/d/1sLGd3uAEdfip5VI7JUKJuIGn2IbpA_BK/view?usp=sharing구글드라이브 업로드하여 올립니다.[THYMELEAF][http-nio-8080-exec-6] Exception processing template "order/orderList": An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/order/orderList.html]")] with root cause
-
해결됨Flutter 중급 1편 - 클린 아키텍처
Provider
강의에서 이야기해주신 것 처럼 여러개의 Provider를 사용하기위해 MultiProvider를 사용하게되는데요. 이럴 때 일부 Provider가 일부 자식위젯에서만 사용될 경우해당 자식 위젯에서만 선언하는 것과 최상위에 MultiProvider내에 전부 선언해서 사용하는 것 중 어떤 것을 선호하시나요?그리고 왜 그런지 알 수 있을까요?
-
해결됨[C#/.NET 8.0]어서와, Blazor Server는 처음이지?
Grid 컴포넌트 사용에 대해서 질문있습니다.
asp.net 의 WebForm 에서도 DataGrid, DataList, Repeator 등이 있었습니다. DataGrid, DataList 는 기능이 많아 보이지만, 기능이 많은 것만큼 렌더링 된 데이터의 사이즈가 너무 커져서 실무에서는 속도 문제로 결국 html 태그를 적극 활용하면서 Repeator를 사용했었습니다.혹시 QuickGrid , RadzenGrid 등도 그런 문제가 발생하는 것은 아닐까 해서요...샘플로 작성되는 weather 페이지처럼 html 태그가 결국 사용되는게 아닐까 싶은데요...결국은 모든 데이터를 다 조회해서 갖고 있는게 아니라, 해당 페이지에 대한 데이터만 갖고, 페이징 네비게이션 부분은 별도로 코딩하게 된다면...그리드의 정렬, 필터 기능은 사용 못하는게 아닐까 싶습니다.혹시 속도 비교를 해 놓은 것이 있는지 궁금합니다.제가 아직 WASM 방식과 서버 방식을 잘 이해를 못하고 있는데요,제가 기존에 했었던 방식(asp.net webform, mvc)은 서버 방식이었을 것으로 이해하고 있습니다.WASM 방식이 된다면 Grid 사용이 달라지는 건가요???
-
미해결이득우의 언리얼 프로그래밍 Part3 - 네트웍 멀티플레이 프레임웍의 이해
10번 강의 질문 있습니다
안녕하십니까. 질문 남기기 앞서 강의 정말 잘 보고 있다고 말씀 드리고 싶습니다. 제가 궁금한 부분은 10번 강의에서 공격에 맞았을 때 검증(Validation) 하는 부분입니다. bool AABCharacterPlayer::ServerRPCNotifyHit_Validate(const FHitResult& HitResult, float HitCheckTime) { return (HitCheckTime - LastAttackStartTime) > AcceptMinCheckTime; } 공격 시작 타이밍과 몽타주에 배치한 트리거 함수 간의 간격을 검증하기 위한 것으로 이해했습니다. 검증 코드에서 LastAttackStartTime이란 변수가 쓰였고, LastAttackStartTime이란 변수가 아래 코드의 ServerRPCAttack에서 인자로 받은 AttackStartTime 변수로 세팅되는 것을 확인했습니다. void AABCharacterPlayer::ServerRPCAttack_Implementation(float AttackStartTime) { AB_LOG(LogABNetwork, Log, TEXT("%s"), TEXT("Begin")); bCanAttack = false; OnRep_CanAttack(); AttackTimeDifference = GetWorld()->GetTimeSeconds() - AttackStartTime; AB_LOG(LogABNetwork, Log, TEXT("LagTime : %f"), AttackTimeDifference); AttackTimeDifference = FMath::Clamp(AttackTimeDifference, 0.0f, AttackTime - 0.01f); FTimerHandle Handle; GetWorld()->GetTimerManager().SetTimer(Handle, FTimerDelegate::CreateLambda([&] { bCanAttack = true; OnRep_CanAttack(); } ), AttackTime - AttackTimeDifference, false, -1.0f); LastAttackStartTime = AttackStartTime; PlayAttackAnimation(); //MulticastRPCAttack(); for (APlayerController* PlayerController : TActorRange<APlayerController>(GetWorld())) { if (PlayerController && GetController() != PlayerController) { if(!PlayerController->IsLocalController()) { AABCharacterPlayer* OtherPlayer = Cast<AABCharacterPlayer>(PlayerController->GetPawn()); if (OtherPlayer) { OtherPlayer->ClientRPCPlayAnimation(this); } } } } } LastAttackStartTime은 서버의 변수이고 그렇기 때문에 여러 클라이언트가 동시에 공격을 한다면 LastAttackStartTime이 덮어 씌워질 수 있다고 생각하는데 그렇게 되면 검증하는 부분에서 문제가 생길 수도 있다고 생각합니다. 질문 : 여러 클라이언트가 동시에 공격 시 LastAttackStartTime이 덮어 씌워지는 것이 맞는가?
-
미해결처음 만난 리액트(React)
Chapter_10 수업에서 했던 예시를 스스로 구현하고 싶은데 방법을 모르겠어요
const numbers = [1, 2, 3, 4, 5]; const listItems = numbers.map((a) => <li>{a}</li>); ReactDOM.render(<ul>{listItems}</ul>, document.getElementById('root'));이 예시를 강사님처럼 리액트로 만들고 싶은데 이때 index.js를 어떻게 해야하나요?#수업질문
-
미해결
이전 로그인 시간 팝업
안녕하세요 영한님 수업을 듣다가 관리자 페이지를 만들어보면서 듣고 있는데요제가 이것저것 찾아보면서 다른 기능들을 넣으면서 공부를 하고 있습니다.하지만 의문점이 하나가 생겼습니다. 로그인, 로그아웃까지 구현을 했으나,이전에 로그인한 시간 팝업에 띄우고 싶은데 Session으로 하면 정해진 시간까지 Session이 동작하여서 이것을 쓰면 안 될 것 같은데요 어떤 기능을 공부해서 사용해야 하나요?
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
비연결성에 대해서
tcp/ip는 요청을하고 요청이끝나면 연결을 끊어버린다고 하셨는데요 이것의 정확한 뜻이 url요청을하고 응답을하면 연결을 끊어버린다고 이해하면 정확할까요?
-
해결됨
안드로이드 스튜디오에서 새 프로젝트를 만들 때마다 에러가 떠요
An issue was found when checking AAR metadata: 1. Dependency 'androidx.activity:activity:1.8.0' requires libraries and applications that depend on it to compile against version 34 or later of the Android APIs. :c11 is currently compiled against android-33. Also, the maximum recommended compile SDK version for Android Gradle plugin 7.2.2 is 33. Recommended action: Update this project's version of the Android Gradle plugin to one that supports 34, then update this project to use compileSdkVerion of at least 34. Note that updating a library or application's compileSdkVersion (which allows newer APIs to be used) can be done separately from updating targetSdkVersion (which opts the app in to new runtime behavior) and minSdkVersion (which determines which devices the app can be installed on).처음에는 에러가 15개 떴는데 지금은 build.geadle 에서 compileSdk 32 에서 compileSdk 33 으로 바꾸니 이렇게 에러가 나오네요 혹시 해결 할 수 있으신 분 있나요?
-
미해결이펙티브 자바 완벽 공략 1부
[과제] EnumMap과 EnumSet가 HashMap과 HashSet보다 효율적인 이유
EnumMap 특징 - 열거형 크기만큼 배열이 생겨나며, ordinal에 따라 index가 정해진다. - 배열을 사용하기 때문에 연산속도가 빠르다. - 열거형 순서에 따라 데이터가 정렬된다. - 키의 순서대로 순회할 때 효율적이다. EnumSet 특징 - 비트 벡터를 통해 공간과 성능을 최적화한다. - 다양한 집합 연산(교집합, 차집합, 합집합 등)을 제공한다.* 비트 벡터란 비트 배열로 구성된 자료구조, 0이면 집합에 미포함, 1이면 집합에 포함을 의미한다
-
미해결Java/Spring 테스트를 추가하고 싶은 개발자들의 오답노트
패키지 의존성을 확인해보는법?
해당 챕터를 들고 궁금한 점이 있어 문의를 남깁니다. 7분를 들어보면 패키지 의존성을 확인해보라는 말이 나오는데 그런 의존성을 파악하는 툴 같은게 있는건가요?
-
해결됨코딩테스트 [ ALL IN ONE ]
postorder 문제 문의드립니다!
안녕하세요!현재 postorder 트리 문제 풀었는데요!선생님이 공유해주신 코드가class Solution(object): def lowestCommonAncestor(self, root, p, q): if root == None: return None left = self.lowestCommonAncestor(root.left, p, q) right = self.lowestCommonAncestor(root.right, p, q) if root == p or root == q: return root elif left and right: return root return left or right이렇게 인데 class에 대해서 잘 몰라서 그런지 이후로 어떻게 해야 답이 나오는지 모르겠습니다ㅜㅜresult = Solution([3, 5, 1, 6, 2, 0, 8, None, None, 7, 4], 6, 4)이렇게 했는데 에러가 나는데 어떻게 해야할까요?++ 선생님 파이썬 전자책으로 공부하고 했는데, 제가 잘 못찾아서 그런지 그때 클래스에 대해서 보지 못한것 같은데 설명해주셨으면 좋겠어요🙏🙏
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 프레임워크 동작 구조 정리
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요 !![1] 요청 시에 @RequestBody와 HttpEntity를 안 쓰는 경우 , 응답 시에 @ResponseBody와 HttpEntity를 안 쓰는 경우[2] 요청 시에 @RequestBody와 HttpEntity를 쓰는 경우 , 응답 시에 @ResponseBody와 HttpEntity를 쓰는 경우이 두 가지 케이스로 나누어 스프링 프레임워크의 동작 구조를 정리해보았는데 제가 이해하는 게 맞는지 너무 길지만 한번만 피드백해주시면 감사하겠습니다 !![1]요청 : 파라메터 타입에 @RequestBody X 이거나 HttpEntity X의 경우응답 : 반환 값에 @ResponseBody X 이거나 HttpEntity X의 경우 1. 클라이언트의 요청 2. DispatcherServlet를 호출(urlPatterns = /* 경로이기 때문) 3. HandlerMapping의 가장 우선순위에 있는 구현체인 RequestMappingHandlerMapping을 통해 @Controller이 붙은 클래스의 객체를 매핑 정보로 활용 4. doDispatch()의 getHandler()에서 해당 매핑 정보의 컨트롤러 객체 반환 5. doDispatch()의 getHandlerAdapter()을 통해 HandlerAdapter을 호출 후 컨트롤러를 처리할 수 있는 어댑터 있는지 검증(supports()) 후 어댑터 호출(handle()) 6. 이때 컨트롤러는 @Controller의 @RequestMapping이 붙어있으므로 HandlerAdapter의 가장 우선순위의 RequestMappingHandlerAdapter 어댑터 구현체가 호출되는 것! 7. 어댑터는 컨트롤러의 파라메터에 해당되는 객체가 ArgumentResolver의 구현체로 존재하는지 검증(supportsParameter()) 후 존재하면 생성(resolveArgument()) 8. 어댑터는 생성된 객체를 컨트롤러의 파라메터에 주입하면서 컨트롤러 호출 9. 컨트롤러는 로직 수행 후 return 값(객체)을 어댑터에 반환 10. 어댑터는 ResultValueHandler 호출하면서 반환값에 해당되는 객체가 존재하는지 검증(supportsReturnType()) 후 존재하면 생성(handleReturnValue()) 11. 어댑터는 생성된 객체 및 논리적 뷰 이름으로 초기화된 ModelAndView 객체 생성 후 DispatchServlet에 반환 12. DispatchServlet에서 ViewResolver에 논리적 뷰 이름을 넘겨주면서 호출 13. ViewResolver에선 논리적 뷰 이름을 물리적 뷰 경로로 바꿔주고 그 값으로 초기화된 View 객체 반환 14. DispatchServlet에서 View객체 이용해서 render() 호출 15. JSP 뷰 템플릿이었으면 render()에서 JSP 코드로 포워드 후 랜더링하고 나머지 타임리프 같은 뷰 템플릿이면 render() 받자마자 바로 화면 랜더링 [2]요청 : 파라메터 타입에 @RequestBody O 이거나 HttpEntity O의 경우응답 : 반환 값에 @ResponseBody O 이거나 HttpEntity O의 경우 1. 클라이언트의 요청 2. DispatcherServlet를 호출(urlPatterns = /* 경로이기 때문) 3. HandlerMapping의 가장 우선순위에 있는 구현체인 RequestMappingHandlerMapping을 통해 @Controller이 붙은 클래스의 객체를 매핑 정보로 활용 4. doDispatch()의 getHandler()에서 해당 매핑 정보의 컨트롤러 객체 반환 5. doDispatch()의 getHandlerAdapter()을 통해 HandlerAdapter을 호출 후 컨트롤러를 처리할 수 있는 어댑터 있는지 검증(supports()) 후 어댑터 호출(handle()) 6. 이때 컨트롤러는 @Controller의 @RequestMapping이 붙어있으므로 HandlerAdapter의 가장 우선순위의 RequestMappingHandlerAdapter 어댑터 구현체가 호출되는 것! 7. 어댑터는 컨트롤러의 파라메터에 해당되는 타입의 객체가 ArgumentResolver의 구현체로 존재하는지 검증(supportsParameter()) 8. ArgumentResovler이 검증하던 중 컨트롤러의 파라메터 타입이 @RequestBody 혹은 HttpEntity임을 감지하고 RequestResponseBodyMethodProcessor 구현체가 동작하며 HTTP 메시지 컨버터 호출 9. RequestResponseBodyMethodProcessor 구현체는 HTTP 메시지 컨버터의 canRead()를 통하여 파라메터의 클래스 타입과 미디어 타입(Content-Type)을 검증하고 조건 만족하면 read()를 통해 HTTP 메세지 바디에 있는 데이터 변환 10. RequestResponseBodyMethodProcessor 구현체는 변환된 객체를 어댑터에 반환 11. 어댑터에선 반환된 객체를 컨트롤러의 파라메터에 주입하면서 컨트롤러 호출 12. 컨트롤러는 로직 수행 후 return 값(객체)을 어댑터에 반환 13. 어댑터는 ResultValueHandler 호출하면서 해당 반환값이 존재하는지 검증(supportsReturnType()) 14. 이때 ResultValueHandler에선 컨트롤러의 반환값이 @ResponseBody , HttpEntity임을 감지 후 RequestResponseBodyMethodProcessor 구현체가 동작하며 HTTP 메시지 컨버터를 호출 15. RequestResponseBodyMethodProcessor구현체는 HTTP 메시지 컨버터의 canWrite()를 통하여 파라메터 클래스 타입과 HTTP 요청 메시지에서의 미디어 타입(Accept)을 검증하고 조건 만족하면 write() 수행 16. write()에선 데이터를 변환하여 HTTP 응답 메세지 바디에 삽입 후 응답 메세지 클라이언트에게 반환감사합니다 !! 그리고 만약 제가 정리한 부분이 맞다면 HTTP API 방식으로 동작하는 경우 맨 마지막 16번에서 write() 이후에 만들어진 응답 메세지를 어디서 클라이언트에게 반환하는 건지 궁금합니다 !
-
해결됨[쥬신게임아카데미 버거쌤] 완전 초보자를 위한 게임 C++
컴파일러 셋팅 및 코딩의 시작에서
폰트 자료 올려두셨다는 곳이 어디예요...????