묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
Class Human 관련_ConstructorExample
안녕하세요. 2.6 생성자 강의를 듣던도중 이전시간에서 배웠던 class Human 에 대해 오류가 떠서 질문 드립니다. ClassExample에서 class Human을 배우고 ConstructorExample이나 ObjectExample에서 Human 클래스를 이용하고 저장 후, 유니티에서 디버그로그를 보기위해 실행시키면 빨간색 글씨로 접근할수 없다면서 오류가 뜨며 실행이 되지않습니다! 그래서 class Human 을 public class Human 으로 바꿔주니 오류는 해결 되고 게임실행은 되는데, 이제는 디버그로그가 뜨질않습니다... (오류는 캡쳐를 못했네여...) 이후에 다시 처음부터 똑같이 따라해서 class Human 그대로 하고, ConstructorExample 작성후에 Debug.Log 해보았는데 아무것도 뜨질않습니다!!! 선생님 강의 그대로 따라했는데 왜 저는 안될까요! 궁금합니다. 항상 재밌게 듣고있습니다. 감사합니다. P.S 전에 있던 Human 관련 질문도 읽어봤지만 해당 내용이 아니여서 질문드립니다...
-
미해결하루만에 만드는 깃허브 블로그
2강에서 다운받은 폴더들도 강사님과 똑같이 했었는데.. 2강 마지막 부분 주소 링크가 안떠요???ㅜㅜㅜ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결하루만에 만드는 깃허브 블로그
안녕하세요 5시간째 2강을 못 나가고 있어요
아래 캡쳐 한 것처럼 url 주소가 나오지 않습니다.. 아.. 몇 시간째 하는지 모르겠습니다 ㅜㅜㅜ 자세한 설명 부탁드립니다.
-
해결됨객체 지향 프로그래밍 입문
캡슐화 연습4 질문 있습니다.
개선 후 예제에서 mem.verifyEmail() 시도 후 수정사항을 DB에 반영하고 있습니다. 궁금한 점은 DB 반영 완료 후 verifyEmail() 내부의 this.verificationEmailStatus = 2를 하는 게 맞지 않는가 궁금합니다.이유는 DB 반영 전에 this.verificationEmailStatus = 2를 진행 후 DB 반영을 한다면, 만약 DB 반영 실패 시 다시 verificationEmailStatus를 2가 아닌 값으로 바꿔주는 작업이 필요로 해 보입니다. 만약 DB 반영 실패를 검출하지 못한 경우 this.verificationEmailStatus를 이전 값으로 바꿔주지 못하고 DB 혹은 서버가 죽은 경우, 다음 verifyEmail을 시도 시 this.verificationEmailStatus는 2가 된 상태인데 DB에는 반영이 되지 않은 상태가 존재할 수 있다고 생각이 듭니다.혹시 이 경우 좋은 해답이 존재하는 지 궁금합니다.이상입니다.감사합니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
다대다 관계가 안좋은 이유
음... 안녕하세요! 선생님! '다대 다관계에서 왜 안좋아요?' 라는 질문을 받으면 뭔가 그 탁! '아 진짜 그렇겠네요!?' 라는 대답을 할수가없습니다. 이 러한 질문을 듣고 선생님이 생각이났는데요. 혹시 선생님께서는 저런 질문을 받으면 후배한테 어떤 답변을 내려주실건가요? 감사합니다.!
-
미해결제대로 파는 Git & GitHub - by 얄코(Yalco)
[맥북사용자] 예제를 다운받은 시점의 uncommitted changes가 자동 생성되는 것 같습니다.
main 3rd commit 시점으로 main 브랜치를 reset 한 후 영상 [01:00]처럼 branch간 switch가 가능했습니다. uncommitted changes가 발생하는 이유가 궁금해 질문 남기게 되었습니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
빌드 종료하는 방법
빌드 종료하는 법강의에서 skExecutor' 를 입력하는 것을 보고 따라하려 했으나 제 터미널에는 입력이 안되서 여쭤봅니다! 혹시 다른 방법이 있을까요?
-
미해결마인크래프트 게임을 활용한 파이썬 프로그래밍 완벽 이해
ModuleNotFoundError: No module named 'mcpi
인스톨이 완료되었는데 모듈 런하면 에러 발생합니다 ㅠ_ㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
만약 백엔드 개발자가 서버 사이드 렌더링을 할줄 알면
만약 백엔드 개발자가 서버 사이드 렌더링을 할줄 알면 프론트엔드 개발자가 필요 없어지나요? 만약 백엔드 개발자가 SSR까지 하면 프론트엔드 개발자가 해야할 일은 무엇인가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의 소스 코드 제공 부탁드립니다.
강의 소스 코드 제공 부탁드립니다. 수강 진행하다 에러가 나는 부분이 있는데 못찾겠네요.
-
미해결만들면서 배우는 리액트 : 기초
추가 기능
완강 후에 혼자 추가 기능을 구현해보고 있는데 질문 드려도 될까요?! 하트를 클릭하고 재클릭했을 때, favorites에서 해당 이미지를 제외시키는 기능을 구현하려고 합니다.(하트 누를 때마다 추가되었다가 삭제되었다가 ..) 그래서 저는 handleHeartClick()에 if(alreadyFavorite)의 경우를 추가해서 favorites 목록에서 해당 이미지를 제외하고, 로컬스토리지에서도 데이터를 삭제하려고 했습니다. 그런데 실행시켜보니 favorites 목록에서는 지워졌는데 로컬스토리지 데이터는 삭제가 안됩니다ㅠ 어떻게 구현해야 할지 모르겠어서 질문 드립니다..!! 밑에는 제가 짠 코드입니다. function handleHeartClick() { if (alreadyFavorite) { const nextFavorites = favorites.filter(favorite => favorite != mainCat); setFavorites(nextFavorites); jsonLocalStorage.removeItem(mainCat); return; } const nextFavorites = [...favorites, mainCat]; setFavorites(nextFavorites); jsonLocalStorage.setItem('favorites', nextFavorites) };
-
미해결Do it! 자바 프로그래밍 입문 with 은종쌤
증감연사자
int num = 10; int val = num++; System.out.println(val); 의 경우 실행시켜 보니까 출력이 10이 나오더라구요. 그 이유가 대입연산자가 증감연산자보다 우선순위가 높아서 대입만 이루어지기 때문에 이러한 결과가 나오는 건가요?
-
미해결Slack 클론 코딩[실시간 채팅 with React]
Cannot read properties of undefined (reading 'map') 관련 질문드립니다.
안녕하세요. Cannot read properties of undefined (reading 'map') 하여 질문을 드리고자합니다. 문제는 해결 했으나 타입스크립트가 미숙하여 이런 현상이 발생한거 같은데 왜 이런 문제가 발생했는지 잘 몰라서 질문 드립니다. 오류가 발생 된 flow는 login 시 /workspace/sleact/channel/일반 으로 접을 했을 경우 그림과 같은 에러가 발생하였습니다. map 관련해서 초기 값이 안들어오는 부분의 에러인것을 확인하고 userData 옵셔널 체이닝을 에 해당 하는 값에 앞부분만 주었는데 에러가 발생한거 같습니다. 자세한 코드는 이렇습니다. <Workspaces> {/* 해당 워크 스페이스 이동 */} {userData?.Workspaces.map((ws) => { return ( <Link key={ws.id} to={`/workspace/${123}/channel/일반`}> <WorkspaceButton>{ws.name.slice(0, 1).toUpperCase()} </WorkspaceButton> </Link> ); })} <AddButton onClick={onClickCreateWorkspace}> +</AddButton> </Workspaces> 여기서 Workspaces에도 옵셔널 체이닝을 걸어줘야 에러가 풀렸는데요. userData?Workspaces?.map... 제로초님의 코딩을 전부 클론하여 작성하였는데 왜 이런 문제가 발생했는지 이해를 못하고 있습니다. 혹여 typescript에서는 전부 옵셔널 체이닝을 적용해줘야하나요 ... ?? 세부적인 코드는 아래 첨부드립니다. 아 그리고 userData는 정상적으로 다 받아옵니다. import fetcher from '@utils/fetcher'; import axios from 'axios'; import { type } from 'os'; import React, { useCallback, ReactNode, useState } from 'react'; import { Redirect, Route, Switch, useParams } from 'react-router'; import useSWR from 'swr'; import { Header, RightMenu, ProfileImg, WorkspaceWrapper, Workspaces, Channels, Chats, WorkspaceName, MenuScroll, ProfileModal, LogOutButton, WorkspaceButton, AddButton, WorkspaceModal, } from '@layouts/Workspace/styles'; import gravatar from 'gravatar'; import Channel from '@pages/Channel'; import DirectMessage from '@pages/DirectMessage'; import Menu from '@components/Menu'; import { Link } from 'react-router-dom'; import { IChannel, IUser, IWorkspace } from '@typings/db'; import { Button, Input, Label } from '@pages/SignUp/styles'; import useInput from '@hooks/useInput'; import Modal from '@components/Modal'; import { toast } from 'react-toastify'; import CreateChannelModal from '@components/CreateChannelModal'; type Props = { children?: ReactNode; }; function Workspace({ children }: Props) { const [showUserMenu, setShowUserMenu] = useState(false); const [showCreateWorkspaceModal, setShowCreateWorkspaceModal] = useState(false); const [showWorkSpaceModal, setShowWorkSpaceModal] = useState(false); const [showCreateChannelModal, setShowCreateChannelModal] = useState(false); const [newWorkSpace, onChangeNewSpace, setNewWorkSpace] = useInput(''); const [newUrl, onChangeNewUrl, setNewUrl] = useInput(''); const { workspace } = useParams<{ workspace: string }>(); const { data: userData, error, revalidate, mutate, } = useSWR<IUser | false>('http://localhost:3095/api/users', fetcher); const { data: channelData } = useSWR<IChannel[]>( userData ? `http://localhost:3095/api/workspaces/${workspace}/channels` : null, fetcher, ); const onLogout = useCallback(() => { axios .post('http://localhost:3095/api/users/logout', null, { withCredentials: true, }) .then(() => { // revalidate(); mutate(false, false); }); }, []); const onClickUserProfile = useCallback((e) => { e.stopPropagation(); setShowUserMenu((prev) => !prev); }, []); const onClickCreateWorkspace = useCallback(() => { setShowCreateWorkspaceModal(true); }, []); const onCreateWorkspace = useCallback( (e) => { e.preventDefault(); if (!newWorkSpace || !newWorkSpace.trim()) return; if (!newUrl || !newUrl.trim()) return; axios .post( 'http://localhost:3095/api/workspaces', { workspace: newWorkSpace, url: newUrl, }, { withCredentials: true, }, ) .then(() => { revalidate(); setShowCreateWorkspaceModal(false); setNewWorkSpace(''); setNewUrl(''); }) .catch((error) => { console.dir(error); toast.error(error.response?.data, { position: 'bottom-center' }); }); }, [newWorkSpace, newUrl], ); const onCloseModal = useCallback(() => { setShowCreateWorkspaceModal(false); setShowCreateChannelModal(false); }, []); const toggleWorkSpaceModal = useCallback(() => { setShowWorkSpaceModal((prev) => !prev); }, []); const onClickAddChannel = useCallback(() => { setShowCreateChannelModal(true); }, []); if (!userData) { return <Redirect to="/login" />; } return ( <div> <Header> <RightMenu> {/* 우측 상단 프로필 active */} <span onClick={onClickUserProfile}> <ProfileImg src={gravatar.url(userData.email, { s: '28px', d: 'retro' })} alt={userData.nickname} /> {showUserMenu && ( <Menu style={{ right: 0, top: 38 }} show={showUserMenu} onCloseModal={onClickUserProfile}> <ProfileModal> <img src={gravatar.url(userData.email, { s: '36px', d: 'retro' })} alt={userData.nickname} /> <div> <span id="profile-name">{userData.nickname}</span> <span id="profile-active">Active</span> </div> </ProfileModal> <LogOutButton onClick={onLogout}>로그아웃</LogOutButton> </Menu> )} </span> </RightMenu> </Header> <WorkspaceWrapper> <Workspaces> {/* 해당 워크 스페이스 이동 */} {userData?.Workspaces.map((ws) => { return ( <Link key={ws.id} to={`/workspace/${123}/channel/일반`}> <WorkspaceButton>{ws.name.slice(0, 1).toUpperCase()} </WorkspaceButton> </Link> ); })} <AddButton onClick={onClickCreateWorkspace}> +</AddButton> </Workspaces> <Channels> <WorkspaceName onClick={toggleWorkSpaceModal}>Sleact</WorkspaceName> <MenuScroll> <Menu show={showWorkSpaceModal} onCloseModal={toggleWorkSpaceModal} style={{ top: 95, left: 80 }}> <WorkspaceModal> <button onClick={onClickAddChannel}>채널만들기</button> <button onClick={onLogout}>로그아웃</button> </WorkspaceModal> </Menu> {channelData?.map((v) => ( <div>{v.name}</div> ))} </MenuScroll> </Channels> <Chats> <Switch> <Route path="/workspace/:workspace/channel/:channel" component={Channel} /> <Route path="/workspace/:workspace/dm/:id" component={DirectMessage} /> </Switch> </Chats> </WorkspaceWrapper> {/* 워크 스페이스 생성 모달 onClickCreateWorkspace */} <Modal show={showCreateWorkspaceModal} onCloseModal={onCloseModal}> <form onSubmit={onCreateWorkspace}> <Label id="workspace-label"> <span>워크스페이스 이름</span> <Input id="workspace" value={newWorkSpace} onChange={onChangeNewSpace}></Input> </Label> <Label id="workspace-label"> <span>워크스페이스 url</span> <Input id="workspace" value={newUrl} onChange={onChangeNewUrl}></Input> </Label> <Button type="submit">생성하기</Button> </form> </Modal> {/* 채널 만들기 모달 onClickAddChannel*/} <CreateChannelModal show={showCreateChannelModal} onCloseModal={onCloseModal} setShowCreateChannelModal={setShowCreateChannelModal} /> </div> ); } export default Workspace;
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
TypeConversion 내부 질문드립니다
항상 좋은 강의 감사드립니다. 1. if (Conversion<const FromType*, const ToType*>::exist) 이 부분에서왜 포인터를 사용했는지 궁금합니다. 2. TypeConversion은 결국 많은 템플릿을 생성하게 되는데 그럴 경우 메모리에 문제가 없는지 궁금합니다. 3.Conversion 의 경우 컴파일러가 비슷하다고 판단 할경우 From을 To로 변환을 하고 결국 그걸 이용해 변경 여부를 판단하게 되는데 컴파일러 입장에서 비슷할 경우 변환을 시키지 않는 것이 이득일텐데 굳이 변환을 하는 원리가 궁금합니다. 4. 마지막으로 struct로 만드실 때와 class로 만들 실 때의 기준이 있으신가요? template 흑마법 정말 잘 배웠습니다 핵? 편법같은 느낌이 있어 관심이 많이 가게 되었습니다. 추후 강의 기대하겠습니다!
-
미해결Do it! 자바 프로그래밍 입문 with 은종쌤
형 변환에서의 데이터 손실에 대한 질문
double dNum = 3.14; int num = (int)dNum; 에서 num은 메모리에서 4byte의 공간을 가지게 되는데 위의 경우 형 변환으로 인해 .14가 날라갑니다. 그런데 그것이 메모리 상에서 아예 사라지는 것인지 아니면 메모리에는 값이 남아 있는데 4bytes씩 읽어서 .14를 못 읽어서 그런 것인지 궁금합니다. 만약 후자라면 메모리를 직접 접근해서 메모리 값으로 읽으면 값이 온전하게 3.14라고 읽을 수 있나요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 풀이 마구간정하기
function solution(target,array){ array.sort((a,b)=>a-b); let left = 1; let right = array[array.length-1]; let answer while(left<=right){ let mid = Math.floor((left+right)/2); let cnt = 1; let start = array[0]; let result =[] for(let i=1; i<array.length; i++ ){ let between =array[i]- start; if(mid<=between){ cnt++; result.push(between) start = array[i]; } } if(target === cnt){ answer = Math.min(...result); break }else if(target<cnt){ left = mid +1; }else{ right = mid -1; } } return answer; } 이런식으로 풀어도 괜찮을까요?
-
미해결스프링 시큐리티
여기서 왜 401 ERROR 가 발생하는지 잘 모르겠습니다.
안녕하세요. 강의 매우 잘 듣고 있습니다. 다름이 아니라 질문이 있는데요. 시큐리티 설정은 이렇게 해주고, ajax.http 실행시켜주면 HTTP/1.1 401 X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Frame-Options: DENY Content-Length: 0 Date: Sat, 05 Feb 2022 13:50:25 GMT Keep-Alive: timeout=60 Connection: keep-alive <Response body is empty> Response code: 401; Time: 4ms; Content length: 0 bytes 401 에러가 발생하는데 어디쪽을 확인하면 좋을까요..? AjaxSecurityConfig @Order(0)@Configurationpublic class AjaxSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(ajaxAuthenticationProvider()); } @Bean public AuthenticationProvider ajaxAuthenticationProvider() { return new AjaxAuthenticationProvider(); } @Bean public AuthenticationSuccessHandler ajaxAuthenticationSuccessHandler() { return new AjaxAuthenticationSuccessHandler(); } @Bean public AuthenticationFailureHandler ajaxAuthenticationFailureHandler() { return new AjaxAuthenticationFailureHandler(); } @Override protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/api/**") .authorizeRequests() .antMatchers("/api/messages").hasRole("MANAGER") .anyRequest().authenticated() .and() .addFilterBefore(ajaxLoginProcessingFilter(), UsernamePasswordAuthenticationFilter.class) ; http .exceptionHandling() .authenticationEntryPoint(new AjaxLoginAuthenticationEntryPoint()) .accessDeniedHandler(ajaxAccessDeniedHandler()) ; http.csrf().disable(); } @Bean public AccessDeniedHandler ajaxAccessDeniedHandler() { return new AjaxAccessDeniedHandler(); } @Bean public AjaxLoginProcessingFilter ajaxLoginProcessingFilter() throws Exception { AjaxLoginProcessingFilter filter = new AjaxLoginProcessingFilter(); filter.setAuthenticationManager(authenticationManagerBean()); filter.setAuthenticationSuccessHandler(ajaxAuthenticationSuccessHandler()); filter.setAuthenticationFailureHandler(ajaxAuthenticationFailureHandler()); return filter; }}
-
해결됨프론트엔드 개발자를 위한, 실전 웹 성능 최적화(feat. React) - Part. 2
useRef로 dom을 선택한 부분이 img태그가 아닌 최상단 div태그인 이유가 궁금합니다.
안녕하세요! 강사님 질문드립니다.useRef로 img의 dom을 선택하는데 ref를 img태그(19번)가 아닌상단의 div태그(18번)의 ref를 걸으신 이유가 따로 있는걸까요? 아니면 둘다 똑같은건가요? 저는 당연히 img태그의 ref를 걸어야한다고 생각했어서 질문드려요! (19번라인) 앗 죄송해요 22분 22초경에 img태그로 ref위치 수정하시네요!!.. 답변안해주셔도될것같습니다~ 좋은강의 만들어주셔서 감사합니다
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
ssh 명령어 port 22: Connection timed out
안녕하세요. 제로초님! 좋은 강의 잘 수강하고 있습니다. ec2 생성하기 영상에서 배포에 필요한 첫 단계로 aws 인스턴스를 만들어 ssh 연결을 하는 과정에서 어려움이 발생했습니다. 스스로 최대한 해결하려고 시도해봤지만, 안타깝게도 그러지 못 하고 며칠간 삽질만 했습니다. 삽질한 내용을 이 곳에 담기 어려워보여개인 기술 블로그에 작성하였으니 해당 내용을 보시고 조언을 해주시면 감사하겠습니다. https://juicyjerry.tistory.com/283 좋은 강의를 만들어 주셔서 감사드리고 오늘도 좋은 하루 보내세요
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
Custom Dataset과 헷갈리는 부분이 있어서 질문드립니다.
1. 앞선 Oxford pet 데이터도 VOC 스타일과 유사하다고 하셨는데, 그렇다면 Middle Format이 아닌, voc2coco 패키지를 활용하여 Coco Format 으로 맞추어줘도 괜찮은 걸까요? 2. 또한 그렇다면 MMDetection 쓸때 사용하는 데이터셋이 VOC 스타일인지, Coco 스타일인지, Custom 스타일인지 파악하는게 우선이 되어야 할까요? 3. 메타파일 중 trainval 은 train 파일과 val 파일을 합쳐놓은 것 같은데 굳이 이렇게 합쳐서 하나의 메타파일로 둔 이유는 무엇인가요??