묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
jsp를 쓰는 이유가 궁금합니다.
MVC모델을 사용하면서 view 와 controller의 기능을 명확히 나누어 jsp는 view의 기능을 담당하게 하는거같은데 그렇다면 html 을 쓰지않는 이유는 무엇인가요??
-
미해결웹 게임을 만들며 배우는 React
안녕하세요 코드 질문이요
tictacto 컴포넌트 const reducer = (state, action) => { switch (action.type) { case CLICK_CELL: { const tableData = [...state.tableData]; tableData[action.rowIndex] = [...tableData[action.rowIndex]]; tableData[action.rowIndex][action.cellIndex] = state.turn; return { ...state, tableData, }; } case CHANGE_TURN: { return { ...state, turn: state.turn === "O" ? "X" : "O", }; } case CHECK_WINNER: { const { tableData, turn } = state; if ( tableData[action.row][0] === turn && tableData[action.row][1] === turn && tableData[action.row][2] === turn ) { return { ...state, winner: turn }; } if ( tableData[0][action.cell] === turn && tableData[1][action.cell] === turn && tableData[2][action.cell] === turn ) { return { ...state, winner: turn }; } if ( tableData[0][0] === turn && tableData[1][1] === turn && tableData[2][0] === turn ) { return { ...state, winner: turn }; } if ( tableData[0][2] === turn && tableData[1][1] === turn && tableData[2][0] === turn ) { return { ...state, winner: turn }; } } } }; td 컴포넌트 에서는 dispatch({ type: CHECK_WINNER, row: rowIndex, cell: cellIndex }); 이런식으로 주고 승자 판단을 해봤는데요. 이렇게 해도 크게 문제가 없는건가요?
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
질문있습니다
기본적으로 전달할 데이터가 별로 없을시 간단하게 파라미터로 service 계층으로 전달하여 처리하고 만약 전달할 데이터들이 많으면 service계층에서 쓰이는 DTO를 만들어 전달해줘서 처리하는걸로 이해했습니다. 이후에 공부하다가 궁금한점이 생겼습니다. 강의에서는 등록Form(MemberForm) 1개만 만들어 주었지만 보통 김영한님이 말씀하신것처럼 수정에서 쓰이는 수정Form도 따로 만들어준다고했습니다 (전달할 데이터가 다르므로) 그럼 궁금한점이 DTO에 전달할 데이터가 많은경우 이 DTO 자체를 service계층으로 전달해야하는데 제가 생각한 방법은 등록Form과 수정Form이 타입이 서로 다른 클래스이기 때문에 2개의 메서드를 만드는 방법이 생각나는데 이게 맞는건지 궁금합니다 예시) @Transactionalpublic Long join(Member등록Form memberForm) { validateDuplicateMember(memberForm); // Member 엔티티로 변환 로직 추가 memberRepository.save(member); return member.getId();} @Transactionalpublic Long join(Member수정Form memberForm) { validateDuplicateMember(memberForm); // Member 엔티티로 변환 로직 추가 memberRepository.save(member); return member.getId();}
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타입 오류시 Controller 실행 안되는 것 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 강의 정말 잘 듣고있습니다. 강의 내용 중 질문이 있습니다. 타입 오류시 Controller가 실행되지 않는다고 하셨는데 이유를 다음처럼 생각했는데 맞나요? 핸들러 어댑터에서 Argument Resolver 를 통해 @ModelAttribute Item item 처리를 하여 객체를 만들어 반환해주는데 객체를 만들고 채워넣는 과정에서 예외 발생으로 핸들러(컨트롤러) 자체가 실행이 안되는 건가요? 핸들러 실행하기 전에 파라미터 처리를 하고 파라미터를 이용해서 핸들러를 호출해 주는거니까요.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
LED_ip의 reset_n 사용방법
실습에 보면 ZYNQ processing system에 FCLK_RESET0_N pin을 LED_ip의 reset_n 에 연결 하였는데요. 요 reset_n pin은 외부 pin에 연결 된 것이 아니라서, 시스템 내에서 시그날을 줘야 할꺼 같은데..어떻게 사용할 수 있을 까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
설치과정대로 설치했는데 Connection refused error가 계속 뜹니다 ㅜㅜ
이런식으로 오류가 뜹니다 ㅜㅜ 그리고 20.04는 되는데 연결이 안되어있는거같아요. explorer.exe 할때 맨 처음에는 wsl~로 들어가는 자료창이 떻는데 이후부터는 계속 무관한 최근사용했던 다운로드 파일창이 뜹니다 어떻게 해결해야할까요.. ㅜㅜ
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
1 x 1 convoultion 관련하여 질문 드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 항상 수강자의 눈높이에 맞추어 좋은 강의 해주셔서 감사드립니다! 인셉션의 1 by 1 컨볼루션 강의 수강중에 궁금한점이 있어 질문드립니다. 인터넷에서는 1 by 1 컨볼루션이 fully connected layer와 같은 역할을 한다고 하던데 아래 사진처럼 이런식으로 연산이 이루어지는게 맞나요? 그럼 weight matrix가 총 2번 곱해진후 relu를 통해 1개의 값으로 요약된다는걸로 이해하면 되는걸까요?
-
미해결Klaytn 클레이튼 블록체인 어플리케이션 만들기 - NFT
truffle migrate --compile-all --reset --network klaytn 오류
안녕하세요, 수업을 잘 만들어 주셔서 어려운 블록체인 생태계를 조금씩 이해해 나가고 있습니다. 이전 수업은 에러가 나오면 커뮤니티나 구글에서 잘 찾아서 해결하면서 진행했습니다. 가나슈에 배포할때는 문제가 없었는데 클레이튼에 배포하는 부분에서 진행이 안됩니다. 아래에서 멈춰서 진행이 안되는데 혹시 선생님이나 아시는분은 답변해주시면 매우 몹시 감사하겠습니다 ^^ (바오밥 계정 생성 및 토큰수령 그리고 코드에 privatekey 입력완료) 크립토 유튜브 썸네일 Frontend (토큰) - 토큰발행 (중복 체크) 실행 중 발생
-
미해결PWA 시작하기 - 웹 기술로 앱을 만들자
깃헙 권한요청 드립니다.
인프런 아이디 : dhjung994@ncsoft.com 인프런 이메일 : dhjung994@ncsoft.com 깃헙 아이디 : everleasting@naver.com 깃헙 Username : dhjung994
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
TypeError: Cannot read properties of undefined (reading 'dispatch')
질문 없이 알아서 찾고싶은데 생각처럼 진짜 안되네요... 현재 강의 6분30초에서 멈춰있습니다. 에러에 dispatch 가 안된다 하여 또 보니 store 가 undefined 라고 뜹니다. 밑에 저와 똑같은 에러가 발생한 분은 오타셨고 저도 열씸히 오타인지 찾아봤지만 제대로 작성한것 같습니다 configureStore 도 잘 import 했는데 뭐가 문제일까요 서버도 다 재시작해봤는데 안돼용 // index.js import React, { useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import AppLayout from "../components/AppLayout"; import PostForm from "../components/PostForm"; import PostCard from "../components/PostCard"; import { LOAD_POSTS_REQUEST } from "../reducers/post"; import { LOAD_USER_REQUEST } from "../reducers/user"; import wrapper from "../store/configureStore"; const Home = () => { const dispatch = useDispatch(); const { me } = useSelector((state) => state.user); const { mainPosts, hasMorePosts, loadPostsLoading, retweetError } = useSelector((state) => state.post); // 자신의 게시글을 리트윗하려 할 때 useEffect(() => { if(retweetError) { alert(retweetError); } }, [retweetError]); useEffect(() => { // 현재 어느 스크롤 위치에 있는지 판단 function onScroll() { if ( window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300 ) { if (hasMorePosts && !loadPostsLoading) { // 로딩이 되고 있을 동안 loadPostsLoading 은 true 이므로 해당 코드 실행되지 x // 로딩이 끝나고 나서 loadPostsLoading 가 false 가 되면 그때 실행 const lastId = mainPosts[mainPosts.length - 1]?.id // 마지막 게시글 id // && 대신 optional chaining 활용 // => 게시물이 하나도 없을 경우 undefined.id 에러가 발생할 수 있으므로 ?. 로 방지 dispatch({ type: LOAD_POSTS_REQUEST, // 스크롤 다 내리면 다음 더미데이터 로딩해라 lastId, // 마지막 게시글 id }) } } } window.addEventListener("scroll", onScroll); return () => { window.removeEventListener("scroll", onScroll); }; }, [hasMorePosts, loadPostsLoading, mainPosts]); return ( <AppLayout> {me && <PostForm />} {/* 로그인이 된 상태에서만 포스트를 작성할 수 있음 */} {mainPosts.map((post) => ( <PostCard key={post.id} post={post} /> ))} </AppLayout> ); }; export const getServerSideProps = wrapper.getServerSideProps((context) => { context.store.dispatch({ type: LOAD_USER_REQUEST, }); context.store.dispatch({ type: LOAD_POSTS_REQUEST, }); // console.log(context); }); export default Home; // configureStore.js import { createWrapper } from "next-redux-wrapper"; import { applyMiddleware, compose, createStore } from "redux"; import { composeWithDevTools } from 'redux-devtools-extension'; import createSagaMiddleware from 'redux-saga'; import reducer from "../reducers"; import rootSaga from '../sagas'; const loggerMiddleware = ({ dispatch, getState }) => (next) => (action) => { console.log(action) // action 을 실행하기 전에 console.log() 를 한번 실행해주는 미들웨어 return next(action); } const configureStore = () => { const sagaMiddleware = createSagaMiddleware() // const middlewares = [sagaMiddleware]; const middlewares = [sagaMiddleware, loggerMiddleware]; // enhancer: 리덕스의 기능이 확장된 것 const enhancer = process.env.NODE_ENV === 'production' ? compose(applyMiddleware(...middlewares)) // 배포용 : composeWithDevTools(applyMiddleware(...middlewares)) // 개발용 const store = createStore(reducer, enhancer); store.sagaTask = sagaMiddleware.run(rootSaga); return store; // state , reducer 를 포함한 것 }; // next-redux-wrapper 로 만듦 const wrapper = createWrapper(configureStore, { debug: process.env.NODE_ENV === "development", }); export default wrapper;
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
v3, v4 컨트롤러부터 작동하지않습니다
안녕하세요? 강의 잘 듣고 있습니다. 실습 진행중 v2까지는 문제가 없다가 v3부터 해결되지않는 문제에 봉착해서 하루정도 씨름하다가 문의남깁니다. v3부터 회원가입, 회원목록 링크를 클릭하면 정상적인 URL로 이동함에도 불구하고 404에러(강의 내용 중 controller가 null이면 띄워주기로한 페이지)가 발생하여 코드 곳곳에 uri를 sout으로 찍어보았고 문제가 생기는 원인은 대략 파악하였습니다. 하지만 거기서 문제를 해결하는데 실패하여 조언을 구하고싶습니다. 1. ControllerMap의 key에 viewPath가 Param으로 전달되어 controller == null 이 됨. 2. requestURI 요청이 어디서 잘못되었는지 파악하기 위해 코드 곳곳에 sout으로 찍어본 결과, 링크를 클릭한 뒤 requestURI값이 한번은 정상 URI, 두번째는 viewPath가 포함된 URI (/front-controller/v3/members/WEB-INF/views/new-form.jsp)가 출력되었습니다. 이 과정에서 controller는 null이 되어 오류페이지를 반환하였는데 반해 프론트컨트롤러의 service메소드의 끝단에서 requestURI와 controller를 찍어본 결과 정상적으로 값이 할당되었습니다. 이 과정에서 처음엔 실습 과정에서 코드를 잘못 작성해 처음에 정상 requestURI가 할당되었지만 view로 forward된 request가 viewPath를 포함해서 requestURI가 재할당되어 controller를 불러올때 문제가 생기는 것으로 추측했지만 코드는 예제와 동일하였고 이곳저곳 살펴보다 더이상 알기 힘들어 이렇게 질문남깁니다. 혹시 몰라 build, out폴더도 지워보고 캐시도 삭제해보았는데 크게 달라지는 것은 없었습니다. 자꾸 이상한 질문들을 올려 죄송합니다 ㅠㅠ
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
[DBMS/ORM] 1:1 관계를 강제하는 주체
안녕하세요. 20세기 '선사시대'부터 프로그래밍을 한 사람입니다. 경력 단절이 있어서 늦은 때에 DBMS를 다시 보고 있고, 21세기 초반까지 없었던(제 기억에) ORM이라는 신세계를 경험하고 있습니다. MySQL 자체에서는 1:1 관계를 강제하는 방법은 두 테이블 중 FK를 가진 테이블에서, FK에 UNIQUE 제약을 거는 것으로 생각됩니다. 어디 문헌을 참조한 것이 아니라 제가 테스트를 해 본 결과 그렇다는 것입니다. Sequelize 모델 정의시 양 테이블에 각각 hasOne(), belongsTo()를 적어 1:1 관계를 정의하고 실행시켜 MySQL에 생성된 테이블을 조사해 보았는데 거기에는 FK에 UNIQUE 제약이 걸려 있지 않은 것을 확인했습니다. 이런 시험을 통해 저는, '1:1 관계를 강제하는 주체는 DBMS 가 아니라 ORM(Sequelize)이다'라는 결론을 내렸습니다. 저의 이러한 추론이 옳은 지, 특히 뭔가 오해하고 있는 부분이 있지는 않은지에 대해, Zeorcho님의 평가를 요청드립니다. 감사합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
ch[] 체크배열 관련해서 질문 있습니다.
안녕하세요. 문제를 다시 풀어보던 중 체크 배열이 꼭 필요할 까 싶어서 체크 배열 없이 문제를 풀어보았습니다. 결과 테스트케이스 세 개는 통과하였지만, 나머지 두개는 시간 초과로 실패하였습니다. 체크 배열을 사용하는 이유는 중복된 값이 나오면 if(nx >= 1 && nx <= 10000 && ch[nx]==0) 조건문을 통해 걸러져 연산 횟수를 줄여 시간복잡도를 줄이기 위함인가요?
-
해결됨[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
이벤트 리스너에서의 this에 대해 여쭙고 싶습니다
강사님 안녕하세요1. 7분에서button.addEventListener('click', function(){ concole.log(this.textContext); }); 에서의 this에 대해 질문드리고 싶습니다 이때 this가 햇갈린 이유는 다음과 같습니다2. 지난번에 드렸던 질문의 소스코드에서 var relationship1 = { name:'zero', friends : ['nero', 'hero', 'xero'], logFriends: function(){ var that = this; console.log(`this: ${this}, that: ${that}`); this.friends.forEach(function(friend){ console.log(that.name,friend); console.log(`this: ${this}, that: ${that}`); }); } } relationship1.logFriends(); 여기서 forEach 함수 내에 있는 콜백함수 funtion( ) 의 this는 호출되는 시점에 객체.function(friend){ console.log(that.name,friend); console.log(`this: ${this}, that: ${that}`); } 형식이 아닌 foreach( ) 호출 후에 콜백함수인 function( )이 단일로 호출이 되었기에 this가 window 라는 것을 이해했습니다 강의 7분 이벤트리스너에서의 this의 예시에서도 button.addEventListener('click', function(){ concole.log(this.textContext); });에서 button.function() 형식이 아닌 button.addEventListener( )가 호출된 다음 콜백함수로 function( ) 자체로만 호출이 되는건데 function( ) 안의 this가 window 가 아닌, button 을 가리키는 이유가 이해가 어려워서 질문드리고 싶습니다
-
해결됨it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
c++ [4.나이차이] 질문드립니다.
안녕하세요. c++ 로 코딩 테스트를 준비하려고 강의를 듣는 문성현이라고 합니다. 다름이 아니라 4. 나이차이 문제를 풀 때 저는 std::vector를 이용해서 풀어보려고 했는데요. int main(){ using namespace std; vector<int> v; int sum = 0; int i,N; cin >> N; for(i=0; i<N; i++){ cin >> i; v.push_back(i); } sort(v.begin(),v.end()); sum = v[N-1] - v[0]; cout << sum << endl; } 위와 같이 코드를 작성했을 때 마지막 v[N-1] - v[0]에서 v[N-1]의 값이 읽히지 않고 결과값이 그냥 -v[0]로 나오더라구요. 물론 강사님이 푸신 코드가 훨씬 간결하고 좋지만 제 코드에서 저 부분이 왜 작동하지 않는지 궁금해서요!
-
해결됨그림으로 쉽게 배우는 운영체제
PCB 및 프로세스 상태에서
안녕하세요 좋은 강의 잘 듣고 있습니다!다름이 아니오라, PCB 강의에서 1. PCB들은 연결리스트라는 자료구조로 저장된다고 하셨는데 연결리스트로 연결되는 순서가 OS가 시분할시스템을 통해 돌아가면서 실행시키는 프로세스의 순서와 동일한 것인가요? 2. PCB의 구조 중 포인터 부분에서 부모와 자식 프로세스에 대한 포인터가 있다고 하셨는데 A->B->C의 예시에서, PCB B의 경우, 부모 프로세스는 A이고 자식 프로세스는 C가 되는 것인지, 그리고 할당된 자원에 대한 포인터의 경우 할당된 자원은 메모리가 맞는 것인가요? 프로세스의 상태 강의에서, 3. 현대 OS에서는 동시에 수많은 프로세스가 실행된다고 하셨고, CPU의 경우는 매우 빠른 속도로 프로세스를 순간마다 1개씩 처리한다고도 하셨는데 그렇다면 OS의 경우에는 여러 개의 CPU로 구성되어있기 때문에 시분할 시스템을 사용하더라도 동시에 여러 개의 프로세스를 실행한다고 말할 수 있는 것인가요? 4. 프로세스의 상태 중 생성 상태는 PCB를 생성하고 메모리에 프로그램 적재를 요청한 상태라고 하셨는데 프로세스의 정의는 '프로그램이 메모리에 올라가서 실행 중인 상태'인 것으로 알고 있습니다. 그런데 지금 생성 상태는, 아직 메모리에 프로그램이 올라가지도 않은 상태라 이 상태의 프로세스는 프로세스라고 부를 수 있는지, 프로세스의 정의에 적합하지 않은 것 같아 혼란스럽습니다... 감사합니다!
-
미해결홍정모의 따라하며 배우는 C언어
안녕하세요
제가 오버플로우 제대로 공부하려고 다시 질문드립니다. 8분 30초에 unsigned 변수에 scanf함수로 음수 값인 -1024를 받아서 printf함수로 unsigned형으로 출력하는 데 4294966272 값이 나왔습니다. 교수님 께서 오버플로우 라고 하셨는데 언더 플로우 아닌가요?? unsigned 의 최소값은 0이고 언더플로우가 되어서 4294966272 가 나온거 같은데 제가 틀린건지 궁금합니다.
-
미해결윤재성의 만들면서 배우는 Spring MVC 5
37:55 질문드립니다.^^
@GetMapping("/modify") model.addAttribute("board_info_idx", board_info_idx); model.addAttribute("content_idx", content_idx); 강의중에 model 에 담긴 이걸 쓸걸 ~! 라고 하셨는대요. 수정 페이지에 히든으로 <form:hidden path="content_idx"/> 되어있는데요. 여기에 값이 왜 안들어 오는지 궁금합니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문 있습니다!!
ㄹ #include <iostream> #include<string> #include<vector> #include<deque> #include<algorithm> #include<stack> //스택 구조 사용하기 using namespace std; /////////////////////////////////////////////////////////////// //변수 정의(전역변수) int N; int sum = 0; bool arr[11]; int vec[11]; //vector<int>vec; /////////////////////////////////////////////////////////////// //내가 짠 함수(시간 오래 걸림) //void func(int k) //{ // int S = 0; // for (int i = 1; i <= N; i++) // { // if (arr[i] == true) // { // S += vec[i]; // } // } // // if (sum - S == S) // { // cout << "YES" << '\n'; // exit(0); // } // // if (k > N) // { // //cout << "NO" << endl; // return ; // } // // else // { // arr[k] = 1; // func(k + 1); // arr[k] = 0; // func(k + 1); // } //} //////////////////////////////////////////////////////////// //강의 듣고 다시 짠 함수 void func(int k, int S) { if (sum - S == S) { cout << "YES" << '\n'; exit(0); } if (k > N) return; else { func(k + 1, sum + vec[k]); func(k + 1, sum); } } ///////////////////////////////////////////////////////////// //main 함수 int main() { ios::sync_with_stdio(0); cin >> N; for (int i = 1; i <= N; i++) { cin >> vec[i]; sum += vec[i]; } func(1, 0); cout << "NO" << endl; return 0; } //
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
handleFilters를 정의해줄 때 문의 드립니다.
handleFilters를 정의해줄때, 마지막에 setFilters(newFilters)로 state을 업데이트 해주면 문제가 생기나요? 다름이아니라 지금 filtering 된 후의 데이터가 limit 숫자를 넘어서서 더보기 버튼이 활성화된 경우엔, 여기서 더 보기 버튼을 누를시에 필터링된 데이터의 다음 페이지가 아닌 원래 전체 데이터에서 limit 숫자만큼 더한 숫자번째의 데이터부터 출력이 되는데요. 보니 더보기 버튼이 호출하는 메소드는 사실 필터랑 상관없는 getProducts 다 보니 제대로 출력이 안되게 되는데요. 이것을 해결하려고 아래와같이 그냥 loadMoreHandler를 정의해줄때도 filters값을 추가하여 이 값에 Filters state값을 읽어서 넣어주었는데, 이때 Filters를 업데이트하줘야해서 setFilters를 추가해 줬습니다. 혹시 이렇게해도 상관없는 건가요? const loadMoreHandler = () => { let skip = Skip + Limit; let body = { skip: skip, limit: Limit, filters: Filters, loadMore: true } console.log(body.filters); getProducts(body); setSkip(skip); }; const handleFilters = (filters, categories) => { const newFilters = {...Filters}; newFilters[categories] = filters showFilteredResult(newFilters); setFilters(newFilters); };