묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
view의 경우에
해당 강의에서 restcontroller는 view를 갖지않는 rest data를 반환한다고 하셨는데, 그렇다면 예를 들어 로그인을 완료한 후 session or token등을 가지고 메인화면으로 가는것만 한다면 그 메서드는 따로 controller을 만들어줘야하는건가요? 아니면 react같은 프레임워크 단에서 처리하는 방향이 맞다면 어떤식으로 하는건지 간략히 설명들을 수 있을까요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
해쉬태그가 불러와지지 않고 있습니다.
보시면 주소창에는 익스프레스 해시태그를 선택한 상태인데 화면에 출력은 변화하지 않고 있습니다. 리덕스에서는 정상적으로 선택된것 같은데 해당 해시태그로 이동하지 않고 있는것 같습니다. 그런데 또 해당 해시태그 주소에서 새로고침을 하면 위에 스샷 화면에서 해당 해쉬태그만 있는 게시물만 정상적으로 출력됩니다. 도대체 어디가 문제인지 갈피를 못잡고 있습니다. hashtag/[tag].js import React, { useEffect } from "react"; import axios from "axios"; import { useRouter } from "next/router"; import { END } from 'redux-saga'; import { useDispatch, useSelector } from "react-redux"; import AppLayout from "../../components/AppLayout"; import wrapper from "../../store/configureStore"; import PostCard from "../../components/PostCard"; import { LOAD_HASHTAG_POSTS_REQUEST } from "../../reducers/post"; import { LOAD_MY_INFO_REQUEST } from "../../reducers/user"; const Hashtag = () => { const dispatch = useDispatch(); const router = useRouter(); const { tag } = router.query; const { mainPosts, hasMorePosts, loadPostsLoading } = useSelector((state) => state.post); useEffect(() => { function onScroll() { if (window.scrollY + document.documentElement.clientHeight > document.documentElement.scrollHeight - 300) { if (hasMorePosts && !loadPostsLoading) { dispatch({ type: LOAD_HASHTAG_POSTS_REQUEST, lastId: mainPosts[mainPosts.length - 1] && mainPosts[mainPosts.length - 1].id, data: tag, }) } } } window.addEventListener('scroll', onScroll); return () => { window.removeEventListener('scroll', onScroll); } }, [hasMorePosts, loadPostsLoading, mainPosts.length, tag]) return ( <AppLayout> {mainPosts.map((c) => ( <PostCard key={c.id} post={c} /> ))} </AppLayout> ) } export const getServerSideProps = wrapper.getServerSideProps(async (context) => { const cookie = context.req ? context.req.headers.cookie : ''; axios.defaults.headers.Cookie = ''; if (context.req && cookie) { axios.defaults.headers.Cookie = cookie; } context.store.dispatch({ type: LOAD_MY_INFO_REQUEST, }) context.store.dispatch({ type: LOAD_HASHTAG_POSTS_REQUEST, data: context.params.tag, }) context.store.dispatch(END); await context.store.sagaTask.toPromise(); }) export default Hashtag; reducers/post.js case LOAD_USER_POSTS_REQUEST: case LOAD_HASHTAG_POSTS_REQUEST: case LOAD_POSTS_REQUEST: draft.loadPostsLoading = true; draft.loadPostsDone = false; draft.loadPostsError = null; break; case LOAD_USER_POSTS_SUCCESS: case LOAD_HASHTAG_POSTS_SUCCESS: case LOAD_POSTS_SUCCESS: draft.loadPostsLoading = false; draft.loadPostsDone = true; draft.mainPosts = draft.mainPosts.concat(action.data); draft.hasMorePosts = action.data.length === 10; break; case LOAD_USER_POSTS_FAILURE: case LOAD_HASHTAG_POSTS_FAILURE: case LOAD_POSTS_FAILURE: draft.loadPostsLoading = false; draft.loadPostsError = action.error; break; sagas/post.js function loadHashtagPostsAPI(data, lastId) { return axios.get(`/hashtag/${encodeURIComponent(data)}?lastId=${lastId || 0}`); } function* loadHashtagPosts(action) { try { const result = yield call(loadHashtagPostsAPI, action.data, action.lastId) yield put({ type: LOAD_HASHTAG_POSTS_SUCCESS, data: result.data, }) } catch (err) { console.error(err) yield put({ type: LOAD_HASHTAG_POSTS_FAILURE, error: err.response.data, }) } } routes/hashtag.js const express = require('express'); const { Hashtag, Post, Image, Comment, User } = require('../models'); const { Op } = require('sequelize'); const router = express.Router(); router.get('/:hashtag', async (req, res, next) => { // GET /hashtag/노드 try { const where = {}; if (parseInt(req.query.lastId, 10)) { // 초기 로딩이 아닐때 where.id = {[Op.lt]: parseInt(req.query.lastId, 10)} } const posts = await Post.findAll({ where, limit: 10, order: [['createdAt', 'DESC']], include: [{ model: Hashtag, where: { name: decodeURIComponent(req.params.hashtag) }, }, { model: User, attributes: ['id', 'nickname'], }, { model: Image, }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'], order: [['createdAt', 'DESC']], }], }, { model: User, // 좋아요 누른사람 as: 'Likers', attiributes: ['id'], }, { model: Post, as: 'Retweet', include: [{ model: User, attiributes: ['id', 'nickname'], }, { model: Image, }] }] }); res.status(200).json(posts); } catch (error) { console.error(error); next(error); } }) module.exports = router; 코드입니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part6: 웹 서버
HTTP/1.1 415 Unsupported Media Type 오류
혼자 해결할려고 이것 저것 해봤는데.. 해결이 할 수 없어 질문드립니다. 도대체 왜? 유니티 콘솔창에 415오류가 뜨는지 모르겠습니다. (유니티 버전 2020.3.18f1)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강사님 InputManager에서 Action delegate를 쓰신 이유가 궁금합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아직 많이 부족한 초보입니다 InputManager 강의에서 Action 대리자를 쓰셨는데 Action 대리자를 쓰신 이유가 궁금합니다.. (delegate보다 편해서 인건지, 메서드를 꼭 받아야만 했던 것인지 ㅠㅠ) 그리고 InputManager를 구현할 다른 방법이 또 있는건지도 궁금해요!
-
미해결비전공자를 위한 진짜 입문 올인원 개발 부트캠프
react 시작부분 오류질문
첨부한 사진처럼 떠요. 강의 밑에 '주목'해서 올려주신것도 봤는데 잘모르겠습니다 . ㅜ
-
해결됨14일만에 배우는 ASP.NET CORE
03. MVC패턴 강의 질문입니다.
Login.cshtml -> 11라인 asp-controller ="Membership" "Membership" 이라는게 MembershipController.cs 가 맞나요? "Membership", "MembershipController" 둘다 사용해도 되는건가요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
로그인 정보 불러오기
로그인 정보를 불러올 때 현재 노드버드 앱 같은 경우에는 페이지 수가 적어서 가가 필요한 정보가 비슷해서 loadUserAPI시 항상 같은 데이터를 받아오는데 만약 페이지가 어느정도 많고 각 페이지에서 유저 관련된 필요한 정보가 많이 다를 경우에는 1. loadUserAPI를 여러개로 쪼갠 후에 loadUser 에서 경우에 따라 다른 api를 호출하는 게 좋은지 아니면 2. 액션을 여러개로 늘려서 하는 것이 좋을지 아니면 3. 모든 페이지에서 필요한 유저 관련 데이터의 합집합을 받는것이 좋을지 궁금하네요. 제 생각에는 2번인데 만약 2번이라면 그에 따른 코드량이 방대해 질텐데 (state수, 리듀서, 사가 등) 그래도 이렇게 하는게 가장 좋겠죠??
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기
api/video/uploadfiles 경로 404 에러뜨시는분들
root 디렉토리에 폴더명을 uploads로 만들어놔서 api/video/uploadfiles 말고 api/video/uploads 로 고쳐서 하시면 됩니다. 아마 강사님이 처음에 uploads가 아니라 uploadfiles로 선언을 하시고 추후에 uploads로 바꾸셨는데 나머지 부분이 변경이 안됐던것 같습니다. VideoUploadPage.js에서 axios.post('/api/video/uploads', formData, config) 로 고치고 server 디렉토리의 video.js에선 router.post('/uploads', (req, res) => { 로 고치면 정상적으로 작동 됩니다.
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
파이참
기존에 파이참이랑 아톰이 둘다 설치되어있었는데 아톰에서 아무리해도 autocomplete-python 설치문제로 해결이 안되서 파이참으로 실행하려고 합니다. 혹시 이후에 수업 진행시에 파이참으로 진행하려면 진행이 안된다거나 하는 부분이 있을까요?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
오류 ㅜ
예외처리 코드에서 error 부분이 빨간 밑줄 쳐지고 에러뜨는데용; 이미 선언되었다고 오류나는거같은데 ㅎㅎ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
AOP 적용 후 의존관계
안녕하세요. "AOP 적용" 강의에서 AOP를 적용했을때 프록시로 가짜 MemberService가 생성되는걸 확인 시켜주시기 위해서 MemberController 의 MemberService 주입 부분에서 프린트를 찍어서 보여주시는데요. AOP가 적용되지 않은 상태에서 프린트 찍어도 비슷한 형태로 출력됩니다. 이 부분에 대해서 설명해주실 수 있을까요..?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
질문요!!
특정 고양이 데이터 조회부분이 조금 어렵네요 ㅎㅎ 1. 동적라우팅? /:id 2.request 안에 파라미터값이 있다?라는 부분이 모르겟어요 ㅜ 왜 있는거지?
-
미해결Vue.js 중급 강좌 - 웹앱 제작으로 배워보는 Vue.js, ES6, Vuex
깃헙 권한 요청드립니다.
인프런 아이디 : slseongjunlee 인프런 이메일: sl.seongjunlee@gmail.com 깃헙 아이디 : sl.seongjunlee@gmail.com 깃헙 Username : sl-seongjunlee
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다.
강의 잘 듣고 있습니다. 감사합니다. Queue를 처음 배우고 있어 혼자 풀 때 아래와 같이 풀었는데 반례가 있을지 궁금합니다. function solution(need, plan) { let answer = "YES"; let planArr = plan.split(""); let max = -1; for (let x of need) { let YN = false; for (let i = 0; i < planArr.length; i++) { if (x === planArr[i]) { YN = true; if (max < i) { max = i; } else { answer = "NO"; } break; } } if (!YN) { answer = "NO"; } } return answer; }
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
bram 관련 질문
안녕하세요, BRAM과 ZYNQ에 대해 공부하던 중, 사용할 수 있는 BRAM이 630kB 정도 밖에 되지 않다는 것을 알게 되었습니다. 1) 만약 BRAM이 부족한 경우, 그렇다면 다른 memory를 사용해야할텐데, 그때는 DDR(?)을 사용하는 것인가요? 2) (1)번이 맞다면, 그 사용법이나 정보를 얻을 수 있는 곳이 있을까요? 여러 문서를 봐도, 코드를 어떤 식으로 작성해야하는지를 알 수가 없네요ㅠ 이 수업 커리큘럼 내에서는 DDR을 다루지 않는 것 같아, 관련된 정보라도 얻을 수 있을까 하여 질문드립니다. 감사합니다:)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
jar빌드 오류
지금까지 테스트 케이스 실행에는 큰 문제가 없었지만 ./gradlew clean build 시에 아래와 같은 문제가 발생합니다. 자바버전은 11인것을 확인하였습니다. 어떠한 문제때문에 이러한 에러가 발생하는 것인가요? 이와같은 문제가 gradle 캐시를 삭제후 다시 하면 잘 된다는 글을 봐서 캐시를 모두 삭제하고 다시 실행시켜보니 똑같은 현상이 일어납니다. Could not find org-springframework.boot:spring-boot-devtools: 이 부분을 찾지 못해서 문제인 것 같은데 어떻게 해결할 수 있을까요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
sequlize 질문 있습니다.
안녕하세요 제로초님! sequlize를 이용해서 배운 내용을 토대로 공부를 하고 있는데 create에서 몇일동안 잡히지 않는 에러가 있어서 제로초님께 질문 드립니다 ㅜ 다름이 아니라, 아래 코드를 가지고 mysql이랑 연동을 했는데 데이터베이스 컬럼?도 아래 4개로 구성되어있고 id는 자동생성인 상태인데, 왜 create한 결과가 null로 되는지 모르겠습니다.. sequlize에서 내부적으로 쿼리가 잘못되면 생성하지 않는 기능이 별도로 있는 것일까요?ㅜ graphql에 적용해보는데 console.log도 안먹히고 어떻게 해야할 지 모르겠습니다 ㅜㅜ const newUser = await User.create({ email: email, password: hashpw, type: "user", token: "", });
-
미해결
JPA관련 질문이 있습니다!!
현재 진행중인 프로젝트가 spring boot, mybatis 기반인데 jpa 적용 및 정상 동작까지 확인은 했습니다! 다만 현재 프로젝트 구조 상 문제점이 하나 발견되서 해결책이 있을지 여쭤봅니다~! * 문의사항 - DB 조회 시 조회대상 데이터 베이스를 유동적으로 변경할 수 있을까요? 현재(mybatis) 사용 예시 -> select *From ${DB_NAME}.emp 위와같이 DB명을 파라미터로 받아 유동적으로 대상 DB를 변경하면서 조회를 해야하는데 JPA에서도 관련 기능이 있는지 궁금합니다!
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
소스코드 깃허브 들어가서 어디에있죠?
오류나서 그대로 소스코드 복사해서 실행 해보려는데 어디에있죠? 깃허브들어가면 nestjs를 위한 express 에서 몇번쨰인가요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
마지막 예제에 대해 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 마지막 예제의 29분 40초 경 bool isEven = ((count % 2) == 0); 이라는 라인을 입력하게 되는데, 이렇게 되면 루프가 돌 때마다 변수의 값을 변경하는게 아닌, isEven이라는 변수를 매번 선언하게 되는 것처럼 보입니다. 이 경우 별다른 문제는 없는 것인가요? 추가로 질문이 더 있는데, 이 부분을 디스어셈블리로 봤을 경우 마치 분기문처럼 어셈블리어가 이루어져 있더라구요. 이 부분은 ((count % 2) == 0)처럼 비교를 하는 부분이 있기 때문에 이해가 가는데, 중간에 dec와 or, inc가 나오는 라인은 왜 그런 것인지 이해가 되지 않습니다. 나머지를 구하는 연산의 경우 div 명령어를 사용하여 dx 레지스터에 저장된 나머지값을 가져오면 되는 것으로 이해하고 있습니다. 그렇게 하지 않는 것은 해당 컴파일러의 특성처럼 이해해도 될 것 같은데, 그것 외에 그냥 해당 instruction 자체가 이해가 가지 않아서, 이해를 돕고자 질문드립니다. 해당 어셈블리 부분 첨부합니다. bool isEven = ((count % 2) == 0); 006924D0mov eax,dword ptr [ebp-44h] 006924D3 and eax,80000001h 006924D8 jns std::_Narrow_char_traits<char,int>::length+0Fh (06924DFh) 006924DA dec eax 006924DB or eax,0FFFFFFFEh 006924DE inc eax 006924DF test eax,eax 006924E1 jne std::_Narrow_char_traits<char,int>::length+1Fh (06924EFh) 006924E3 mov dword ptr [ebp-118h],1 006924ED jmp std::_Narrow_char_traits<char,int>::length+29h (06924F9h) 006924EF mov dword ptr [ebp-118h],0 006924F9 mov cl,byte ptr [ebp-118h] 006924FF mov byte ptr [ebp-4Dh],cl