묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
안녕하세요 선생님~~
.SearchPage폴더 안의 index.js의 렌더부분에서 질문이 있습니다 rafce단축키를 사용하면 자동으로 리턴부분이 만들어지고 리턴 밑에 렌더할 태그들을 만들어서 렌더링을 하였는데(기존에 하던 방식) 검색페이지 부분은 함수를 따로 만들어서 함수 안에 렌더부분을 정의를 하고 밖에서 그 함수를 리턴을 하여 렌더링을 하였는데 이렇게 한 이유가 있을까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
faker사용시 이미지가 동일하게 출력되는데 오류가 있는걸까요?
안녕하세요 제로초님 강의 잘 듣고있습니다. faker를 사용해서 더미데이터를 출력해봤는데 제로초님과는 다르게 이미지가 같은 이미지로 출력되더라고요 제가 코드를 잘못작성해서인건지, 아니면 faker라이브러리의 문제인건지 혹시 이유를 알 수 있을까요? // pages/index.js import React, { useCallback, useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Button } from 'antd'; import { PlusCircleOutlined } from '@ant-design/icons'; import Link from 'next/link'; import { HomeWrapper, HomeLogoHeader, HomeLogoText, PageMainText, PageSubText, HomeInputWrapper } from '../pagestyles'; import { LOAD_POSTS_REQUEST } from '../reducers/post'; import AppLayout from '../components/AppLayout'; import PostList from '../components/HomePost/PostList'; const Home = () => { const dispatch = useDispatch(); const { me } = useSelector((state) => state.user); const { mainPosts, hasMorePosts, loadPostsLoading } = useSelector((state) => state.post); const onSearch = useCallback((value) => { console.log(value); }, []); useEffect(() => { dispatch({ type: LOAD_POSTS_REQUEST }); }, []); useEffect(() => { function onScroll() { console.log(window.scrollY, document.documentElement.clientHeight, document.documentElement.scrollHeight); if (window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300) { if (hasMorePosts && !loadPostsLoading) { dispatch({ type: LOAD_POSTS_REQUEST }); } } }; window.addEventListener('scroll', onScroll); return () => { window.removeEventListener('scroll', onScroll); } }, [hasMorePosts, loadPostsLoading]); return ( <AppLayout> <HomeWrapper> <HomeLogoHeader> <HomeLogoText> <PageMainText>Recipe.io</PageMainText> <PageSubText>Have a delicious meal today</PageSubText> </HomeLogoText> {me && <Link href='/posting'><a><Button type='primary' size='large' icon={<PlusCircleOutlined />} >Create Recipe</Button></a></Link>} </HomeLogoHeader> <HomeInputWrapper placeholder="Search for Recipe" size='large' allowClear="true" enterButton onSearch={onSearch} /> <PostList mainPosts={mainPosts} /> </HomeWrapper> </AppLayout> ) }; export default Home; // reducers/post.js import produce from 'immer'; import shortId from 'shortid'; import { faker } from '@faker-js/faker'; export const initialState = { mainPosts: [], imagePaths: [], hasMorePosts: true, loadPostsLoading: false, loadPostsDone: false, loadPostsError: null, addPostLoading: false, addPostDone: false, addPostError: null, removePostLoading: false, removePostDone: false, removePostError: null, addCommentLoading: false, addCommentDone: false, addCommentError: null, removeCommentLoading: false, removeCommentDone: false, removeCommentError: null, }; export const generateDummyPost = (num) => Array(num).fill().map(() => ({ id: shortId.generate(), User: { id: shortId.generate(), nickname: faker.name.findName(), }, title: faker.lorem.slug(), desc: faker.lorem.sentence(), content: [{ ingredient: faker.lorem.paragraphs(), }, { recipes: faker.lorem.paragraphs(), }, { tips: faker.lorem.paragraphs(), }], Images: [{ id: shortId.generate(), src: faker.image.food(), }, { id: shortId.generate(), src: faker.image.food(), }, { id: shortId.generate(), src: faker.image.food(), }], tag: '맛있을것같아요 #hashtag1 짱짱맨!! #hashtag2 ##hashtag3', Comments: [{ id: shortId.generate(), User: { id: shortId.generate(), nickname: faker.name.findName(), }, content: faker.lorem.sentence(), }, { id: shortId.generate(), User: { id: shortId.generate(), nickname: faker.name.findName(), }, content: faker.lorem.sentence(), }] })); export const dummyPost = (data) => ({ id: data.id, User: { id: 2, nickname: 'Mirrer', }, title: data.content.title, desc: data.content.desc, content: [{ ingredient: data.content.ingredient, }, { recipes: data.content.recipes, }, { tips: data.content.tips, }], tag: data.content.tags, Images: [{ id: shortId.generate(), src: faker.image.food(), }, { id: shortId.generate(), src: faker.image.food(), }], Comments: [{ id: shortId.generate(), User: { id: shortId.generate(), nickname: faker.name.findName(), }, content: faker.lorem.sentence(), }], }); const dummyComment = (data) => ({ id: data.id, User: { id: 2, nickname: 'Mirrer', }, content: data.commentText, }); export const LOAD_POSTS_REQUEST = 'LOAD_POSTS_REQUEST'; export const LOAD_POSTS_SUCCESS = 'LOAD_POSTS_SUCCESS'; export const LOAD_POSTS_FAILURE = 'LOAD_POSTS_FAILURE'; export const ADD_POST_REQUEST = 'ADD_POST_REQUEST'; export const ADD_POST_SUCCESS = 'ADD_POST_SUCCESS'; export const ADD_POST_FAILURE = 'ADD_POST_FAILURE'; export const REMOVE_POST_REQUEST = 'REMOVE_POST_REQUEST'; export const REMOVE_POST_SUCCESS = 'REMOVE_POST_SUCCESS'; export const REMOVE_POST_FAILURE = 'REMOVE_POST_FAILURE'; export const ADD_COMMENT_REQUEST = 'ADD_COMMENT_REQUEST'; export const ADD_COMMENT_SUCCESS = 'ADD_COMMENT_SUCCESS'; export const ADD_COMMENT_FAILURE = 'ADD_COMMENT_FAILURE'; export const REMOVE_COMMENT_REQUEST = 'REMOVE_COMMENT_REQUEST'; export const REMOVE_COMMENT_SUCCESS = 'REMOVE_COMMENT_SUCCESS'; export const REMOVE_COMMENT_FAILURE = 'REMOVE_COMMENT_FAILURE'; export const addPostRequestAction = (data) => { return { type: ADD_POST_REQUEST, data, } }; export const removePostRequestAction = (data) => { return { type: REMOVE_POST_REQUEST, data, } }; export const addCommentRequestAction = (data) => { return { type: ADD_COMMENT_REQUEST, data, } }; export const removeCommentRequestAction = (data) => { return { type: REMOVE_COMMENT_REQUEST, data, } }; const reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case LOAD_POSTS_REQUEST: draft.loadPostsLoading = true; draft.loadPostsDone = false; draft.loadPostsError = null; break; case LOAD_POSTS_SUCCESS: draft.loadPostsLoading = false; draft.loadPostsDone = true; draft.mainPosts = action.data.concat(draft.mainPosts); draft.hasMorePosts = draft.mainPosts.length < 30; break; case LOAD_POSTS_FAILURE: draft.loadPostsLoading = false; draft.loadPostsError = action.error; break; case ADD_POST_REQUEST: draft.addPostLoading = true; draft.addPostDone = false; draft.addPostError = null; break; case ADD_POST_SUCCESS: draft.addPostLoading = false; draft.addPostDone = true; draft.mainPosts.unshift(dummyPost(action.data)); break; case ADD_POST_FAILURE: draft.addPostLoading = false; draft.addPostError = action.error; break; case REMOVE_POST_REQUEST: draft.removePostLoading = true; draft.removePostDone = false; draft.removePostError = null; break; case REMOVE_POST_SUCCESS: draft.mainPosts = draft.mainPosts.filter((v) => v.id !== action.data); draft.removePostLoading = false; draft.removePostDone = true; break; case REMOVE_POST_FAILURE: draft.removePostLoading = false; draft.removePostError = action.error; break; case ADD_COMMENT_REQUEST: draft.addCommentLoading = true; draft.addCommentDone = false; draft.addCommentError = null; break; case ADD_COMMENT_SUCCESS: { const post = draft.mainPosts.find((v) => v.id === action.data.postId); post.Comments.unshift(dummyComment(action.data)); draft.addCommentLoading = false; draft.addCommentDone = true; break; } case ADD_COMMENT_FAILURE: draft.addCommentLoading = false; draft.addCommentError = action.error; break; case REMOVE_COMMENT_REQUEST: draft.removeCommentLoading = true; draft.removeCommentDone = false; draft.removeCommentError = null; break; case REMOVE_COMMENT_SUCCESS: { // action.data = { postId: 1, commentId: '댓글id'} const post = draft.mainPosts.find((v) => v.id === action.data.postId); draft.removeCommentLoading = false; draft.removeCommentDone = true; break; } case REMOVE_COMMENT_FAILURE: draft.removeCommentLoading = false; draft.removeCommentError = action.error; break; default: break; } }); }; export default reducer; // sagas/post.js import { all, fork, delay, put, takeLatest } from 'redux-saga/effects'; import shortId from 'shortid'; // import axios from 'axios'; import { LOAD_POSTS_REQUEST, LOAD_POSTS_SUCCESS, LOAD_POSTS_FAILURE, generateDummyPost, ADD_POST_REQUEST, ADD_POST_SUCCESS, ADD_POST_FAILURE, REMOVE_POST_REQUEST, REMOVE_POST_SUCCESS, REMOVE_POST_FAILURE, ADD_COMMENT_REQUEST, ADD_COMMENT_SUCCESS, ADD_COMMENT_FAILURE, REMOVE_COMMENT_REQUEST, REMOVE_COMMENT_SUCCESS, REMOVE_COMMENT_FAILURE, } from '../reducers/post'; import { BOARD_ADD_POST_TO_ME, BOARD_REMOVE_POST_OF_ME } from '../reducers/user'; // function addPostAPI(data) { // return axios.post('/api/post', data); // } function* loadPosts(action) { try { // const result = yield call(addPostAPI, action.data); yield delay(1000); yield put({ type: LOAD_POSTS_SUCCESS, data: generateDummyPost(10) }) } catch(err) { yield put({ type: LOAD_POSTS_FAILURE, data: err.response.data }) } } // function addPostAPI(data) { // return axios.post('/api/post', data); // } function* addPost(action) { try { // const result = yield call(addPostAPI, action.data); const id = shortId.generate(); yield delay(1000); yield put({ type: ADD_POST_SUCCESS, data: { id, content: action.data, } }) yield put({ type: BOARD_ADD_POST_TO_ME, data: { id, content: action.data, } }) } catch(err) { yield put({ type: ADD_POST_FAILURE, data: err.response.data }) } } // function addPostAPI(data) { // return axios.post('/api/post', data); // } function* removePost(action) { try { // const result = yield call(addPostAPI, action.data); yield delay(1000); yield put({ type: REMOVE_POST_SUCCESS, data: action.data, }) yield put({ type: BOARD_REMOVE_POST_OF_ME, data: action.data, }) } catch(err) { yield put({ type: REMOVE_POST_FAILURE, data: err.response.data }) } } // function addCommentAPI(data) { // return axios.post(`/api/post/${data.postId}/comment`, data); // } function* addComment(action) { const id = shortId.generate(); try { // const result = yield call(addCommentAPI, action.data); yield delay(1000); yield put({ type: ADD_COMMENT_SUCCESS, data: { id, postId: action.data.postId, commentText: action.data.commentText, } }) } catch(err) { yield put({ type: ADD_COMMENT_FAILURE, data: err.response.data }) } } // function addPostAPI(data) { // return axios.post('/api/post', data); // } function* removeComment(action) { try { // const result = yield call(addPostAPI, action.data); yield delay(1000); yield put({ type: REMOVE_COMMENT_SUCCESS, data: { postId: action.data.postId, commentId: action.data.commentId, }, }) } catch(err) { yield put({ type: REMOVE_COMMENT_FAILURE, data: err.response.data }) } } function* watchLoadPosts() { yield takeLatest(LOAD_POSTS_REQUEST, loadPosts); } function* watchAddPost() { yield takeLatest(ADD_POST_REQUEST, addPost); } function* watchRemovePost() { yield takeLatest(REMOVE_POST_REQUEST, removePost); } function* watchAddComment() { yield takeLatest(ADD_COMMENT_REQUEST, addComment); } function* watchRemoveComment() { yield takeLatest(REMOVE_COMMENT_REQUEST, removeComment); } export default function* postSaga() { yield all([ fork(watchLoadPosts), fork(watchAddPost), fork(watchRemovePost), fork(watchAddComment), fork(watchRemoveComment), ]); }
-
미해결C# 입문부터 Xamarin Forms(자마린 폼즈) + Maui(마우이) 안드로이드, 윈도우 앱(UWP) 동시에 만들기
if (i > 10) thread1.Abort(); Console.WriteLine("첫번째 쓰레드 {}",i); 에서 오류가 발생해요
(사진)
-
해결됨Flutter 앱 개발 기초
파이어베이스 Auth에러
Auth코드 작성후 계속하여 에러가 발생합니다. /D:/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-3.3.4/lib/src/recaptcha_verifier.dart:57:27: Error: Required named parameter 'auth' must be provided. _factory.delegateFor( 구글에 검색해봐도 나오지 않은내용이라 질문드립니다. 에러코드 링크 들어가보니 return RecaptchaVerifier._( _factory.delegateFor( container: container, size: size, theme: theme, onSuccess: onSuccess, onError: onError, onExpired: onExpired, ), 로 나와있고 에러표시는 별도로 없습니다.
-
미해결Redux vs MobX (둘 다 배우자!)
로깅 미들웨어 질문입니다
안녕하세요. 제로초님 항상 잘 보고 있습니다. 강의 중에 궁금한게 있어 질문드립니다. 이런식으로 계속해서 로그가 찍히는데 dispatch 전에 로그를 찍는 건 알겠으나, firstMiddleware를 실행하는 dispatch 호출이 store.dispatch(logIn({ id: 1, name: 'zerocho', admin: true,})); 로 하나 뿐이니, firstMiddleware 미들웨어는 처음에 한번 (dispatch, getState) => { // async action dispatch(logInRequest(data)); try { setTimeout(() => { dispatch(logInSuccess({ userId: 1, nickname: 'zerocho' })); }, 2000); } catch (e) { dispatch(logInFailure(e)); } };}; 를 로그 찍어주고 기능이 종료되며, thunkMiddleware로 넘어가는것 아닌가요? thunkMiddleware가 실행되면서 내부 action이 dispatch 될때마다 어떻게 계속 로그가 찍히는지 궁금합니다. 아니면 혹시, 미들웨어는 일회성으로 한번 실행되고 끝나는게 아닌, dispatch 될때마다 실행되는 건가요?
-
미해결스프링 핵심 원리 - 고급편
로드맵
스프링 기본에서 db2편까지 다들으면 바로 jpa로드맵 강의 들어도 되나요? 토이프로젝트를 하고싶은데 고급편은 언제쯤 들어야 할지 고민되네요...
-
해결됨실제 이력서 사례로 알아보는 [합격하는 이력서] 작성 가이드
안녕하세요 워니님 이력서 관련하여 질문드립니다.
안녕하세요. 워니님의 강의를 듣고 이직을 준비하고 있는 한 주니어 개발자입니다. 먼저 양질의 강의를 제공해주셔서 감사하다는 인사를 올립니다. 현재 사내에서 진행한 업무와 성과에 관련하여 작성을 진행하고 있습니다. 상품 리스트의 로딩 성능 개선으로 로딩시간 20초 → 1초 문제점 : 기존에 모든 상품 리스트를 한번에 뿌려주는 방식으로 인한 과부하 해결점 : 첫 로딩시 20개의 상품만 로딩 , 이후 Infinite Scroll을 적용하여 사용자의 행동에 따라 게시글을 불러오도록 변경 위와 같이 진행한 업무 , 성과 및 제가 어떻게 문제를 경험하게 되었고 그에 따른 해결점을 작성하는 방식을 사용하고있습니다. 이렇게 작성하다보니 이력서 글의 양이 너무 많아지는 것 같아 부정적인 시선으로 볼진 않을지 걱정이 됩니다. 워니님 같은 경우는 위와 같은 스타일을 어떻게 생각하시는지 궁금합니다.
-
미해결
[스프링 부트 테스트 질문] 스프링 어플리케이션 컴포넌트에 대한 테스트 방법 ( mock 을 안쓰는게 맞나요? )
질문 상황 1) 스프링 어플리케이션에 대한 테스트를 진행할 때, @SpringBootTest 를 적용함 2) 이 경우 테스트 코드 실행 시, 스프링 실행 환경에 필요한 객체들을 생성 3) 스프링 컴포넌트로 선언할 경우 객체 생성에 필요한 코드가 준비되어 있지 않은 경우, 스프링 부트가 실행되는 과정에서 에러가 발생-> 강의의 예시에선 StudyService 에 @Service 어노테이션을 붙이는 경우, private final MemberService memberService 를 불러오는 과정에서 에러가 발생.( Error creating bean with name 'studyService' defined in file ..... No qualifying bean of type 'app.member.MemberService' available) ------------------------------------------------------------------------------------------ 질문 : 스프링 부트 컴포넌트에 대한 mockito 사용방법 구체적인 질문 1) 위의 상황을 제가 잘 이해한게 맞나요 ? 2) 스프링 컴포넌트에 대한 테스트 방법을 대략적으로 알려주세요 ex 1) 일반적으로 객체 생성에 필요한 모든 클래스의 구현부가 나오기 전까지 테스트 하지 않는다. 따라서 mockito 사용에 대해 고민할 필요가 없다.ex 2) @Component , @service 어노테이션떼고 하고 싶은 테스트만 먼저 진행 하라3) 선생님 강의 중에 스프링 어플리케이션에 대한 전반적인 작업 과정을 관찰하고 싶으면 "백기선 - 스프링 기반 rest api 개발" 을 보면 될까요 ? 제가 아직 테스트 강의를 끝까지 안봐서 놓치고 있는 설명이 있을수도 있습니다. 유튜브 잘 보고 있어요. 구독잡니다수고하세요 :)
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
데이터 베이스 생성 후 postman의 get products에서 send를 누른 뒤 오류
안녕하세요 그랩님! 강의 잘 듣고 있습니다. postman에서 create product에서 제품 정보들을 입력하고, DB Browser for SQLite에 데이터가 아래와 같이 입력된 것을 확인했습니다. 이후 포스트맨에서 get products로 들어가 send를 누르니 아래와 같이 '모든 필드를 입력해주세요' 라는 문구가 뜹니다. vscode에서 name, description,price,seller 이 네가지가 notNull로 설정되어 있어서 이 네가지 값이 잘 입력되지 않았을 때 해당 에러 문구가 뜨는 것일 텐데 소스 코드를 보면서 다른 점을 찾아봐도 딱히 다른점을 모르겠습니다... (제 눈의 문제인지...ㅠㅠ) 아래는 제가 작성한 코드입니다. <product.js> <server.js> vscode 터미널에 뜨는 에러 코드는 아래와 같습니다. 에러 코드에도 보면 첫줄에 'notNull Violation'이라고 되어 있어서 해당 조건을 어겼기 때문인 것 같은데... 데이터 베이스에 값들이 잘 들어가 있는 거 같은데 뭐가 잘못된 걸까요... 한 번 봐주시고 혹시 제가 놓친 부분이 있거나 좋은 방법이 있다면 답변해주시면 감사하겠습니다..!! ValidationError [SequelizeValidationError]: notNull Violation: Product.name cannot be null,notNull Violation: Product.price cannot be null,notNull Violation: Product.seller cannot be null,notNull Violation: Product.description cannot be null at InstanceValidator._validate (/Users/jade/Desktop/grab-market-server/node_modules/sequelize/lib/instance-validator.js:50:13) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async InstanceValidator._validateAndRunHooks (/Users/jade/Desktop/grab-market-server/node_modules/sequelize/lib/instance-validator.js:60:7) at async InstanceValidator.validate (/Users/jade/Desktop/grab-market-server/node_modules/sequelize/lib/instance-validator.js:54:12) at async model.save (/Users/jade/Desktop/grab-market-server/node_modules/sequelize/lib/model.js:2368:7) at async Function.create (/Users/jade/Desktop/grab-market-server/node_modules/sequelize/lib/model.js:1344:12) { errors: [ ValidationErrorItem { message: 'Product.name cannot be null', type: 'notNull Violation', path: 'name', value: null, origin: 'CORE', instance: [Product], validatorKey: 'is_null', validatorName: null, validatorArgs: [] }, ValidationErrorItem { message: 'Product.price cannot be null', type: 'notNull Violation', path: 'price', value: null, origin: 'CORE', instance: [Product], validatorKey: 'is_null', validatorName: null, validatorArgs: [] }, ValidationErrorItem { message: 'Product.seller cannot be null', type: 'notNull Violation', path: 'seller', value: null, origin: 'CORE', instance: [Product], validatorKey: 'is_null', validatorName: null, validatorArgs: [] }, ValidationErrorItem { message: 'Product.description cannot be null', type: 'notNull Violation', path: 'description', value: null, origin: 'CORE', instance: [Product], validatorKey: 'is_null', validatorName: null, validatorArgs: [] } ]}node:internal/errors:465 ErrorCaptureStackTrace(err); ^ Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at new NodeError (node:internal/errors:372:5) at ServerResponse.setHeader (node:_http_outgoing:576:11) at ServerResponse.header (/Users/jade/Desktop/grab-market-server/node_modules/express/lib/response.js:794:10) at ServerResponse.send (/Users/jade/Desktop/grab-market-server/node_modules/express/lib/response.js:174:12) at /Users/jade/Desktop/grab-market-server/server.js:44:11 at processTicksAndRejections (node:internal/process/task_queues:96:5) { code: 'ERR_HTTP_HEADERS_SENT'}
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
하이버네이트에서 지연 로딩된 객체의 필드가 null인 현상에 대해 질문드립니다
안녕하세요 좋은 강의 감사드립니다. 하이버네이트에서 지연 로딩 사용 시, 지연 로딩된 객체가 초기화 되었음에도 불구하고 필드 접근 시 null이 조회되는 현상에 대해서 질문드립니다. 간단하게 현상을 재현하면 다음과 같습니다. 위와 같이 Member가 Team을 지연 로딩으로 설정한 경우이며, 예시를 위해 Team의 name을 public으로 설정하였습니다. 그리고 다음 코드를 실행하면 발생하는 결과는 다음과 같습니다. 이와같은 오류의 원인을 찾아본 결과 stackoverflow에서 지연 로딩으로 설정된 Proxy 객체의 필드는 모두 null로 세팅한다고 얘기해주었습니다. 그러나 관련된 공식 자료를 찾아볼 수가 없어 정확한 작동 원리에 대해 알고 싶어 질문드립니다. 또한 비슷한 현상으로 스프링에서 Proxy 타입으로 생성된 Bean에 대해서는 내부 필드들을 null로 할당하는 것이 있습니다. 이는 공식 문서에 따르면 Spring AOP에서 메서드 실행 조인 포인트만 제공하며, 필드 가로채기에 대해서는 지원하지 않는다고 나와있었습니다. 혹시 지연 로딩된 프록시 객체의 필드가 null로 세팅되는 현상이 위와 관련있는 현상인지에 대해서도 궁금합니다. 관련된 스프링 공식문서는 다음과 같습니다. https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/aop.html 또한 지연 로딩과 null 세팅에 관한 스택 오버플로우 링크는 다음과 같습니다. https://stackoverflow.com/questions/8945365/jpa-hibernate-proxy-not-fetching-real-object-data-sets-all-properties-to-null 너무 긴 질문 죄송합니다. 항상 감사합니다.
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
뜬금없는 질문 하나 드립니다
맛비님 문득 갑자기 궁금한게 하나 있습니다 Module 정의 시 "#" 이 붙은게 있고 안붙은게 있는데 차이가 무엇인가요??
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
Core 개수 늘리는 법
안녕하세요 맛비님 실습관련해서 몇 가지 질문을 드립니다! Core 개수를 늘려보고 싶은데 고민 중인 것이 있습니다. Memory I/F는 32bit의 data를 읽어오는데 만약 64bit의 data를 읽어서 4개의 연산을 하고 싶다면 어떻게 해야 할까요? I/F에서 core에 data를 전달해 주기 전에 F/F을 더 추가하고 예를 들면 cnt를 사용해서 clk을 2번을 cnt하면 반전되는 새로운 clk을 만들어서 마지막 F/F을 이 clk에 동기화 시켜 Core에 data를 넣어줘야 할까요? 2. 위의 경우 결과를 BRAM에 다시 write하려면 delay를 넣어줘야 할 것 같은데 이렇게 설계하는 것이 맞는 방식인 건가요? 3. 맛비님은 더 많은 bit를 연산할 때 어떻게 하시나요? (64bit 뿐만 아니라 96bit ... 등)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
서버 구조 싱글쓰레드 인가요?
안녕하세요. 아직 강의는 다 보지 못하고 소스코드만 봤는데 서버 구조 싱글쓰레드 인가요?
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
delivery 함수와 main 함수
수업 중 예시로 들어주신 코드에서 delivery 함수는 내부의 코드 순서가 보장되니 동기적으로 실행되는 것이고 main 함수에서는 delivery() 코드의 순서들이 보장되지 않아도 되니 main 함수는 비동기로 실행된다고 이해하면 될까요?
-
해결됨Flutter 앱 개발 기초
문법 관련
안녕하세요 이렇게 문법을 한번에 정리해서 빠르게 갔는데 조금더 자세하기 공부를해야하는걸까요? 나중에가서 못하거나 부족하면 그때그때 찾아서 해야하는건가요?
-
미해결반응형 웹사이트 포트폴리오(App Official Landing Website)
왜 전 선생님과 화면이 다를까요?
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>StartUp</title> <!-- Favicon Logo --> <link rel="icon" href="image/logo-favicon.png"> <!-- --> <!-- jQuery CDN --> <script src="/script/jquery-3.4.1.min.js"></script> <!-- --> <!-- Slick Slider --> <link rel="stylesheet" href="script/slick-theme.css"> <link rel="stylesheet" href="script/slick.css"> <script src="/script/slick.min.js"></script> <!-- --> <!-- LINK CSS & SCRIPT --> <link rel="stylesheet" href="/css/style.css"> <link rel="stylesheet" href="/css/respon.css"> <script src="/script/main.js"></script> <!-- --> <!-- Fontawesome lINK --> <script src="https://kit.fontawesome.com/8e2986d4b4.js" crossorigin="anonymous"></script> <!-- --> </head> <body> <div class="container"> <!-- Header --> <header> <div class="header-inner"> <div class="logo"> <a href="#none"><img src="/image/logo.png" alt=""></a> </div> <div class="gnb"> <a href="#none">CEO 인사말</a> <a href="#none">서비스 특징</a> <a href="#none">자주 묻는 질문들</a> <a href="#none">경영비젼</a> <a href="#none">사용자 리뷰</a> <a href="#none">앱 사용자 가이드</a> <a href="#none">최신소식</a> </div> </div> </header> <!-- welcome --> <section class="welcome"> <div class="slideshow"> <img src="/image/slide-welcome-01.png" alt=""> <img src="/image/slide-welcome-02.png" alt=""> <img src="/image/slide-welcome-03.png" alt=""> </div> <div class="wecome-heading"> <span>창의적인 아이디어를 만드는 가장 빠른 방법</span> <h1>An idea solution of startup for your<em>3가지 타이핑 텍스트 자리</em></h1> <p> 스타트업 메이트 앱이 여러분의 최상의 스타트업 구축을 위해 창의적인 아이디어를 제공하는 데 최선을 다하겠습니다. </p> <div class="welcome-btns"> <a href="#none" class="btn start">CEO 시작하기</a> <a href="#none" class="btn guide">사용자 가이드</a> </div> </div> <div class="mouse"> <span class="wheel"></span> </div> </section> <!-- ceo-access --> <section class="ceo-access"></section> <!-- banner --> <section class="banner"></section> <!-- feature --> <section class="feature"></section> <!-- vision --> <section class="vision"></section> <!-- faq --> <section class="faq"></section> <!-- review --> <section class="review"></section> <!-- focus --> <section class="focus"></section> <!-- guide --> <section class="guide"></section> <!-- news --> <section class="news"></section> <!-- footer --> <footer></footer> </div> </body> </html> /* Font */ @import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,200;0,300;0,400;0,600;0,700;1,400&display=swap'); /* font-family: 'Source Sans Pro', sans-serif; */ @import url('https://fonts.googleapis.com/css2?family=Gothic+A1:wght@100;200;300;400;500;600&display=swap'); /* font-family: 'Gothic A1', sans-serif; */ /* */ /* Setting CSS */ /* 박스사이징 고정 */ *{ box-sizing: border-box; } /* A태그 색상 및 데코 none */ a{ text-decoration: none; color:#222; } /* 버튼,인풋에 기본적으로 들어가있는 아웃라인 제거 */ button, input{ outline:none; } /* h태그들 제거, 마진 탑만 0, 라인하이트 설정 */ h1,h2,h3,h4,h5,h6{ margin-top: 0; font-weight: normal; line-height: 1.5em; } /* Default CSS */ /* 바디에 글꼴설정, a태그와 같은 글씨색상 */ body{ font-family: 'Gothic A1', sans-serif; font-size: 18px; line-height: 1.7em; margin: 0; background-color: white; color:#222; } /* Header */ header{ } .header-inner{ width: 1300px; margin: auto; overflow: hidden; padding-top:30px; padding-bottom:15px; } .logo{ float: left; } .logo img{ margin-top:-5px; } .gnb{ float: right; } .gnb a{ margin:10px; font-size:16px; } /* Welome */ .welcome{ height: 90vh; position: relative; } .welcome-heading{ position: absolute; top: 50%; transform:translateY(-50%); left:200px; border:5px solid red; width: 750px; text-align: center; } /* ceo-acess */ /* banner */ /* feature */ /* vision */ /* faq */ /* review */ /* focus */ /* guide */ /* news */ /* footer */ 안녕하세요, 선생님보고 코드따라썼는데 자꾸 welcome-heading부분이 위로 안올라오고 아래로 자꾸 떨어지는데.. 왜그럴까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
price를 Integer로 하신 이유가 납득이 안 됩니다
안녕하세요. Item 쪽에서 price를 Integer로 하신 이유가 가격에 null이 들어갈 수 없어서 하셨다고 했는데, 가격에 null이 들어가야하는 케이스가 뭐가 있나요? 상품을 선택해야만 가격이 책정되는 것이고 디폴트는 0일텐데 굳이 Integer로 설정하신 이유가 이해가 잘 되지 않습니다. 감사합니다.
-
미해결로그프레소 엔터프라이즈 - 대시보드
리스트 선택 컨트롤 질문
안녕하세요! 리스트 선택 컨트롤을 사용하는데 궁금한 점이 생겨서 질문드립니다. log - {IP:1.1.1.1, is_vpn:false, is_mobile: true) - {IP:1.1.1.2, is_vpn:ture, is_mobile: false) - {IP:1.1.1.3, is_vpn:ture, is_mobile: false) 위와 같은 형태의 로그가 있을 떄 대시보드에서 리스트 선택 컨트롤을 통해 is_mobile이 true인 IP들만 뽑고 싶은데 가능할까요..? 즉 각 칼럼이 true인 얘들만 따로 검색 할 수 있게 하고 싶어서요 ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Java 버전을 11로 하는 이유
안녕하세요. 자바 버전을 8로 했다가 application.yml 쪽에 jpa property 가 잘 동작이 안 되는 걸 확인해서 11로 다시 바꾼 기억이 있는데, 혹시 11 버전으로 쓰시는 이유가 jpa 쪽과 관련이 있는건가요? 강의 시작하실 때에도 11로 선택하라고 명시해주셔서 궁금하여 여쭤봅니다.
-
해결됨Flutter 앱 개발 기초
4주차 링크오류
4주차 숫자 퀴즈 앱 만들기 하단의 강의자료 링크가, 다른강의 4주차 링크랑 달라서, 누를시 자꾸 로그인하라고만 나옵니다. 우선은 기존 4주차 링크로 사용해서보고있습니다. 확인부탁드립니다 :)