묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
프로미스 함수 모킹할 때 질문
Promise.reject를 쓰는 경우가 아니라면 바로 반환하거나 Promise객체를 사용해서 반환하거나 똑같은 것 같은데 크게 상관없나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
레퍼지토리가 여러개인 경우
만약 A라는 인터페이스를 상속받은 B,C,D 클래스가 모두 Repository로 컨테이너에 등록이 되어있고Service에서는 A 인터페이스를 선언하여 컨테이너로부터 주입을 받고자 한다면, 어떤것이 주입되는 것인가요?
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
infinite scroll에서 최초 랜더링한 페이지가 한페이지에 안나올때 추가로 페이지를 불러 올수 있나요?
만약 Page의 단위를 5로 잡아서 최초 랜더링한 페이지가 스크롤이 되지않는다면 onScroll 이벤트가 발생하지 않으니 setSize 이벤트도 발생할수 없습니다.이렇게 최초 데이터의 개수가 모자라서 이벤트 자체가 발생하지 않으면 별개의 이벤트로 scroll이 가능할때까지 페이지를 불러와야 하는데 좋은 방법이 잇는가요?페이지를 5개로 잡을떄페이지를 20개로 잡을떄참조 코드import ChatBox from '@components/ChatBox'; import ChatList from '@components/ChatList'; import useInput from '@hooks/useInput'; import { Header, Container } from '@pages/DirectMessage/styles'; import fetcher from '@utils/fetcher'; import makeSection from '@utils/makeSection'; import axios from 'axios'; import gravatar from 'gravatar'; import React, { FC, FormEventHandler, useCallback, useEffect, useRef, useState } from 'react'; import Scrollbars from 'react-custom-scrollbars-2'; import { useParams } from 'react-router'; import useSWR from 'swr'; import useSWRInfinite from 'swr/infinite'; const PAGE_SIZE = 5; const DirectMessage: FC = () => { const { workspace, id } = useParams(); const { data: myData } = useSWR<IUser, false>('/api/users', fetcher); const { data: userData } = useSWR<IUser, false>(`/api/workspaces/${workspace}/users/${id}`, fetcher); const [chat, onChangeChat, setChat] = useInput(''); // const scrollbarRef = useRef(null); const { data: chatData, mutate: mutateChat, setSize, } = useSWRInfinite<IDM[]>( (index) => `/api/workspaces/${workspace}/dms/${id}/chats?perPage=${PAGE_SIZE}&page=${index + 1}`, fetcher, ); const isEmpty = chatData?.[0]?.length === 0; const isReachingEnd = isEmpty || (chatData && chatData[chatData.length - 1]?.length < PAGE_SIZE); const chatSection = makeSection(chatData ? [...chatData].flat().reverse() : []); const onSubmitForm = useCallback<FormEventHandler>( (event) => { event.preventDefault(); if (!chat || !chat?.trim()) { return; } axios .post(`/api/workspaces/${workspace}/dms/${id}/chats`, { content: chat, }) .then(() => { mutateChat(); setChat(''); }) .catch(console.error); console.log('제출'); }, [chat, id, mutateChat, setChat, workspace], ); const scrollbarRef = useRef<Scrollbars>(null); return !userData || !myData || !chatData ? null : ( <Container> <Header> <img src={gravatar.url(userData.email, { s: '24px', d: 'retro' })} alt={userData.nickname} /> <span>{userData.nickname}</span> </Header> <ChatList chatSections={chatSection} isEmpty={isEmpty} isReachingEnd={isReachingEnd} setSize={setSize} ref={scrollbarRef} /> <ChatBox onSubmitForm={onSubmitForm} chat={chat} onChangeChat={onChangeChat} placeholder={`Message ${userData.nickname}`} otherData={[userData]} /> </Container> ); }; export default DirectMessage;import Chat from '@components/Chat'; import { ChatZone, Section, StickyHeader } from '@components/ChatList/styles'; import React, { FC, MutableRefObject, forwardRef, useCallback } from 'react'; import { Scrollbars, positionValues } from 'react-custom-scrollbars-2'; interface Props { chatSections: { [key: string]: (IDM | IChat)[] }; isEmpty: boolean; isReachingEnd?: boolean; setSize: (f: (size: number) => number) => Promise<(IDM | IChat)[][] | undefined>; } const ChatList = forwardRef<Scrollbars, Props>(({ chatSections, isReachingEnd, isEmpty, setSize }, scrollRef) => { const onScroll = useCallback( (values: positionValues) => { if (values.scrollTop === 0 && !isReachingEnd) { setSize((size) => size + 1).then(() => { const current = (scrollRef as MutableRefObject<Scrollbars>)?.current; if (current) { current.scrollTop(current.getScrollHeight() - values.scrollHeight); } }); } }, [isReachingEnd, scrollRef, setSize], ); return ( <ChatZone> <Scrollbars autoHide ref={scrollRef} onScrollFrame={onScroll}> {Object.entries(chatSections).map(([dateData, chatData]) => ( <Section className={`section-${dateData}`} key={dateData}> <StickyHeader> <button>{dateData}</button> </StickyHeader> {chatData.map((chat) => ( <Chat key={chat.id} data={chat} /> ))} </Section> ))} </Scrollbars> </ChatZone> ); }); export default ChatList;
-
미해결
미라클 모닝 스터디 WAIM 8기 멤버 구해요!
안녕하세요! 성장에 진심인 사람들이 모이는 아침, We are in Morning! WAIM에서 7.31~8.26 기간 진행하는 8기 멤버를 구해요! WAIM은 자신의 라이프 스타일에 맞춰 오전 4시~8시 사이 고정 기상 시간을 정하고'타임스탬프'를 이용해 1차 기상 인증, 2차 루틴 인증을 하는 미라클 모닝 스터디입니다!함께 하며 서로 좋은 영향을 주고 받고 의미있는 아침 시간을 만들어 나가봐요!!📕신청 기간 : 7월 23일~7월 30일 23:59 까지 📕중간 참여 신청 : 7월 31~8월 13일 23:59까지(모집 인원 수 등 상황에 따라 변경될 수 있음에 양해 부탁드립니다.)📆스터디 기간 : 7월 31일~8월 26일, 4주📬오픈카톡방 링크 발송 : 7월 29~30일, 이틀간 (상황에 따라 일정이 변경될 수 있습니다.)프로필 링크에 게재된 홈페이지를 통해 스터디 운영 방식을 꼭! 확인해 보시고 신청하여 주시길 바랍니다 :)홈페이지 및 신청https://waim.oopy.io/인스타그램https://www.instagram.com/weareinmorning/문의 채널http://pf.kakao.com/_zfAWxj
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
Unable to start assembler. Check your settings.
3.12.1 버전으로 시작했는데도 설정오류가 뜹니다-g -f win64 $SOURCE$ -l $LSTOUTPUT$ -o $PROGRAM.OBJ$로 옵션 설정을 바꿨고 현재 윈도우 10 을 사용중인데 이유를 모르겠네요3.14.0버전도 마찬가지라 버전의 문제가 아닌 것 같습니다.
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
강의 자료 다운로드가 안됩니다
강의 구매하고 강의자료 다운로드를 받으려는데 먼저 크롬에서 파일 다운로드가 차단돼었고크롬 보안을 끄고 다운로드를 받으려니 바이러스가있어서 다운로드가안된다고 뜨는데왜그런걸까요 ㅠㅠ
-
미해결따라하면서 배우는 고박사의 유니티 기초
총알이 나가지 않습니다.
애러는 안 나는 데, 맨 처음 시작했을 때, 오른쪽으로 나가지 않습니다. 코드는 이렇습니다. public class PlayerControler : MonoBehaviour{ [SerializeField] private KeyCode keyCodeFire = KeyCode.Space; [SerializeField] private GameObject bulletPrefab; private float moveSpeed = 3.0f; private Vector3 lastMoveDirection = Vector3.right; private void Update() { // 플레이어 오브젝트 이동 float x = Input.GetAxisRaw("Horizontal"); float y = Input.GetAxisRaw("Vertical"); transform.position += new Vector3(x, y, 0) moveSpeed Time.deltaTime; // 마지막에 입력된 방향키의 방향을 총알의 발사 방향으로 활용 if (x != 0 || y != 0) { lastMoveDirection = new Vector3(x, y, 0); } // 플레이어 오브젝트 총알 발사 if (Input.GetKeyDown(keyCodeFire)) { GameObject clone = Instantiate(bulletPrefab, transform.position, Quaternion.identity); clone.name = "Bullet"; clone.transform.localScale = Vector3.one * 0.5f; clone.GetComponent<SpriteRenderer>().color = Color.red; clone.GetComponent<Movement2D>().Setup(lastMoveDirection); } }}
-
미해결배달앱 클론코딩 [with React Native]
키보드 관련 질문드립니다.
안녕하세요.안드로이드에서 react-native-keyboard-aware-scroll-view 라이브러리 사용해서 인스타그램 댓글창처럼 만들고있는데 FlatList로 댓글을 가져오고맨밑에 인풋창을 누르면 키보드가 상단으로 올라오면서 맨밑에 댓글이 가려지는 현상이있는데 이부분에 대해 해결방법이 있을까요?windowSoftInputMode는 adjustResize고 adjustPan모드로도 해봤는데 이건 맨위에 댓글 부분이 잘려나가더라구요.이것저것 해봤는데 안되서 여기다 질문 남깁니다.
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
list head와 tail
안녕하세요 stl list 구현부를 학습하던중에 head의 역할이 이해가 안되서 인터넷을 찾아봤는데요.head는 첫번째 노드를 가리키는 것tail이 마지막 노드를 가리키는 것 첫 초기화 상태는 head와 tail 서로 next prev를 이용해 가리키고값 삽입 부분에서 head의 next , tail의 prev를 새로운 노드를 가리키게 바꿔주면 되는 것인데.. 설명 내용에는 taill 부분이 빠져있어서 혼란이 왔어요.결론 : 그냥 둘다 통합으로 header로 표현하신건가요??
-
해결됨Spring Boot JWT Tutorial
이게 무슨 에러일까요..
yml파일 두 개 사진대로 둘 다 실행 해봤는데 안되네요.. 뭐가 잘못된 걸까요..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 어느 부분이 틀렸는지 모르겠습니다.
안녕하세요 강의 안보고 제 방식대로 일단 작성을 해보았는데 어느 부분이 틀렸는지 모르겠습니다. 예제는 맞는데 계속 오답이 나와서 여기에 질문 올립니다.http://boj.kr/93f413d4caad435dbb67578593137ac9
-
미해결ELK 스택 (ElasticSearch, Logstash, Kibana) 으로 데이터 분석
에러 확인 부탁드립니다
아래 에러 원인과 해결방법좀 부탁드려요(py310) user@user-desktop:~/Desktop/ELK$ curl -XGET localhost:9200 curl: (52) Empty reply from server
-
미해결구성 관리 자동화 도구 - 앤서블(Ansible)
실습코드가 올려져 있나요.
안녕하세요.실습위주의 강의라 이해야 잘 됩니다.다만, 실습코드가 있으면, 도움이 될 것 같습니다.실습코드가 올려져 있는 github 사이트가 있나요.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
실행을 시키다가 중지시키면
이렇게 빨간 글자들이 나오는데 문제 없는건가요? 강사님은 안뜨시는데 저만 뜨네요
-
해결됨Slack 클론 코딩[실시간 채팅 with React]
concat시 2차원 배열이면 쪼개지지않나요?
원본값을 유지하기위해 concat을 사용하셧는데지금 같은 1차원 배열일때는 문제가 없지만 2차원 배열일 경우 해당 배열이 다쪼개져서 1차원 배열이 되는걸로 알고있습니다 그래서 저는 원본을 유지할때 스프레드 문법을 사용하는데 concat이 더 좋은경우도 있나요?두가지 방법을 다 알려주시긴 하셧는데 차이점이 잇는가 궁금합니다.예시상황const chatData = [[1, 2], [3, 4], [5, 6]];[].concat(...chatData).reverse() => [6, 5, 4, 3, 2, 1][...chatData].reverse()=> [[5, 6], [3, 4], [1, 2]]
-
미해결웹 게임을 만들며 배우는 React
웹팩빌드되었으나 크롬연결이 안됩니다.
제로초님 그대로 따라했고,성공적으로 빌드 되었단 메시지도 받았습니다만, WordRelay.htmld을 실행하면, 이런 메시지가 뜨면서 연결이 안되어, 구글링을 통해, 해결방법을 다 따라해봤습니다. 네트워크 옆에 화살표 제한없음으로 변경해보는 방법은 효과가 없었고, launch.json파일을 수정하면 된다는 글을 보고 따라해봤으나, 아까 나왔던 빨간 메시지와함께 이런 화면이 뜹니다... 어떻게 해야될까요 문제는 이게 세번째하는겁니다. lecture1에서 lecture3까지 완전 처음부터 다시 해봤으나 계속 똑같은 문제가 발생합니다. 이런걸로 리액트공부를 포기하고싶진 않은데, 아무리 해봐도 안되니 너무 답답하네요...
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
twice 앱만들기 성공했어요 감사드립니다
아쉬운 점은for 나 while 등 loop(반복)문을 사용해 코드를 줄이고 싶은데 실력이 아직 ㅎ ㅎ ㅎ
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
레디스 라이브러리 장단점에 대해서 혼동이 있어서 질문드립니다.
강의 내용에 따르면 Redisson 을 사용하면 락 흭득 재시도를 기본으로 구성한다는 말씀을 해주셨습니다.RedissonLockStockFacade 예제를 보면decrease 메서드 내부에서 getLock 으로 락을 흭득하고 lock.tryLock() 호출을 통해 락을 잡는 다는 것으로 이해하였습니다.이 때 락 흭득 재시도를 lock.tryLock() 내부에서 이루어 지는 건가요??또한 lettuce 사용 시 락 흭득 재시도를 하는 과정은 while(!redisLockRepository.lock(key)) 를 통해서 스핀락 형태로 이루어지는건가요?
-
미해결Three.js로 시작하는 3D 인터랙티브 웹
Studiomeal 소스코드가 궁금합니다.
안녕하세요! 클론코딩형식으로 studiomeal을 구현해보고싶은데 방명록 작성이나 동영상을 띄우는 부분이 너무 궁금해서 혹시 소스가 오픈되어있는지 궁금합니다.! 추가적으로 해보려고 하는게 사용자가 사진과 제목과 내용을 작성하면 이미지, 제목, 내용이 액자처럼 되어서 마치 미술관에 전시된 그림과 제목과 내용을 확인할 수 있는 것처럼 구현해보고 싶은데 조언 부탁드립니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
WAS 에 오류가 전달되는 방식의 차이에 대해 질문있습니다.
ServletExController 에서 sendError() 로 직접 오류를 WAS 에 전달해주면 Exception 이 터지지않은 것으로 간주되어 ErrorPageController 에서 사용중인httpServletRequest.getAttribute(ERROR_EXCEPTION) 의 결과가 로그에 찍히지않은 것이고, Exception 을 throw 해주어 간접적으로 WAS 에게 오류를 전달해주면 Exception 이 터진것으로 간주되어 httpServletRequest.getAttribute(ERROR_EXCEPTION) 의 결과가 로그에 찍힌것으로 이해하면 될까요? 답변부탁드리겠습니다!!