묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨남박사의 파이썬 기초부터 실전 100% 활용
list.reverse() 출력에 대해서 질문있습니다.
안녕하세요. 남박사님. list() 데이터 구조에서 reverse() 메서드의 결과값이 이해가 안되서 질문을 남기게 되었습니다.a=[4,5,6,1,2,3] a.sort() print(a) b=[4,5,6,1,2,3] b.reverse() print(b)[1, 2, 3, 4, 5, 6] [3, 2, 1, 6, 5, 4]sort()는 정방향 정렬, reverse()는 역방향 정렬이라고 배웠는데요. 역방향 정렬의 결과값이 제가 생각했을 때는 [6,5,4,3,2,1]로 출력되어야 할것 같은데 제 예상과는 반대로 [3,2,1,6,5,4]로 출력되고 있습니다. 왜 그런지 궁금합니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
lombok 적용 오류
[질문 내용]안녕하세요. 강의 초반에 롬복 설치하고 테스트하는 과정에서 오류가 발생해 문의 드립니다. 강의에서 설명해주신대로 롬복 활성화 후, annotation enable 설정도 다 해봤는데도 setter,getter가 적용이 되지 않습니다.혹시 해결 방법이 있을까요?구글링해서 캐시도 삭제해보고 인텔리제이 재설치도 해봤는데도 안돼서 문의드립니다. 혹시 몰라서 사진 첨부합니다.감사합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
말그대로 역수열 원리 그자체로 구현했는데 코딩테스트에서는 못쓸것같습니다
문제에서 사람이 처음 생각하는 그 원리 그자체로 구현했습니다.print 중간 중간에 계속 찍고, 오류 수정하고 , 찍고 오류 수정하고, 디버깅하고 수정하고 또 하고 수정하고,처음부터 완벽하게 하는거 if, for문 조건 틀리지않게 하는거 아니면,코딩테스트 시간적으로는(10분 15분 사이로는) 힘들것같습니다.풀이, 강의듣는데 코딩테스트에서는 저런 사고를 많이 늘려야할것같습니다. 많이 배우고 있습니다. 4일안으로 완강해보겠습니다
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Vscode 질문이요~!
안녕하세요 작년에 혼자 vscode로 플러터 깔짝하다가 올해 각잡고 해볼려고 코팩님 mac 셋업 따라하고 vscode로 시뮬레이터 작동이 안되는데요 operation not permitted exit code 126이런 메세지? 가 뜨는데요 제 추측으로는 터미널 설정 때문에 에러가 나는거 같은데요전 vscode가 친숙한데 어떻게 방법 없을까요?flutter doctor 로 체크했을 땐 이상 없습니다!!
-
미해결Slack 클론 코딩[실시간 채팅 with React]
workspace 값이 읽히지 않습니다.(prototype)
채널에서 워크스페이스 정보가 뜨지 않아 검사 창을 열어보니, 제 UserData 객체에 Workspace객체가 없고, prototype 객체가 하나 있는 것을 발견했습니다.이후 네트워크에서 값을 확인해보니, 서버는 user의 data에 정상적으로 워크스페이스를 보내고 있는 것도 확인했습니다.혹시나 싶어, 새 워크스페이스를 만들어서 보내도 서버에서는 정상적으로 처리해주었지만, 클라이언트에선 전혀 받지 못하고있습니다. 이럴 경우 어떻게 처리해주어야 하는지 여쭤보고싶습니다.워크스페이스 부분의 코드를 첨부하며 리액트(+dom)의 버전은 17, axios의 버전은 0.26.1, swr의 버전은 2.0.3 입니다. import Menu from '../../components/Menu'; import loadable from '@loadable/component'; import axios from 'axios'; import React, { useCallback, useState, VFC } from 'react'; import { Route, Switch } from 'react-router'; import useSWR from 'swr'; import fetcher from '../../utills/fetcher'; import { AddButton, Channels, Chats, Header, LogOutButton, MenuScroll, ProfileImg, ProfileModal, RightMenu, WorkspaceButton, WorkspaceModal, WorkspaceName, Workspaces, WorkspaceWrapper, } from '../Workspace/styles'; import { IUser } from '../../typings/db'; import { Link } from 'react-router-dom'; import Modal from '@components/Modal'; import { Button, Input, Label } from '@pages/Login/styles'; import useInput from '@hooks/useInput'; import { toast } from 'react-toastify'; const Channel = loadable(() => import('../../pages/Channel')); const DirectMessage = loadable(() => import('../../pages/DirectMessage')); const Workspace: VFC = () => { const { data: UserData, error, mutate, } = useSWR<IUser | false>('/api/users', fetcher, { dedupingInterval: 2000, }); const [showUserMenu, setShowUserMenu] = useState(false); const [showCreateWorkspaceModal, setShowCreateWorkspaceModal] = useState(false); const [newWorkspace, onChangeNewWorkspace, setNewWorkpsace] = useInput(''); const [newUrl, onChangeNewUrl, setNewUrl] = useInput(''); const onClickUserProfile = useCallback((e) => { e.stopPropagation(); setShowUserMenu((prev) => !prev); }, []); const onClickCreateWorkspace = useCallback(() => { setShowCreateWorkspaceModal(true); }, []); console.log('showUserMenu3 :', showUserMenu); console.log('UserData LastCheck: ', UserData); const onLogout = useCallback(() => { axios .post('http://localhost:3095/api/users/logout', null, { withCredentials: true, }) .then((response) => { mutate(response.data, false); console.log('onLogOut :', response.data); }) .catch((error) => { alert(error.response.data ? error.response.data : '애러 캐치 실패'); }); }, []); const onCloseModal = useCallback(() => { setShowCreateWorkspaceModal(false); }, []); const onCreateWorkspace = useCallback( (e) => { e.preventDefault(); if (!newWorkspace || !newWorkspace.trim()) return; if (!newUrl || !newUrl.trim()) return; axios .post( '/api/workspaces', { workspace: newWorkspace, url: newUrl, }, { withCredentials: true, }, ) .then((response) => { console.log('modalData :', response); mutate(); setShowCreateWorkspaceModal(false); setNewWorkpsace(''); setNewUrl(''); console.log('data check CreateWS: ', UserData); }) .catch((error) => { console.dir(error); toast.error(error.response?.data, { position: 'bottom-center' }); }); }, [newWorkspace, newUrl], ); // if (!data) { // console.log('data check back to login: ', data); // return <Redirect to="/login" />; // } console.log(' :', UserData); return ( <div> <Header> <span onClick={onClickUserProfile}> <ProfileImg src="../../img/leaf_toy.png" alt="fail to load profile" /> {showUserMenu && ( <Menu style={{ right: 0, top: 38 }} show={showUserMenu} onCloseModal={onClickUserProfile}> <ProfileModal> <img src="../../img/leaf_toy.png" /> <div> <span id="profile-name">{UserData ? UserData.nickname : 'false'}</span> <span id="profile-active">Active</span> </div> </ProfileModal> <LogOutButton onClick={onLogout}>로그아웃</LogOutButton> </Menu> )} </span> </Header> <WorkspaceWrapper> <Workspaces> {UserData !== false && UserData?.Workspaces?.map((ws) => { return ( <Link key={ws.id} to={`/workspace/${ws.id}/channel/일반`}> <WorkspaceButton>{ws.name.slice(0, 1).toUpperCase()}</WorkspaceButton> </Link> ); })} <AddButton onClick={onClickCreateWorkspace}>+</AddButton> </Workspaces> <Channels> <WorkspaceName>Select</WorkspaceName> <MenuScroll>menuScroll</MenuScroll> </Channels> <Chats> <Switch> <Route path="/workspace/channel" component={Channel} /> <Route path="/workspace/dm" component={DirectMessage} /> </Switch> </Chats> </WorkspaceWrapper> <Modal show={showCreateWorkspaceModal} onCloseModal={onCloseModal}> <form onSubmit={onCreateWorkspace}> <Label id="workspace-label"> <span>workspace 이름</span> <Input id="workspace" value={newWorkspace} onChange={onChangeNewWorkspace}></Input> </Label> <Label id="workspace-url-label"> <span>workspace url</span> <Input id="workspace" value={newUrl} onChange={onChangeNewUrl}></Input> </Label> <Button type="submit">생성하기</Button> </form> </Modal> </div> ); }; export default Workspace; 또, fetcher의 문제일 수 있을 것 같아, fetcher의 코드 또한 올려봅니다. import axios from 'axios'; import React from 'react'; const fetcher = <Data,>(url: string): any => { axios.get<Data>(url, { withCredentials: true }).then((response) => response.data); }; export default fetcher;
-
미해결[React 1부] 만들고 비교하며 학습하는 React
[순수JS 1] 검색결과 2 reset 버튼 이런식으로 하면 문제되는 점이 있을까요?
안녕하세요 선생님 강의 잘 듣고 많이 배워가고 있는 초보자입니다.저는 searchResultView의 element의 innerHTML을 초기화 해버리는 식으로 풀이를 했었는데요, 혹시 이러면 나중에 문제가 발생할 수 있는 부분이 있을까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뒤집은 소수 / 런타임 에러 + 궁금증
안녕하세요 강사님예시 문제는 합격하는데 다른 4개의 테스트 케이스는 통과하지 못하고 있습니다.문제는 런타임에러가 뜨는데 왜 뜨는지 정확한 이유를 아무리 보아도 모르겠습니다...많이 더러운 코드지만 무엇이 문제인지 확인 한번 부탁 드리겠습니다...import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public String solution(String str) { String answer = ""; String[] arr = new StringBuilder(str).reverse().toString().split(" "); List<Integer> list = new ArrayList<>(); for (String s : arr) { int target = Integer.parseInt(s); if (target != 2 && target % 2 == 0) continue; if (target == 1) continue; boolean check = true; for (int j = 3; j <= Math.sqrt(target); j+=2) { if (target % j == 0) { check = false; break; } } if (check) list.add(target); } for (int i =list.size()-1; i >= 0; i--) { answer += list.get(i) + " "; } return answer; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int input1 = in.nextInt(); in.nextLine(); String str = in.nextLine(); Main main = new Main(); System.out.println(main.solution(str)); return; } }알아낸점저와 비슷한 사례를 겪는 분들을 질문창에서 발견하고 강사님이 적어두신 2번 케이스의 문제를 복사해서 적어보았는데 통과하였습니다.저는 split() 메서드를 이용해서 입력받은 문자열을 배열로 변경하는데 이때 문자열 맨 뒤에 공백이 존재하게 되면 런타임 에러가 발생 하는것을 확인했습니다. 아무래도 그부분 때문인것 같은데 맞다면 확인 한번 부탁드리겠습니다.변경코드를 수정하였습니다.import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public String solution(String[] arr) { String answer = ""; for (int i = 0; i < arr.length; i++) { String s = new StringBuilder(arr[i]).reverse().toString(); int target = Integer.parseInt(s); if (target != 2 && target % 2 == 0) continue; if (target == 1) continue; boolean check = isPrime(target); if (check) answer += target + " "; } return answer; } private boolean isPrime(int target) { for (int j = 3; j <= Math.sqrt(target); j+=2) { if (target % j == 0) { return false; } } return true; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int input1 = in.nextInt(); String[] arr = new String[input1]; for (int i = 0; i < input1; i++) { arr[i] = in.next(); } Main main = new Main(); System.out.println(main.solution(arr)); return; } } 이렇게 하니 해결되었습니다. 궁금증혹시 실제 코딩테스트 볼때도 split을 사용할때 요청값끝부분에 있는 공백의 존재 가능성도 염두해두고 사용을 해야하나요? 아니면 단순 이 사이트의 실수였을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
UserHandlerExceptionResolver
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]여기에 질문 내용을 남겨주세요.MyHandlerExceptionResolver 는 에러가 터지면 서블릿 컨테이너까지 가고 또 다시 /error을 요청하고UserHandlerExceptionResolver 이건 그냥 바로 그자리에서 끝내는데그 차이가 response.sendError(...)이 response.SendError 해주냐 안해주냐 차이라고 생각하면 될까요 ?
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
CDN에 리소스를 올린다는 의미가 무엇인가요??
Static resource는 cdn에 올려서 사용한다고 하셨는데.. cdn에 올린다는 의미가 무엇인가요?사용자가 서버에 접속했을때 리소스를 cdn에서 가져올 수 있는지 궁금합니다
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
API 서버를 WAS로 볼 수 있는건가요??
디비와 통신하고 비지니스 로직을 처리하여 클라이언트에 응답하는 API 서버를 WAS라고 할 수 있을까요??
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
왜 findByLoginId는 Optional로 반환하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요! MemberRepository 코드 중에 findById는 예전 강의에서 스펙상 Member 객체를 반환하는걸로 권고(?)된다고 들었던 것 같은데, 그렇다면 왜 findByLoginId는 Optional<Member>로 반환하는건가요?Optional이 NullPointerException 발생을 줄이기 위해 래퍼 역할을 한다는 것은 알겠는데, 두 메서드의 반환값 차이가 있는 이유가 무엇인지 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]패치 조인을 한다는 것은 "영속성 컨텍스트를 사용한다." 라고 이해해도 되나요?
-
해결됨Flutter 앱 개발 기초
강의 내 Flutter 버전 문의
안녕하세요.제가 못찾아서 그런지 강의에 이용되는 Flutter 버전을 어떻게 맞추어야 하나요~?
-
미해결스프링 핵심 원리 - 고급편
강의 자료 다운로드 안돼요
아이패드로 강의 시청하다가 강의자료 다운로드 누르고 다시 노트북으로 다운로드 받을려니깐 다운로드를 받을 수 있는 표시가 없어요
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
split 사용
function solution(s) { let answer = ""; let count = 0; for (let i = 0; i < s.length; i++) { if (s[i] === s[i + 1]) { count++; } else if (s[i] !== s[i + 1]) { answer += s[i] + (count + 1); count = 0; } } return answer.split("1").join(""); } let str = "KKHSSSSSSSE"; console.log(solution(str));강사님 코드가 거의 비슷한데 마지막에 1을 없애주기 위해서 split을 사용해서 1을 없애 주고 다시 문자열로 만들어주었는데, 이정도는 시간과 별로 상관이 없나요??
-
해결됨외워서 끝내는 네트워크 핵심이론 - 기초
DNS 서버를 여러대 두는 이유
영상보고 도움 많이 받고 있습니다.영상에서 naver.com 에 대한 DNS가 여러대 있을수도 있다고 했는데 DNS 서버를 여러대 두는 이유는 무엇인가요..? 제가 생각하는건 A 서비스를 서버 한대를 띄웠다고 했을때, 트래픽이 많아지면 서버의 대수를 늘려야한다고 생각하는데요.DNS서버도 이런 트래픽의 영향때문에 여러대를 두는 것일까요? 추가로 궁금한 점은 DNS 서버한테 요청을 할때도 L2 -> L3 이런식으로 다 거쳐서 올라가는건가요?? 질문이 허접한거 같지만 ㅠㅠ 잘 부탁드립니다
-
해결됨따라하며 배우는 리액트 A-Z[19버전 반영]
map 함수를 쓸때
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 위는 JSX고 아래는 자바스크립트라서 묶어주는 괄호가 다른건가요??똑같이 소괄호 또는 중괄호 하면 오류가나는데 이유가 있나요??
-
미해결CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조
브라우저 렌더링 부분 교재 관련 질문입니다!
안녕하세요 강사님! 우선 좋은 강의 감사드립니다 :)열심히 보고 있습니다 ㅎㅎ..브라우저 렌더링 관련되어 의문이 생겨 질문을 남겨보니 시간 여유있으실 때 답변해주시면 좋겠습니다.렌더 트리? 렌더 레이어 ?? 렌더객체??짧게 브라우저 렌더링 관련하여 공부를 하고 인강을 들으면서 다시 복기를 하였을 때 렌더레이어라는 말을 처음 들어보는 것 같아 추가적으로 정보를 찾아보려고 browser render layer 와 같은 키워드를 찾아보았습니다. [Naver D2 - 하드웨어 가속에 대한 이해와 적용] 글을 발견하였고 아래와 같은 설명이 있었습니다.DOM 트리: HTML 웹 페이지를 파싱한 트리로, HTML 문서의 각 요소를 쉽게 처리(추가, 삭제 등)하기 위하여 브라우저의 엔진이 사용하는 트리다. RenderObject 트리: DOM 트리로부터 만들어지는 트리로, DOM 트리의 노드 가운데 실제 화면에 표현되는 노드만으로 구성된 트리다. RenderLayer: 브라우저의 엔진이 하드웨어 가속 등을 처리하기 위해 사용하는 논리적인 레이어로, 각 RenderObject의 속성에 따라 RenderLayer에 할당된다. GraphicsLayer: 하드웨어 가속 처리를 위한 물리적인 레이어로, 레이어별 RenderObject를 GraphicsLayer 단위로 렌더링한 뒤 최종적으로 GPU를 통해 합성된다. 그리고 PDF 기준 150~151번째 페이지에 아래와 같은 코멘트가 있습니다. Q. 렌더객체와 렌더레이어는 1:1 대응일까요?- NO : display:none으로 사라지는 노드들이 있을 수 있기 때문입니다.하지만 DOM 트리와 렌더트리는 1:1대응이 됩니다. 이렇게 렌더트리가 생성된 후..제가 이해한 바로는 위 D2에서 이야기하는 RenderObject Tree 를 렌더트리라고 명명 하신 것 같습니다.(아니면 저의 이해력부족인 것 같습니다 🥲)DOM트리에서 렌더트리(RenderObject Tree)를 생성할때 이미 font-size의 상속 및 display:none에 해당하는 DOM 객체에 대한 수정이 이루어지고 그렇게 된다면 1:1 대응이 되지 않는것이 맞는 것 같다는 생각이 들어 문의를 드립니다!그렇다면 DOM트리와 렌더트리(Render Object Tree) 렌더레이어(Render Layer) 그 어느것도 1:1대응이 되지 않는 것이 아닐까요?질문 끝까지 읽어주셔서 감사합니다 :)답변 기다리고 있겠습니다!
-
해결됨따라하며 배우는 리액트 A-Z[19버전 반영]
수업자료 질문
안녕하세요수업에서 보여주는 nextjs13 관련 pdf 문서는 따로 공유 안 되는 걸까요...?
-
미해결
passport를 이용한 로컬 로그인 구현중 프론트가 변하지 않음
강의 보면서 passport를 이용해 로컬 로그인 구현중이지만 로그인을 해도 <% if user %>로 분기처리한 부분이 작동하지 않고 redirect 해도 동일한 화면만 보입니다. 소스코드는 github에서 가져와서 동일할 것입니다. 제가 원인을 찾아보던중 passport 전략의 마지막 부분이라 할 수 있는 serializeUser으로 user가 제대로 done을 통해 넘어가지 못했나 싶어 serializeUser에서 console.log(user.id)를 밑에 사진처럼 시도 해봤지만 문제 없었습니다.module.exports = () => { //serializeUser. 로그인 시 실행 passport.serializeUser((user, done) => { console.log(user); done(null,user.id); //session에 저장하고 싶은 정보 = user.id }); //deserializeUser. 매 요청 시 실행. serUser에서 done의 두번째 인수(=user.id)가 매개변수(=id) passport.deserializeUser((id,done) => { //db에서 아이디로 유저를 찾고 User.findOne({ where : {id}}) .then(user => done(null, user)) //user를 req.user에 저장 .catch(err => done(err)); }); local(); kakao(); };그러면 마지막 done(null,user.id)에서 세션으로 제대로 유저 아이디를 못 올려주고 있는거 같은데 뭐가 문제인지 모르겠습니다. 그리고 참고로 2번이상 로그인을 시도할 시 뷰는 안변하지만 쿼리에 '로그인한 상태입니다'라고 에러메세지가 뜹니다. 그리고 참고로 app.js에서 아래와 같이initialize와 sessino은 세션 생성후 적용했습니다app.use(session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, cookie: { httpOnly: true, secure: false, }, })); app.use(passport.initialize()); app.use(passport.session());