묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버 실행
이리저리 해봐도 에러는 없는거 같은데 서버 실행이 안되네요... 어떻게 해결할수 있을까요??
-
미해결만들면서 배우는 프론트엔드 DO IT 코딩 (Next.js, Typescript)
사용자를 찾을 수 없다.
안녕하세요, 강의를 따라하던 중 사용자를 찾을 수 없다는 페이지가 떠서 어디서 오류가 났는지 확인을 못하겠어서 질문드립니다. 혹시몰라 이 강의 까지 커밋한 깃허브 주소 올려봅니다,,https://github.com/cccodus313/Blah-Blah/tree/startimport { ServiceLayout } from '@/components/service_layout'; import { useAuth } from '@/contexts/auth_user.context'; import { InAuthUser } from '@/models/in_auth_user'; import { Avatar, Box, Button, Flex, FormControl, FormLabel, Switch, Text, Textarea, useToast, VStack, } from '@chakra-ui/react'; import { GetServerSideProps, NextPage } from 'next'; import { useState, useEffect } from 'react'; import ResizeTextarea from 'react-textarea-autosize'; import axios, { AxiosResponse } from 'axios'; import MessageItem from '@/components/message_item'; import { InMessage } from '@/models/message/in_message'; interface Props { userInfo: InAuthUser | null; } async function postMessage({ message, uid, author, }: { message: string; uid: string; author?: { displayName: string; photoURL?: string; }; }) { if (message.length <= 0) { return { result: false, message: '내용을 입력해주세요', }; } try { await fetch(`/api/message.add`, { method: 'post', headers: { 'content-type': 'application/json', }, body: JSON.stringify({ uid, message, author, }), }); return { result: true, }; } catch (err) { console.error(err); return { result: false, message: '등록 실패', }; } } const UserHomePage: NextPage<Props> = function ({ userInfo }) { const [message, setMessage] = useState(''); const [isAnonymous, setAnonymous] = useState(true); const [messageList, setMessageList] = useState<InMessage[]>([]); const toast = useToast(); const { authUser } = useAuth(); async function fetchMessageList(uid: string) { try { const resp = await fetch(`/api/message.list?uid=${uid}`); if (resp.status === 200) { const data = await resp.json(); setMessageList(data); } } catch (err) { console.log(err); } } useEffect(() => { if (userInfo === null) return; fetchMessageList(userInfo.uid); }, [userInfo]); if (userInfo === null) { return <p>사용자를 찾을 수 없습니다.</p>; } const isOwner = authUser !== null && authUser.uid === userInfo.uid; return ( <ServiceLayout title={`${userInfo.displayName}의 홈`} minH="100vh" backgroundColor="gray.50"> <Box maxW="md" mx="auto" pt="6"> <Box borderWidth="1px" borderRadius="lg" overflow="hidden" mb="2" bg="white"> <Flex p="6"> <Avatar size="lg" src={userInfo.photoURL ?? 'https://bit.ly/broken-link'} mr="2" /> <Flex direction="column" justify="center"> <Text fontSize="md">{userInfo.displayName}</Text> <Text fontSize="xs">{userInfo.email}</Text> </Flex> </Flex> </Box> <Box borderWidth="1px" borderRadius="lg" overflow="hidden" mb="2" bg="white"> <Flex align="center" p="2"> <Avatar size="xs" src={isAnonymous ? 'https://bit.ly/broken-link' : authUser?.photoURL ?? 'https://bit.ly/broken-link'} mr="2" /> <Textarea bg="gray.100" border="none" boxShadow="none !important" placeholder="어떤이야기를 하고 싶나요?" borderRadius="md" resize="none" minH="unset" overflow="hidden" fontSize="xs" mr="2" minRows={1} maxRows={7} as={ResizeTextarea} value={message} onChange={(e) => { if (e.target.value) { const lineCount = (e.target.value.match(/[^\n]*\n[^\n]*/gi)?.length ?? 1) + 1; if (lineCount > 7) { toast({ title: '최대 7줄까지만 입력가능합니다', position: 'top-right', }); return; } } setMessage(e.target.value); }} /> <Button disabled={message.length === 0} bgColor="#FFB86C" color="white" colorScheme="yellow" variant="solid" size="sm" onClick={async () => { const postData: { message: string; uid: string; author?: { displayName: string; photoURL?: string; }; } = { message, uid: userInfo.uid, }; if (isAnonymous === false) { postData.author = { photoURL: authUser?.photoURL ?? 'https://bit.ly/broken-link', displayName: authUser?.displayName ?? 'anonymous', }; } const messageResp = await postMessage(postData); if (messageResp.result === false) { toast({ title: '등록실패', position: 'top-right' }); } setMessage(''); }} > 등록 </Button> </Flex> <FormControl display="flex" alignItems="center" mt="1" mx="2" pb="2"> <Switch size="sm" colorScheme="orange" id="anonymous" mr="1" isChecked={isAnonymous} onChange={() => { if (authUser === null) { toast({ title: '로그인이 필요합니다', position: 'top-right', }); return; } setAnonymous((prev) => !prev); }} /> <FormLabel htmlFor="anonymous" mb="0" fontSize="xx-small"> Anonymous </FormLabel> </FormControl> </Box> <VStack spacing="12px" mt="6"> {messageList.map((messageData) => ( <MessageItem key={`message-item${userInfo.uid}-${messageData.id}`} item={messageData} uid={userInfo.uid} displayName={userInfo.displayName ?? ''} photoURL={userInfo.photoURL ?? 'https://bit.ly/broken-link'} isOwner={isOwner} /> ))} </VStack> </Box> </ServiceLayout> ); }; export const getServerSideProps: GetServerSideProps<Props> = async ({ query }) => { const { screenName } = query; if (screenName === undefined) { return { props: { userInfo: null, }, }; } try { const protocol = process.env.PROTOCOL || 'http'; const host = process.env.HOST || 'localhost'; const port = process.env.PORT || '3000'; const baseUrl = `${protocol}://${host}:${port}`; const userInfoResp: AxiosResponse<InAuthUser> = await axios(`${baseUrl}/api/user.info/${screenName}`); return { props: { userInfo: userInfoResp.data ?? null, }, }; } catch (err) { console.error(err); return { props: { userInfo: null, }, }; } }; export default UserHomePage;
-
미해결처음 만난 리액트(React)
(실습_리액트18)시계만들기_코드_index.js
import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; import Library from './chapter_03/Library'; import Clock from './chapter_04/Clock'; const root = ReactDOM.createRoot(document.getElementById('root')); setInterval(() => { root.render( <React.StrictMode> <Clock /> </React.StrictMode> ); },1000);
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
램이 16기가인데 문제 없이 강의의 사비스들을 실행시킬 수 있나요?
램이 16기가인데 강의에 나오는 서비스들을 문제없이 실행시킬 수 있나요??
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@BatchSize와 SQL Parsing
안녕하세요. 강의 잘 듣고 있습니다.BatchSize라는 기능을 배워서 상당히 놀라웠는데요.해당 기능을 사용해 실행되는 쿼리를 보니IN (?, ?)와 같이 바인딩 변수를 이용하는 것으로 보이는데만약 말씀하신것처럼 BatchSize를 1000개로 잡았다 할 떄최악의 경우 IN절 내부의 ? 바인딩 변수가 계속 변하게 된다면 (1개 ~ 1000개 )소프트 파싱의 이점을 살리지 못하는 경우가 발생할 수도 있나요 ??항상 좋은 강의 만들어주셔서 감사합니다
-
미해결다양한 사례로 익히는 SQL 데이터 분석
group by에 대해 질문 드립니다.
사용자별 월별 세션 접속 횟수의 구간별 분포 집계 SQL로 구하기 - 02위 과정을 학습하고 있습니다select month ,case when monthly_user_cnt = 1 then '0_only_first_session' when monthly_user_cnt between 2 and 3 then '2_between_3' when monthly_user_cnt between 4 and 8 then '4_between_8' when monthly_user_cnt between 9 and 14 then '9_between_14' when monthly_user_cnt between 15 and 25 then '15_between_25' when monthly_user_cnt >= 26 then 'over_26' end as gubun , count(*) as user_cnt from temp_01 group by month, case when monthly_user_cnt = 1 then '0_only_first_session' when monthly_user_cnt between 2 and 3 then '2_between_3' when monthly_user_cnt between 4 and 8 then '4_between_8' when monthly_user_cnt between 9 and 14 then '9_between_14' when monthly_user_cnt between 15 and 25 then '15_between_25' when monthly_user_cnt >= 26 then 'over_26' end order by 1, 2;위 쿼리에서 group by 항목이 이해가 잘 안되서 질문 드립니다.위와 같이 그룹을 지으면일자 + monthly_user_cnt 의 조합으로 그룹들이 만들어짐select에서select month ,case when monthly_user_cnt = 1 then '0_only_first_session' when monthly_user_cnt between 2 and 3 then '2_between_3' when monthly_user_cnt between 4 and 8 then '4_between_8' when monthly_user_cnt between 9 and 14 then '9_between_14' when monthly_user_cnt between 15 and 25 then '15_between_25' when monthly_user_cnt >= 26 then 'over_26' end as gubun위 쿼리로 넘어온 데이터(아직 컬럼으로 만들어지지 않은채 각 그룹별로 정의되어 넘어온 데이터)에 컬럼명을 붙여줌위와 같은 동작을 하는게 맞는지요?제가 이해하는게 맞는지 알고 싶습니다.
-
미해결Vue.js 완벽 가이드 - 실습과 리팩토링으로 배우는 실전 개념
권한요청 드립니다.
인프런 아이디 : @rnrn48159인프런 이메일 : rnrn48159@gmail.com깃헙 아이디 : rnrn48159@gmail.com깃헙 Username : thomasisong
-
미해결[백문이불여일타] 데이터 분석을 위한 중급 SQL 문제풀이
Set2 4번문제 질문 - New Companies
-조인에 대한 개념이 약간 헤깔려서 문의드립니다.-저는 아래와 같이 left outer join시에 senior_manger/MANGER/employee 테이블과의 조인 조건을 아래와 같이 상위의 CODE를 equal 조건으로 넣어야 정확히 일치하는 ROW를 조인할수 있는게 아닌지요?LEFT OUTER JOIN Lead_Manager LM ON (C.COMPANY_CODE=LM.COMPANY_CODE)LEFT OUTER JOIN Senior_Manager SM ON(LM.COMPANY_CODE=SM.COMPANY_CODE AND LM.LEAD_MANAGER_CODE=SM.LEAD_MANAGER_CODE)LEFT OUTER JOIN Manager M ON (SM.COMPANY_CODE=M.COMPANY_CODE AND SM.LEAD_MANAGER_CODE=M.LEAD_MANAGER_CODEAND SM.SENIOR_MANAGER_CODE=M.SENIOR_MANAGER_CODE)LEFT OUTER JOIN Employee E ON (M.COMPANY_CODE=E.COMPANY_CODE AND M.LEAD_MANAGER_CODE=E.LEAD_MANAGER_CODEAND M.SENIOR_MANAGER_CODE=E.SENIOR_MANAGER_CODEANDM.MANAGER_CODE=E.MANAGER_CODE)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
messages_en.properties 가 기본 설정값
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]설정 아무것도 안 건들고 소스 코드도 아무것도 안 건드린 상태인데도 서버 열고 localhost:8080 접속하면 messages_en.properties가 인식돼서 나옵니다.물론 기본 파일인 messages.properties 도 다 존재하는 상태구요. 기본 브라우저도 1순위 한국어로 다 설정해놓은 상태이며 HTTP request를 봐도 ko로 잘 넘어옵니다. 근데 파일 자체는 messages_en이 읽히는 것 같습니다. 어떻게 해결해야 할까요?
-
미해결UX/UI 시작하기 : Figma 입문 (Inflearn Original)
피그마 미러링 관련 질문
Figma mirror 어플 설치 관련안녕하세요, 강좌를 듣고 어플 설치를 한 후 로그인을 하려고 하는데 계속 'Unable to get profile information from Google' 이라고 뜨네요 ㅠㅠ 어플 최근 후기를 보니까 이런 문제가 있다고는 뜨는데, 혹시 오류를 없앨 수 있는 방법을 알 수 있을까요?
-
해결됨팝스타 공식 뮤비 제작 & 유튜브 2천만 뷰 크리에이터의 애니메이트 X 이모티콘 클래스
내보내기 할때 이모티콘이 짤리네요ㅠㅠ
내용 복습 겸 강의를 보고 다시 따라하고 있는데요내보내기를 하니까 이렇게 짤려서 나오네요혹시 해결 방법이 있을까요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
localhost:8080 서버가 뜨지 않습니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]setting에 gradle에 intelige말고 gradle로 바꾸니 다시 되는데 느리네요 이렇게 계속 해야할까요??
-
미해결Practical Testing: 실용적인 테스트 가이드
컨트롤러에서 @Valid로 필드를 검증을 한 이후 질문
안녕하세요~ 좋은 강의 잘 듣고 있습니다.질문이 하나 있는데요.컨트롤러에서 @Valid로 필드를 검증이 되지 않으면 공통 예외처리에 걸려서 응답처리가 되고, 정상적으로 필드가 검증이 됐다면 서비스단에 로직을 처리할텐데요~서비스단에서는 다시 필드를 검증할 필요가 없을까요?컨트롤러, 서비스를 나눠서 테스트를 작성하다보니 서비스 단에서도 검증을 해야하나 궁금합니다.실무에서는 어떻게 보통 어떻게 진행되나요?
-
미해결[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편
reduce 타입을 만들다가 질문이 생겼습니다.
reduce 타입을 만들면서 initialValue는 옵션값이기때문에 값을 ?: 를 이용해서 만들었습니다. 그래서 있을때 없을때 모두 제대로 타입추론을 하는 것을 확인하였습니다.interface Arr<T> { reduce(callBackFn: (a: T, b: T) => T, init?: T): T; reduce<S>(callBackFn: (a: S, b: T) => S, init?: S): S; } const a: Arr<number> = [1, 2, 4, 5, 3]; const myReduce1 = a.reduce((a, b) => (a += b)); // 15 const myReduce2 = a.reduce((a, b) => (a += b), 10); // 25 const b: Arr<number | string> = [1, 2, "4", "5", 3]; const myReduce3 = b.reduce<number>((a, b) => { return typeof b === "number" ? (a += b) : a; }); // 6 const myReduce4 = b.reduce<number>((a, b) => { return typeof b === "number" ? (a += b) : a; }, 10); // 16 빌트인 reduce로 검사를 해보았는데 빌트인 reduce에서는 accumulator의 타입이 다른 경우 reduce 오버로딩되면서 init이 꼭 있어야 하는 타입으로 이해 했습니다. // 정답 // reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T; // reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T, initialValue: T): T; // reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U; const c = [1, 2, "4", "5", 3]; const solReduce1 = c.reduce<number>((a, b, idx, arr) => { return typeof b === "number" ? (a += b) : a; }, 10); // 16 // error const solReduce2 = c.reduce<number>((a, b, idx, arr) => { return typeof b === "number" ? (a += b) : a; }); // 6 하지만 JS에서는 accumulator타입이 달라도 초기값없이 정상 작동하는 반면 TS에서는 초기값을 꼭 있어야 하는것인지 제가 잘못 이해하고 있는것인지 궁금해서 질문 남깁니다. error msg : TS2554: Expected 2 arguments, but got 1. lib.es5.d.ts(1480, 103): An argument for 'initialValue' was not provided. 질문 정리제가 작성한 reduce 타입이 올바르게 작성된 것인지TS에서는 빌트인 reduce를 사용할 떄 accumulator타입이 다를경우 init 값 없이 사용할 수 있는지입니다.감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 접근 방식
안녕하세요,, 선생님문제 보자마자 bog2636에 있는 치즈 문제랑 똑같다고 생각해서, 같은 로직으로 풀고자 했습니다. dfs를 두개 만들어서 하나는 백조가 백조를 찾아가는 로직, 하나는 얼음을 녹이는 로직. 단순히 2개의 dfs를 만들어서 구현하고자 했습니다. 아직 미완성 코드이긴하지만, 이렇게 푸는 방식이 맞는지 궁금합니다 .. http://boj.kr/5323a9d789cc4883a53cdc463fedb890
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestParam Map<String,String> paramMap에 대한 질문
강의 내용 다 이해했는데요. 경우의 수가 궁금해서 질문드립니다.@RequestParam Map<String,String> paramMap에서 String username, Stirng age처럼 @RequestParam을 생략해서 받을 수 있을까요?즉, Map<String,String>로 써도 모든 쿼리 파라미터를 받을 수 있는건가요@RequestParam Map<String,String> paramMap, @RequestParam Map<String,String> paramMap2 처럼 2번을 쓰게 되면 어떤일이 벌어질까요 궁금합니다.
-
해결됨
react-spring 파일 업로드/ react에서 이미지 뷰(jwt)
개인 프로젝트로 블로그 만들기를 구현하는 중입니다.모든 프로젝트에 대한 설명은 할 수 없지만, 보안으로 jwt token을 사용하고있고, multipartfile을 통해서 게시글 내에 이미지, 영상, 기타 파일 등을 함께 첨부하여 게시글을 작성할 수 있도록 기능을 구현하였습니다.파일 업로드 단계까진 잘 되었고, 우선 로컬 저장소를 사용하여 파일은 스프링 부트 프로젝트 내 resources/static/ ~ 이하 이미지:img, 영상:video, 기타 파일:file 로 세부 디렉토리를 나눠서 접근하도록 하였습니다. 우선 사진으로만 테스트 해보는 중인데, 리액트에서 파일을 보여주는 데에 어려움을 겪고있습니다.export const getImageApi = async (token: string | null, imageName: string) => { const url = `http://localhost:4000/api/images/${imageName}.jpg`; try { const response = await axios.get(url, { headers: { Authorization: `Bearer ${token}`, }, }); const result = response.data; return result; } catch (error) { console.error("Error fetching board data:", error); return null; } };토큰을 이용해야만 파일에 접근이 가능하기에, 이런식으로 따로 api를 설정하고 접근하는 방식으로 해보려고 하는데 제 생각처럼 잘 되지 않습니다. 해당 api를 통한 요청을 포스트맨으로 조회해보니 이진화 된 파일이 응답으로 나오곤 하는데, 이를 다시 원본으로 복구한 후에 보여줘야하는 것 같은데,, 아직 많이 부족해서 어떤식으로 해야할지 잘 모르겠습니다. 리액트 - 스프링(부트)를 사용하면서 파일 업로드/다운로드(조회)를 할 때, 이런 방식을 사용하는 것이 바람직한 것인지, 단순히 사진을 업로드 하고 조회할 때에 이정도 복잡한 수준으로 구현하는 것이 일반적인 것인지 궁금하고 더 간단하거나 쉽게 할 수 있는 방법이 있다면 알려주시면 감사하겠습니다. 첫 질문이라 소스코드를 많이 올리는 것이 번잡할까 싶어 많이 올려두지 않았습니다. 혹시 도움을 주실 때 관련 소스코드를 필요로 하신다면 보내드리도록 하겠습니다. 감사합니다.
-
미해결[백문이불여일타] 데이터 분석을 위한 기초 SQL
higher than 75 marks
안녕하세요 ! order by 해커랭크 문제풀이 2 강의에서select namefrom studentswhere marks > 75order by right (name,3) and ID이렇게 order by에서 컴마 대신에 and를 썼는데 둘의 차이가 무엇인가여? 감사합니다
-
미해결기초부터 따라하는 디지털포렌식
공유자님 질문합니다!!
강의 천천히 따라가면서 실습을 위한 환경설정을 위해 volatility을 설치했는데 실행시 아래와 같은 오류가 출력되면서 창이 종료되는 현상이 발생합니다. 아래 오류는 어떻게 해결해야 되나요?ERROR : volatility.debug : You must specify something to do (try -h)
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
poetry pypi 실습
이 내용들은 vscode shell에 입력해서 실행하는건가요? [tool.poetry.dependencies] pendulum="^2.1" 이 부분은 .toml파일에 넣는건가요?