묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결김영한의 실전 자바 - 중급 1편
내부클래스 private 메서드
Engine 클래스의 start 메서드가 private 으로 되어 있는데 어떻게 Car 클래스에서 engine.start() 를 할 수 있는건가요 ?제가 알기로는 내부 클래스는 바깥 클래스의 인스턴스에 접근할 수 있는 참조값을 가지고 있는 것은 알고 있지만 반대는 아니지 않나요 ?
-
해결됨실습으로 손에 잡히는 SQLD의 정석(2과목)
실습 데이터
실습을 해보고 싶은데 혹시 예시 데이터는 어디서 구할 수 있을까요?
-
미해결Next + React Query로 SNS 서비스 만들기
middleware 질문입니다!
자주 질문드리네요 ㅠ middleware에서 login을 유무를 파악하고 로그인으로 리다이렉트하려고합니다그 이후 로그인이 된다면, 원래 진입하려던 url을 쿼리스트링으로 전달하고 이를 받아 리 다이렉트하는게 목적인데요! 간헐적으로 미들웨어가 실행되지 않는것 같습니다..새로고침을 해야지만 리다이렉트가 가능합니다. 클라이언트에서 세션감지하고 useEffect로 router.replace 해도 동일합니다. 제 생각으로는미들웨어는 admin , contact진입시에는 무조건 실행한다고 알고있었는데 잘못된 거였나요 ㅠ찾아보니 middleware not Working 이슈가 있는 것같긴한데 원인을 도통모르겠습니다 import { auth } from "@/auth"; import { NextRequest, NextResponse } from "next/server"; export const middleware = async (req: NextRequest) => { const session = await auth(); if (!session) { //권한없으면 login 하라 const url = new URL(`http:localhost:3000/auth/login?redirect=${req.url}`); return NextResponse.redirect(url); } //권한있으면 원래대로 return NextResponse.next(); }; export const config = { matcher: ["/admin/:path*", "/contact/:path*"], }; 혹시! useRouter의 redirect는 client에서 이루어지기 때문에 서버 세션갱신이 되지않아서 상이해지는건가요?!에서router.replace(redirectPath);로 변경 window.location.href = redirectPath;
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
Error response from daemon: The system cannot find the file specified.
Error response from daemon: The system cannot find the file specified.이런 오류가 뜹니다 DB 실행하면 . .
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
브라우저 마다 URL이 다르게 전송됩니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]hello-form에 폼 action에 분명 "/request-param-v1"으로 입력되어 있는데 크롬으로 전송하면 "/request-param"으로 url이 바껴버리는 증상이 있습니다. 막상 다른 브라우저로 전송하면 정상적으로 작동하는데 원인을 모르겠습니다..
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
투두리스트 코드
투두리스트 계속 뭐가 빠진지 모르겠네요 완성된 코드 어디서 볼수있나요? 일일히 찾기에 시간이 너무 걸려요
-
미해결실전! Querydsl
AliasCollisionException 오류가 나는데 ㅠㅠ
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.return queryFactory.select(board) .from(board) .distinct() .leftJoin(board.writer, member) .fetchJoin() .leftJoin(board.comments, comment) .fetchJoin() .leftJoin(comment.writer, member) .fetchJoin() .where(board.id.eq(id)) .fetchOne();이런 식으로 join을 세번해서 날리니까 org.hibernate.query.sqm.AliasCollisionException: Duplicate identification variable 'member1' in 'from' clause [join writer as member1 join writer as member1] 오류가 나는데 혹시 원인을 알 수 있을까요
-
해결됨Flutter 앱 개발 기초
수강 기간 연장 문의 드립니다.
안녕하세요 멘토님 플루터 강의 수강기한 연장 가능한지 여쭙고 싶습니다ㅠㅠ 도중에 회사 노트북으로 진행하다 보니 조금 더 오래 걸린 것 같습니다. 강의 연장 부탁드립니다..!
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
try-catch
영상 제작으로는 안해주시나요..? try-catch만 아니라 다른 수업도 글로 설명해주시는 부분이 있던데 아무리 설명을 잘해주셔도 영상보다 이해가 잘 되지는 않습니다...
-
미해결모든 개발자를 위한 HTTP 웹 기본 지식
GET, POST 용도 차이
[질문 내용]안녕하세요 강의를 듣다가 제가 전에 했던 프로젝트에 질문이 생겼습니다.보통 조회를 할 때 GET 을 쓰고 uri에 /members/100 이런식으로 쓴다고 말씀하셨는데, 제가 했던 프로젝트에서는 거의 대부분 POST /members/info 이런식으로 하고 body에 조회하고자 하는 member id를 담아서 보내는 식으로 했습니다. 그래서 프로젝트를 하면서도 GET은 언제 쓰는지 의아하긴 했었습니다.예를 들어 회원 조회를 할 때 이런식으로 작성했었습니다.제가 작성했던 방식이 실무에서는 쓰지 않은 안좋은 방법인지 꼭 조회를 할 때는 GET을 쓰고 이런 형식을 맞추는 것이 좋은지 궁금합니다.
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
이론파트 자료 재 문의드립니다.
1 객체지향 설계원칙 이 6페이지, 7페이지에 들어있는데(내용은 조금 상이)각각의 목차에서 필요해서 넣으신것인지 중복되어 들어간 것인지 문의드립니다 2 그리고 소프트웨어 아키텍처의 설계과정 두 번 들어갔어요 이것도 이유가 있으신가요?3 목차 4번 서버 프로그램 구현에 결합도와 응집도 따로 들어가있던데요 이건 소제목이 없어서요 앞 내용이랑 이어지지 않는데.. 이건 여기 있는 게 맞는건지.. 소제목이 따로 없는 지 문의 드려요
-
미해결안드로이드 모바일 앱 모의해킹과 시큐어코딩
앱 SSL 자격증명 설치 문의
녹스(Nox)에서 앱 SSL 자격증명 설치 강의 순서대로 쭉 다 따라했습니다.마지막에서 burp 인증서 설치 후 강사님께서는 인터넷 접속이 잘 되는데제 Nox에서는 인터넷 접속 시보안 경고 : 사이트의 보안 인증서에 문제가 있습니다.라고 나옵니다.녹스 앱플레이어 삭제 후 다시 생성하여 했는데도동일하네요.. 보안 경고 팝업이 안닫혀서 뭘 어떻게 할 수가 없습니다.해결 방법 아시면 알려주시면 감사드리겠습니다 ㅠㅠ
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
파일 등록하면 이미지는 안나오고 파일명만 나와요..
import React from 'react'; import Dropzone from 'react-dropzone'; import axiosInstance from '../utils/axios'; const FileUpload = ({ onImageChange, images }) => { const handleDrop = async (files) =>{ let formData = new FormData(); const config = { header: {'content-type': 'multipart/form-data'} } formData.append('file', files[0]); try{ const response = await axiosInstance.post('/products/image', formData, config); onImageChange([...images, response.data.fileName]); }catch(error){ console.error(error); } } return ( <div className='flex gap-4'> <Dropzone onDrop={handleDrop}> {({ getRootProps, getInputProps }) => ( <section className='min-w-[300px] h-[300px] border flex items-center justify-center' > <div {...getRootProps()}> <input {...getInputProps()} /> <p className='text-3xl'> + </p> </div> </section> )} </Dropzone> <div className='flex-grow h-[300px] border flex items-center justify-center overflow-x-scroll overflow-y-hidden'> {images.map(image => ( <div key={image}> <img className='min-w-[300px] h-[300px]' src={`${import.meta.env.VITE_SERVER_URL}/${image}`} alt={image} /> </div> ))} </div> </div> ); }; export default FileUpload; 파일도 uploads에 다 들어가는데 파일명만 계속 나와요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
cmp 하는 부분에 대해서 궁금합니다.
커스텀 비교함수 부분 교안을 다시 보았는데 이해가 가지 않아서 이렇게 질문 드립니다.매개변수로 넘겨주는 a, b는 v.begin(), v.end()의 값이 들어가는 것인가요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
참인 경우 출력
10:53초 부근 참인 경우 출력isPal(i) 관련 강좌 내용은 어디 강의 참고하면 될까요?
-
해결됨(2025) 일주일만에 합격하는 정보처리기사 실기
SQL은 어떻게 정리해야할까요?
SQL 문제도 2문제 정도씩 꾸준히 나오는 거 같던데, 이 부분에 대해선 강의를 올리실 계획이신지 궁금합니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
랜덤함수
랜덤함수에서 Random.nextInt(1,7) 이렇게 해야 6주사위까지 뜰수있는것 같습니다.
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
maven으로 프로젝트 생성 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.강의에서는 프로젝트 파일 생성하는데 maven들어가면 next 누르고 groupid 등이 나오는데 저는 사진 속 화면이 전부인데 왜그런건가요?
-
미해결MAUI [Cross-Platform Applications & C#]
Oracle DB 를 이용한 예제
maui 를 강의를 수강한 학생입니다.한가지 문의 사항이 있습니다.Oracle DB 를 이용한 insert delete update select 하는 예시는 없을까요?가능하면 Spread 를 이용해서.....
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
포트폴리오 주소 오류 (failed to fetch)
포트폴리오 만든 게시판 정보 입력후 등록하기 버튼을 누르면 아래와 같이 오류가 뜹니다.new:1 Access to fetch at 'http://backend-practice.codebootcamp.co.kr/graphql' from origin 'http://localhost:3004' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'http://localhost:3000' that is not equal to the supplied origin. Have the server send the header with a valid value, or, if an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.코드상에는 문제가 없는 거같은데.. 주소 확인 부탁드립니다.. ㅠimport { gql, useMutation } from "@apollo/client"; import { useRouter } from "next/router"; import React, { useState } from "react"; import { Address, ButtonWrapper, Contents, ImageWrapper, InputWrapper, Label, OptionWrapper, Password, RadioButton, RadioLabel, SearchButton, Subject, SubmitButton, Title, UploadButton, Wrapper, Writer, WriterWrapper, Youtube, Zipcode, ZipcodeWrapper, } from "../../../styles/boardsNew"; const CREATE_BOARD = gql` mutation createBoard($createBoardInput: CreateBoardInput!) { createBoard(createBoardInput: $createBoardInput) { _id } } `; export default function BoardsNewPage() { const router = useRouter(); const [writer, setWriter] = useState(""); const [password, setPassword] = useState(""); const [title, setTitle] = useState(""); const [contents, setContents] = useState(""); const [writerError, setWriterError] = useState(""); const [passwordError, setPasswordError] = useState(""); const [titleError, setTitleError] = useState(""); const [contentsError, setContentsError] = useState(""); const [createBoard] = useMutation(CREATE_BOARD); const onChangeWriter = (event) => { setWriter(event.target.value); if (event.target.value !== "") { setWriterError(""); } }; const onChangePassword = (event) => { setPassword(event.target.value); if (event.target.value !== "") { setPasswordError(""); } }; const onChangeTitle = (event) => { setTitle(event.target.value); if (event.target.value !== "") { setTitleError(""); } }; const onChangeContents = (event) => { setContents(event.target.value); if (event.target.value !== "") { setContentsError(""); } }; const onClickSubmit = async () => { if (!writer) { setWriterError("작성자를 입력해주세요."); } if (!password) { setPasswordError("비밀번호를 입력해주세요."); } if (!title) { setTitleError("제목을 입력해주세요."); } if (!contents) { setContentsError("내용을 입력해주세요."); } if (writer && password && title && contents) { try { const result = await createBoard({ variables: { createBoardInput: { writer, password, title, contents, }, }, }); console.log(result.data.createBoard._id); router.push(`/boards/${result.data.createBoard._id}`); } catch (error) { alert(error.message); } } }; return ( <Wrapper> <Title>게시글 등록</Title> <WriterWrapper> <InputWrapper> <Label>작성자</Label> <Writer type="text" placeholder="이름을 적어주세요." onChange={onChangeWriter} /> <div style={{ color: "red" }}>{writerError}</div> </InputWrapper> <InputWrapper> <Label>비밀번호</Label> <Password type="password" placeholder="비밀번호를 작성해주세요." onChange={onChangePassword} /> <div style={{ color: "red" }}>{passwordError}</div> </InputWrapper> </WriterWrapper> <InputWrapper> <Label>제목</Label> <Subject type="text" placeholder="제목을 작성해주세요." onChange={onChangeTitle} /> <div style={{ color: "red" }}>{titleError}</div> </InputWrapper> <InputWrapper> <Label>내용</Label> <Contents placeholder="내용을 작성해주세요." onChange={onChangeContents} /> <div style={{ color: "red" }}>{contentsError}</div> </InputWrapper> <InputWrapper> <Label>주소</Label> <ZipcodeWrapper> <Zipcode placeholder="07250" /> <SearchButton>우편번호 검색</SearchButton> </ZipcodeWrapper> <Address /> <Address /> </InputWrapper> <InputWrapper> <Label>유튜브</Label> <Youtube placeholder="링크를 복사해주세요." /> </InputWrapper> <ImageWrapper> <Label>사진첨부</Label> <UploadButton>+</UploadButton> <UploadButton>+</UploadButton> <UploadButton>+</UploadButton> </ImageWrapper> <OptionWrapper> <Label>메인설정</Label> <RadioButton type="radio" id="youtube" name="radio-button" /> <RadioLabel htmlFor="youtube">유튜브</RadioLabel> <RadioButton type="radio" id="image" name="radio-button" /> <RadioLabel htmlFor="image">사진</RadioLabel> </OptionWrapper> <ButtonWrapper> <SubmitButton onClick={onClickSubmit}>등록하기</SubmitButton> </ButtonWrapper> </Wrapper> ); }import { gql, useQuery } from "@apollo/client"; import { useRouter } from "next/router"; import { Avatar, AvatarWrapper, Body, BottomWrapper, Button, CardWrapper, Contents, CreatedAt, Header, Info, Title, Wrapper, Writer, } from "../../../styles/boardsDetail"; export const FETCH_BOARD = gql` query fetchBoard($boardId: ID!) { fetchBoard(boardId: $boardId) { _id writer title contents createdAt } } `; export default function BoardDetailPage() { const router = useRouter(); const { data } = useQuery(FETCH_BOARD, { variables: { boardId: router.query.boardId }, }); return ( <Wrapper> <CardWrapper> <Header> <AvatarWrapper> <Avatar src="/images/avatar.png" /> <Info> <Writer>{data?.fetchBoard?.writer}</Writer> <CreatedAt> {new Date(data?.fetchBoard?.createdAt).toLocaleDateString()} </CreatedAt> </Info> </AvatarWrapper> </Header> <Body> <Title>{data?.fetchBoard?.title}</Title> <Contents>{data?.fetchBoard?.contents}</Contents> </Body> </CardWrapper> <BottomWrapper> <Button>목록으로</Button> <Button>수정하기</Button> <Button>삭제하기</Button> </BottomWrapper> </Wrapper> ); }import "../styles/globals.css"; import { ApolloClient, InMemoryCache, ApolloProvider } from "@apollo/client"; export default function App({ Component, pageProps }) { const client = new ApolloClient({ uri: "http://backend-practice.codebootcamp.co.kr/graphql", cache: new InMemoryCache(), }); return ( <ApolloProvider client={client}> <Component {...pageProps} /> </ApolloProvider> ); }