묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨소프트웨어 업데이트 : Re-Programming 과정에 대한 이해
Application -> Bootloader jump
application에서 bootloader로 jump할 때, 혹시 이 부분은 MCU의 soft reset같은 기능을 의미할까요? 그래서 상위 제어기가 하위 제어기에게 reset해서 bootloader로 진입해. 이런 방식일까요?
-
해결됨소프트웨어 업데이트 : Re-Programming 과정에 대한 이해
Secondary Bootloader와 first bootloader
reprogramming 기능의 여부에 따라 secondary bootloader와 first bootloader가 나뉜 다면, MCU에는 first 아니면 secondary bootloader 중 하나를 보유하고 있는 것인가요? 아니면 bootloader의 state machine에 따라 각 기능 secondary bootloader의 역할인 reprogramming과 그 밖의 app jump용도의 first bootloader로 state machine 내의 기능적인 역할로서 존재하는건가요?
-
해결됨쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
MAC 빠른 설치와 무게감 있는 설치 차이점
안녕하세요 강사님MAC 빠른설치의 4-1. 자료를 보고 설치한 후무게감 있게 설치하는 방법의 강의 자료를 보니 같은 내용으로 생각이 되어 질문드립니다.4-1을 보고 설치했다면 무게감 있는 설치가 되었다고 생각하면 될까요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
'C\ .... ......lib'은 올바른 win32에플리케이션이 아닙니다.
'C\.... ......lib'프로그램을 시작할 수 없습니다.'C\ .... ......lib'은 올바른 win32에플리케이션이 아닙니다. 뭐 때문에 그러는 건가요
-
미해결김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션
채팅 클라이언트 문의
안녕하세요. 채팅 클라이언트 실습전에 먼저 구현을 해보았는데요.클라이언트 메인에서 스레드를 스타트 하면 그 즉시 소켓이 닫히면서 프로그램이 종료되는 오류를 겪었습니다.이는 클라이언트 메인에서 sender 스레드를 join하면서 해결하긴 했는데요.영한님의 예제에서는 start() 만 하여도 프로그램이 종료되지 않는데, 왜 저의 코드는 종료될까.... try with resources 가 문제인가 싶다가도 그건 아닐거 같은 모호한 상황에 놓여서....제가 볼 땐 도무지 보이지 않아서, 코드 리뷰와 원인 파악을 부탁드리려고 질문을 남깁니다. MessageHandler.javapackage com.hoonjin.study.java.ionetwork.network.chat.client; import lombok.RequiredArgsConstructor; import java.io.DataInputStream; import java.io.IOException; import java.net.Socket; import static com.hoonjin.study.java.util.MyLogger.log; @RequiredArgsConstructor public class MessageHandler implements Runnable { private final Socket socket; @Override public void run() { try (DataInputStream dis = new DataInputStream(socket.getInputStream())) { while (true) { String msg = dis.readUTF(); log(msg); } } catch (IOException e) { e.printStackTrace(); } } } MessageSender.javapackage com.hoonjin.study.java.ionetwork.network.chat.client; import com.hoonjin.study.java.ionetwork.network.chat.Command; import lombok.RequiredArgsConstructor; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.util.Arrays; import java.util.Scanner; import static com.hoonjin.study.java.util.MyLogger.log; @RequiredArgsConstructor public class MessageSender implements Runnable { private static final String DELIMITER = "\\|"; private final Socket socket; private boolean joined = false; @Override public void run() { Scanner scanner = new Scanner(System.in); try (DataOutputStream dos = new DataOutputStream(socket.getOutputStream())) { while (true) { log("input message with cmd: "); String msg = scanner.nextLine(); if (msg.isEmpty()) { continue; } String[] split = msg.split(DELIMITER); String cmd = split[0]; if (Arrays.stream(Command.values()).noneMatch(c -> c.value().equals(cmd))) { log("wrong command"); continue; } if (cmd.equals(Command.EXIT.value())) { dos.writeUTF(msg); joined = false; break; } else if (cmd.equals(Command.JOIN.value())) { joined = true; } if (joined) { dos.writeUTF(msg); } } } catch (IOException e) { e.printStackTrace(); } } } ChatClient.javapackage com.hoonjin.study.java.ionetwork.network.chat.client; import java.io.IOException; import java.net.Socket; public class ChatClient { private static final String SERVER = "localhost"; private static final int PORT = 23456; public static void main(String[] args) throws IOException, InterruptedException { try (Socket socket = new Socket(SERVER, PORT)) { Thread messageHandler = new Thread(new MessageHandler(socket)); Thread messageSender = new Thread(new MessageSender(socket)); messageHandler.start(); messageSender.start(); messageSender.join(); // 이 부분이 없으면 시작하자마자 즉시 종료됨 } catch (IOException e) { e.printStackTrace(); } } } Command.javapackage com.hoonjin.study.java.ionetwork.network.chat; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public enum Command { JOIN("/join"), MESSAGE("/message"), CHANGE("/change"), USERS("/users"), EXIT("/exit") ; private final String value; public String value() { return value; } } 이상입니다.확인해주시면 감사하겠습니다.새해복 많이 받으세요!
-
해결됨김영한의 실전 자바 - 기본편
메서드 추출 시 매개변수
public static void volumeUp(MusicPlayerData data) { data.volume++; System.out.println("음악 플레이어 볼륨: " + data.volume); } 반복되는 기능을 이후에 재사용하기 위하여 메서드를 추출할 때매개변수에 (MusicPlayerData data)라고 적어주셨어요. 1) 이때 [MusicPlayerData]라는 것은 클래스(틀, 설계도, 붕어빵틀)인가요?이게 맞다면,, 그럼 이건 매개변수(파라미터)안에 클래스를 넣은것이라 볼 수 있나요??? 2) MusicPlayerData 클래스 안에 있는 int 변수[volume]이라는 것은 객체(붕어빵 틀에서 만들어진 붕어빵)라고 하는 것인가요? 용어 정리가 되지 않아 질문드립니다.답변 감사합니다..
-
해결됨독하게 시작하는 C 프로그래밍
fgets() 함수 사용관련
리눅스에서는 fgets() 함수를 쓴다고 하는데, 제 컴퓨터랑 강사님 컴퓨터는 Windows 환경인데 어떻게 fget()함수가 동작하나요?
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
중단점에 대한 질문 있습니다.
실습과장에서 중단점을 클릭 했고 디버그 했는데 중단점에서 멈추지 않고 텍스트 찍어준다면 어떤 문제가 있는 것 일까요. 구글링 해도 정확한 해답을 찾지 못해 이렇게 질문을 남기게 되었습니다.
-
미해결김영한의 실전 자바 - 중급 1편
정적 중첩 클래스 질문
외부 클래스안에 정적 중첩 클래스가 있고, 중첩 클래스 안에 정적 멤버와 인스턴스 멤버들이 있다고 가정할때, 다른클래스의 메인함수에서 외부클래스의 인스턴스를 생성하면, 이 때, 외부클래스의 대한 정보와, static멤버에 대한 정보가 메서드 영역에 저장되는데, 이때 정적 중첩 클래스도 static이라 같이 메서드영역에 정보가 저장되나요? 그리고 별개로 정적 중첩 클래스의 인스턴스를 생성해야만 중첩 클래스의 인스턴스를 생성해야만 중첩 클래스의 인스턴스 멤버들을 사용할 수 있는거죠??
-
미해결
리엑트 무한스크롤기능 ㅠㅠ 5일째 안되고있어요...
useQuery를 이용해서, apple검색api를 활용한 페이지를 만들고있는데요.apple검색api에는 'page, offset'이라는 옵션이 없어요ㅠㅠ그래서 slice해서 하고있는데ㅠㅠ분명 로그는 나오는데 observerTarget의 height값을 아무리 크게 100, 500px이렇게 해도 무한스크롤기능이 안돼는데ㅠㅠ...정말 5일째 이것만 붙잡고 끙끙앓고있어요 아무리 로그찍어도 왜 안되는질 모르겠어요ㅠ...도와주세요ㅠㅠ... List컴포넌트는import React, {useEffect, useState, useRef} from 'react' import Header from './inc/Header' import Star from './Star' import {useLocation} from 'react-router-dom' import { useQuery } from '@tanstack/react-query' import { fetchSearchWord } from '../api/searchApi' const List = () => { // 로딩상태 const [isLoading, setIsLoading] = useState(true); const location = useLocation() const dataFromState = location.state?.data // search컴포넌트에서 전달받은 데이터 // 만약state에 데이터가 없다면, 캐시에서 데이터를 가져오기 위해 useQuery사용 const {data: cacheData} = useQuery( { queryKey: ['resultSearchWord', location.state?.data?.searchQuery], // 캐시된 데이터를 위한 key(location.state.data객체의 속성 중 하나가 searchQuery임) queryFn: async() => { if(!dataFromState) { // state에 데이터가 없으면 캐시에서 데이터를 불러옴 const result = await fetchSearchWord(location.state?.data?.searchQuery) return result } return dataFromState }, enabled: !!location.state?.data // 데이터가 있을때만 쿼리실행 } ) const initialData = dataFromState || cacheData // state에서 데이터가 없으면 캐시된 데이터를 사용 // INF[s] const observerRef = useRef() const [displayData, setDisplayData] = useState([]) const [currentPage, setCurrentPage] = useState(1) useEffect(() => { console.log('currentPage:', currentPage); if (initialData) { const newData = initialData.slice(0, currentPage * 10); console.log('newData:', newData); setDisplayData(newData); // 새 데이터를 덮어쓰는 방식 } }, [initialData, currentPage]); // console.log(`displayData = ${JSON.stringify(displayData)}`); useEffect(() => { if (!initialData || initialData.length === 0) { console.log('observerRef.current is null'); return; } const observer = new IntersectionObserver( (entries) => { console.log('Observer entries:', entries); // 스크롤 이벤트가 발생하는지 확인 if (entries[0]?.isIntersecting) { console.log('Target is intersecting'); setCurrentPage((prev) => { const nextPage = prev + 1; console.log('nextPage:', nextPage); // nextPage 값을 확인 if (nextPage > Math.ceil(initialData.length / 10)) { console.log('모든 데이터가 로드되었습니다.'); return prev; // 모든 데이터가 로드되었을 때는 현재 페이지 유지 } return nextPage; // 새로운 페이지로 증가 }); } }, { threshold: 0, // 더 민감하게 설정 rootMargin: '100px', // 더 넓게 감지 } ); if (observerRef.current) { observer.observe(observerRef.current); } return () => observer.disconnect(); }, [initialData, observerRef]); // INF[e] useEffect(()=> { setIsLoading(true) // 검색 결과 로딩이 끝난 후 로딩 상태를 false로 변경 const timer = setTimeout(() => { setIsLoading(false) }, 500) // 임의의 딜레이(0.5초)를 추가해 로딩 표시 return () => clearTimeout(timer) // 컴포넌트 언마운트 시 타이머 정리 }, [initialData]) if(!initialData) { return <p>No data found. Please perform a search first.</p> } if(isLoading) { return <div id="container"> <div className="stick"></div> <div className="stick"></div> <div className="stick"></div> <div className="stick"></div> <div className="stick"></div> <div className="stick"></div> <h1 className="tit-Loadng">Loading...</h1> </div> } // console.log(`displayData = ${JSON.stringify(displayData)}`); // console.log('initialData:', initialData); return ( <> <Header></Header> <div className='box-wrap'> {displayData.length === 0 && <p>Loading more items...</p>} { displayData.map((item, idx) => { const sliceImg = item.screenshotUrls.slice(0,3) // 0번째부터 2번째까지(원본배열 안건드림) return <div className='box' key={idx}> <div className='top'> <div className='left'> <img src={item.artworkUrl60} alt={item.trackName}/> <div className='center'> <span className='title'>{item.trackName}</span> {/* <span className='subtext'>{item.shortDescription}</span> */} <span className='genre'>{item.primaryGenreName}</span> </div> </div> <div className='right'><button type='button'>받기</button></div> </div> <div className='middle'><Star item={item}></Star></div> <div className='bottom'> <ul className='imgbox'> { sliceImg.map((value, idx) => { return <li key={idx}><img src={value} alt=""/></li> }) } </ul> </div> </div> }) } <div ref={observerRef} className="observerTarget"></div> </div> </> ) } export default List scss는 @charset "utf-8"; .observerTarget { height: 1px; background-color: red; position: relative; } api기능은 let currentData = []; // 받은 데이터를 저장할 변수 let currentLimit = 10; // 요청할 데이터의 개수 export const fetchSearchWord = async (query, country = 'KR', entity = 'software', media = 'software', limit = currentLimit) => { const response = await axios.get(`https://itunes.apple.com/search`, { params: { term: query, country, entity, media, limit } }); // 받은 데이터를 현재 데이터에 추가 currentData = [...currentData, ...response.data.results]; return response.data.results; }
-
해결됨기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM
MyListEx 질문드립니다.
MyListEx 생성자에서 UserData를 매개변수로 받도록 설계한 이유에 대해 궁금합니다.MyNode라는 추상 자료형(ADT)을 정의해 두셨는데, 생성자에서 특정 구현체인 UserData를 직접 받는 방식이 추상화의 장점을 제한할 수 있다고 생각합니다.또한, onRemoveNode 메서드에서도 UserData 타입으로 변환하지 않고 MyNode에 정의된 메서드만으로도 충분히 기능 구현이 가능해 보이는데, 혹시 MyListEx는 UserData를 위한 전용 자료구조로 설계된 것인가요?그렇지 않다면, MyNode를 기반으로 유연성을 유지하도록 설계하는 것이 더 적합하지 않을까 하는 생각이 들어 질문드립니다.
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
14강 입력 비활성화에 대해 궁금한 게 있습니다.
안녕하세요. 14강에서 CharacterPlayer에서 SetDead 함수를 오버라이드 하여 추가적으로 코드를 작성하셨는데, PlayerController를 가져와서 입력을 비활성화를 한 게 만약 이걸(입력 비활성화) 하지 않으면 게임이 끝난 후에도 애니메이션 동작은 하기 때문에 하신 건가요? 공격을 한다던가 회전을 할 수 있기 때문에 하신건지 궁금합니다..!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Zipkin Dependencies 화면 안나옴...
문제Zipkin Dependencies 화면만 안나옴... (Chrome 에서만 안됨... Firefox 에서는 됨...) 1) 개발자도구 확인 - NetworkYou need to enable JavaScript to run this app 확인https://support.google.com/adsense/answer/12654?hl=en위 링크를 확인해서 크롬에서 JavaScript 가 활성화 되어있는지 확인→ 이미 되어있었음... 2) 개발자 도구 확인 - ConsoleError creating WebGL context. 확인chrome://flagsANGLE graphics backend 옵션 확인 > OpenGL 설정 → 그래도 안됨… 3) 마지막..chrome://settings시스템 탭 클릭"가능한 경우 그래픽 가속 사용" 설정 켜기... → 성공… 같은 문제가 발생하시는 분들에게 도움이 되면 좋겠습니다. 참고 사이트입니다.https://help.lucid.co/hc/ko/articles/17480912789908-문제-해결-WebGLhttps://support.google.com/chrome/thread/25018979/status-could-not-create-a-webgl-context?hl=en
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
onclick이 쿼리 파라미터 전송을 하는건가요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]상품 수정 버튼을 클릭했을 때 이동하는 경로를 Thymeleaf 템플릿 엔진을 써서 작성했는데<button class="w-100 btn btn-primary btn-lg" onclick="location.href='editForm.html'" th:onclick="|location.href='@{/basic/items/{itemId}(itemId=${item.id})/edit}'|" type="button">상품 수정</button> 이런 경우에 실제 주소 뜨는걸 보면http://localhost:8080/basic/items/%7BitemId%7D(itemId=$%7Bitem.id%7D)/edit이렇게 뜨고 만약 다음과 같이 작성하면<button class="w-100 btn btn-primary btn-lg" onclick="location.href='editForm.html'" th:onclick="|location.href='@{/basic/items/{itemId}/edit(itemId=${item.id})}'|" type="button">상품 수정</button> http://localhost:8080/basic/items/2/edit 이렇게 경로가 뜨는데 왜 이런 차이가 발생하는 건가요? 제가 처음 이렇게 한 이유가(itemId=${item.id}) 이게 치환되는 주체는 {itemId}여야 하는 거고 그러면 선언 위치는 사실 상관없는 거 아닌가 해서 저렇게 했는데실제 url을 까보니까 아예 다르게 나와서 왜 이렇게 되는건지 궁금합니다. 그리고 또 하나의 궁금증으로는강사님께서 수정 부분 컨트롤러 메서드를 작성하실 때 다음과 같이 작성하셨는데public String editForm(@PathVariable Long itemId, Model model)그러면 위 코드를 보았을 때 아까 보았던 코드를 기반으로 생각했을 때th:onclick="|location.href='@{/basic/items/{itemId}/edit(itemId=${item.id})}'|" ItemId가 쿼리 파라미터 형식으로 전송되면서 서버로 넘어가는 지 그것도 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-A 관련 질문있습니다.
안녕하십니까 http://boj.kr/ec5eb19fa58d4c81a3b511d53ee8bf34위 풀이는 제가 푼 코드인데 통과는 했지만 효율적인 코드인지는 판단이 안 되어 이렇게 풀어도 괜찮은지 여쭙고자 질문 남깁니다. 그리고, 배열을 사용할 때 array를 써야할지 vector를 써야할지 감이 안 잡히는 경우가 종종 있는데.. 어떤 기준을 잡고 쓰면 좋을까요?? 좋은 강의 감사드립니다.답변 기다리겠습니다:)
-
해결됨독하게 시작하는 C 프로그래밍
문자열 입출력 코드설명에서
char szName[32] = {0} ;이렇게 변수를 만들면1바이트의 메모리가 32개가 할당된다고 이해가 되는데이게 맞나요?
-
해결됨[백문이불여일타] 데이터 분석을 위한 중급 SQL
CustomerID가 중복되서 나타나요
안녕하세요, 강의 중 선생님께서 예시들어주신 그대로 작성하면 저는 customerid 가 양쪽에 중복되서 나타나는데 왜그럴까요? 방지하기 위해서는 어떻게 해야할까요? 감사합니다.
-
미해결태블로 대시보드 기초
강의 자료 문의
안녕하세요. 해당 수업의 강의자료 어디서 다운로드 할 수 있는지가 궁금합니다. 감사합니다.
-
미해결[매출과 수익성장이 쉬워지는] 실무재무강의
수업자료는 어디서 받을수 있나요?
수업자료 있다고 되어있는데 못찾겠습니당
-
미해결이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해
C++ 클래스를 레퍼런스로 가져오는 것이 의존성이 줄어든 코드인가요?
1강 후반부 내용 질문입니다..C++ 클래스에서도 헤더 인클루드 후 StaticClass()로 지정하는 것보다 ConstructorHelpers::FClassFinder를 사용하는 것이 더 바람직한 구조인가요? 아니면 그냥 둘 다 가능하다는 예시인건가요?