묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결비전공자의 전공자 따라잡기 - 네트워크, HTTP
OSI 7 계층 전체 프로세스 작동 방식
물리->데이커링크->네트워크->트랜스포트->세표응 이런 일련의 과정을 CHUNK로 봤을 때 예를 들어 클라이언트->서버로 보낼 때 물리부터 세표응까지 한번 일어나고 다시 서버-> 클라이언트로 갈 때 다시 물리부터 세표응까지의 과정이 일어나나요?궁금합니다..
-
미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
atom 서비스 종료 관련
안녕하세요, 최근에 강의를 구입해서 듣고 있는 수강생입니다. 지금 동영상을 보면서 공부하는 도중에 atom 서비스 부분에 막혀 진도를 못나가고 있는 상태입니다. 인터넷에 찾아보니 아톰서비스는 작년에 종료되었다고 하는데 추후 다른 서비스를 통한 개발 환경 강의 업데이트 예정인가요? 예정이라면 언제쯤 업로드 가능한지 궁금합니다.
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
jpa_pdf 객체 조회 부분에서..
memberId를 파라미터로 받고 해당하는 단일 Member 객체를 반환하는 find 메소드와 연관지었을 때JOIN 뒤에 있어야 할 WHERE M.MEMBER_ID = ? 와 같은 where 절이 없는데.. 생략된 것인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-R 데이터 저장
http://boj.kr/1c07c3f4f76347e791816ea1d051396b 위의 코드에서 5 -1 0 0 1 1 0 다음과 같은 테스트케이스를 넣어주면 deleteChildren()에서 1번 노드가 들어갈때 데이터가 온전히 전달이 안됩니다... 확인해보니 1번 노드에서는 자식이 2개여야 하는데 0개로 나옵니다. deleteChildren를 호출하기전에는 2개로 잘 나오는데 이유가 뭘까요..? 아래 사진은 deleteChildren을 호출하기전 데이터 사진입니다. deleteChildren(node& nd) 으로 해도 데이터가 안넘어가지더라구요... 우선은 node가 아닌 int idx를 받아 함수 안에서 tree[idx] 이렇게 직접 찾게 바꿔서 해결은 했습니다만 데이터가 제대로 안넘어가는 이유가 너무 궁금합니다!!
-
미해결다양한 사례로 익히는 SQL 데이터 분석
컬럼의 뜻에 대해 질문 드립니다.
채널별 고유/주문 사용자 건수와 매출 금액 및 비율 SQL로 구하기 2 를 학습하면서/************************************ 채널별 고유 사용자 건수와 매출금액 및 비율, 주문 사용자 건수와 주문 매출 금액 및 비율 채널별로 고유 사용자 건수와 매출 금액을 구하고 고유 사용자 건수 대비 매출 금액 비율을 추출. 또한 고유 사용자 중에서 주문을 수행한 사용자 건수를 추출 후 주문 사용자 건수 대비 매출 금액 비율을 추출 *************************************/ with temp_01 as ( select a.sess_id, a.user_id, a.channel_grouping , b.order_id, b.order_time, c.product_id, c.prod_revenue from ga_sess a left join orders b on a.sess_id = b.sess_id left join order_items c on b.order_id = c.order_id where a.visit_stime >= (:current_date - interval '30 days') and a.visit_stime < :current_date ) select channel_grouping , sum(prod_revenue) as ch_amt -- 채널별 매출 --, count(distinct sess_id) as ch_sess_cnt -- 채널별 고유 세션 수 , count(distinct user_id) as ch_user_cnt -- 채널별 고유 사용자 수 --, count(distinct case when order_id is not null then sess_id end) as ch_ord_sess_cnt -- 채널별 주문 고유 세션수 , count(distinct case when order_id is not null then user_id end) as ch_ord_user_cnt -- 채널별 주문 고유 사용자수 --, sum(prod_revenue)/count(distinct sess_id) as ch_amt_per_sess -- 접속 세션별 주문 매출 금액 , sum(prod_revenue)/count(distinct user_id) as ch_amt_per_user -- 접속 고유 사용자별 주문 매출 금액 -- 주문 세션별 매출 금액 --, sum(prod_revenue)/count(distinct case when order_id is not null then sess_id end) as ch_ord_amt_per_sess -- 주문 고유 사용자별 매출 금액 , sum(prod_revenue)/count(distinct case when order_id is not null then user_id end) as ch_ord_amt_per_user from temp_01 group by channel_grouping order by ch_user_cnt desc;위 쿼리의 쿼리 뜻이 잘 이해가 안되어 질문 드립니다., sum(prod_revenue)/count(distinct user_id) as ch_amt_per_user -- 접속 고유 사용자별 주문 매출 금액, sum(prod_revenue)/count(distinct case when order_id is not null then user_id end) as ch_ord_amt_per_user이 두 항목은 각각 접속 고유 사용자별 주문 매출 금액,주문 고유 사용자별 매출 금액이라 명칭 되어 있는데, 어떤 의미를 가지고 있는 것인지 잘 이해가 되지 않아 질문 드립니다.접속 고유 사용자별 주문 매출 금액 : 사용자 대비 30일이내 매출 금액주문 고유 사용자별 매출 금액 : 주문 대비 30일 이내 매출 금액이렇게 이해를 하면 될런지요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A map 관련 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님, 제가 map<int, vector<vector<int>>> ret_v; 의 형태에 대해 이해가 잘 안됩니당 강의에서 설명해주신대로 벡터의 벡터를 이용하는것 까지는 이해를 했습니다.근데 출력부분이 왜for(int a : ret_v[ret][0]){ cout << a << " "; } 이렇게 작성 되는지가 이해가 안가네용 ... 제 생각엔 ret_v[ret]면 될거같은데 [0]이 왜 있고 무슨의미인지 이해가 안되네요
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
서버 실행
이리저리 해봐도 에러는 없는거 같은데 서버 실행이 안되네요... 어떻게 해결할수 있을까요??
-
미해결만들면서 배우는 프론트엔드 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 값 없이 사용할 수 있는지입니다.감사합니다.