묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Three.js로 시작하는 3D 인터랙티브 웹
혹시 이 빛의 범위를 조절할 수 있는 방법이 있나요?
사진처럼 DirectionalLight의 위치를 z: 10, y: 5로 주어 위치하였는데요. 도미노 중간부분이 오히려 어떤 무언가에 가려진 듯 어둡고, 끝 부분에는 가려진게 없는 듯이 밝습니다. 혹시 Light에 near, far 같은 옵션이 있어서 그런건지 아니면 위에 무언가가 가리고 있는건지 잘 모르겠습니다 하하..
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
@VersionColumn() save 관련 질문
@VersionColumn() 관련하여'save()함수가 몇번 불렸는지 기억한다' 라고 하셔서 save함수가 불린 횟수에 따라 1씩 증가하는 것으로 처음에 이해를 했었는데, 강의 영상과 조금 다르게 service & controller 나눠 작성하는 연습을 하다가 아래와 같이 title을 동일한 값으로 수정하는 코드를 작성했었습니다async PatchUsers(id: string) { const user = await this.userRepository.findOne({ where: { id, }, }); if (!user) { throw new NotFoundException(); } console.log('Before save - Version:', user.version); if (user) { user.title = '수정하기'; } const newUser = await this.userRepository.save(user); console.log('After save - Version:', user.version); return newUser; }이때 title이 이전과 동일하면 실제로 save함수는 실행이 되지만 DB상에 변화가 없기 때문에 @VersionColumn() 으로 정의한 version에는 변화가 없는 것 같은데 save함수의 실행횟수보다 db의 변화가 있는지에 초점을 맞춰서 생각하면 될까요 ?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
기본 Configurer클래스의 갯수가 적게 보입니다.
안녕하세요. 강사님 실습을 하던 중 강의 17:00에 보이는 갯수와 달리3개밖에 안보입니다. 어떤 차이 때문에 11개가 보이지 않는 것인지 궁금합니다.
-
해결됨한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
vite가 아니라 vscode에서 react를 하고 싶다면 기본세팅 외의 그외의 문법들은 동일하게 적용되는건가요?
강의를 듣고 따로 팀 프로젝트를 진행해야하는데 제목과 같이 vscode에서 진행을 하는데 기본 세팅을 따로 하고 그외의 문법들을 vscode에서 실행해서 프로젝트를 진행해도 무방한것인가요?
-
해결됨한 입 크기로 잘라먹는 타입스크립트(TypeScript)
함수타입 ) ts-node src/index.ts 실행이 안돼요 ㅠ
ts-node src/index.ts 실행이 안돼요 ㅠ 터미널에 아래와 같은 오류가 뜨는데 구글에 찾아보고 해봐도 해결이 안되네요 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
잘되다가 갑자기 되질 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 강의 잘 따라하고 있다가@Around에서 service 부분 따라하는 부분 시작하려하니 위 사진들과같은 에러?가 발생합니다gradle 빌드 clean해봤는데 여전하네요...뭐가 문제일까요? (참고로 패키지명은 저게 맞습니다. 강의랑 조금 다르게됐어요)
-
해결됨개발자를 위한 쉬운 도커
강의 예정
안녕하세요. 데브위키님!예전에 3월중으로 새로운 강의를 낼 계획이라고 하셨었는데 혹시 나올까요!?나온다면 언제쯤 나올까요?ㅎㅎ
-
해결됨Windows System 프로그래밍
원격 디버그가 안붙어요
안녕하세요 현재 하나하나 따라하면서 진행하고 있습니다.로컬 디버거까지는 잘됐는데, 원격 디버거가 안붙는데 무슨 문제인지 모르겠어서 질문 글 남깁니다.호스트의 경우 이 상태에서 연결이 안되는 상태이고 가상환경은 이 상태입니다.혹시 가상환경이 32bit가 아니라 64비트로 되어있어서 진행이 안되는건지 아니면 호스트 컴퓨터에 다른 세팅을 더 해야하는건지 궁금해서 이렇게 글 납깁니다!강의 정말 잘 보고 있습니다.
-
해결됨(2025) MBTI 테스트 기반 수익형 웹사이트 만들기 - <코딩 배워 사업하자>
썸네일 리스트 페이지 만들기 함수 질문입니다.
function ThumbnailList() { const [testList] = useState(initialState: TESTS); return <div> {testList?.map(callbackfn: (test) => ( <img src={test?.info?.thumbImage} alt={test?.info?.mainUrl} key={test?.info?.mainUrl} />))} </div>; }useState 함수에 initialState:와 map 함수에 있는 callbackfn:이 있으면 문제가 생기는데 빼야 하는건가요? 아니면 문법이 버전때문에 다른건가요?
-
미해결Arm 아키텍처: 트러스트존(TrustZone) [저자직강 3부-1]
TEE OS뭔가요?
안녕하세요. 트러스티드 커널이 TEE OS를 의미하는 건가요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지
total을 float으로 바꾸신 이유
안녕하세요 더치 페이 함수 만들기에서 going_dutch 함수 리턴값 계산하실 때 return float(total) / num_of_ppl 로 int 값인 total을 float으로 바꾸셨는데 굳이 float으로 바꾸신 이유가 궁금합니다 어차피 int끼리 나눗셈(/)을 하면 결과가 무조건 float으로 나오는데,굳이 total을 float으로 바꾸신 이유가 있을까요?바꾸지 않아도 결괏값은 float으로 나오지 싶어서요. 답변 기다리겠습니다. 감사합니다
-
해결됨그림으로 쉽게 배우는 운영체제
공유자원과 동기화 문제에 관해서 질문이 있습니다.
안녕하세요. 감자님.강의 듣던 도중에 표현 상에서 어색한 부분(?)이 있는 것 같아 질문드립니다.프로세스가 컨텍스트 스위칭으로 인해 시분할처리되면서 사용자 입장에서는 프로세스의 실행 순서를 예측하기가 어렵다. 따라서 연산 결과를 예측하기 힘들고 이를 동기화 문제라고 하셨는데연산 결과라기 보다는 공유 자원에 대한 접근 순서라고 하는 편이 더 정확하지 않을까요? 연산 결과가 잘못된다는 것은 결국 프로세스 실행 순서가 잘못되어 해당 프로세스가 공유 자원에 접근할 순서가 아닌데 접근해서 처리되면서 그로 인해 예상했던 연산 결과값이 아니다 라고 생각을 합니다. 뭔가 디테일한 설명이 생략된 것 같아서 질문드립니다. 운영체제는 프로세스의 실행 순서를 관리 및 결정하지만, 실행 결과에는 관여하지 않는다. 즉, 큐에서 프로세스를 꺼내 CPU를 통해 처리를 하도록 하는 것이지, 결과는 운영체제 알 바가 아니다. 라고 생각하는데 맞을까요? 이 부분은 강의에 나온 게 아니라 제가 따로 생각해 본 부분입니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
어느 파일을 실행시켜야하나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]강의 캡쳐내용인데 사진을 보면 강의에서는 MemberServiceIntegrationTest 파일을 실행시킨거같은데 저는 이 파일에서 실행시키니 오류가 나고 MemberService 파일을 실행시키면 결과가 나오던데.. 뭔가요?
-
해결됨React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드
logout 기능에서 req.cookies.token == undefined가 되는 문제
비슷한 질문이 있어서 5-2강까지 강의를 들어서 adminLogin까지 구현을 하였습니다.앞의 4-6강에서 로그아웃을 시도하였을 때, 400 Bad Request : 이미 로그아웃된 상태로 나옵니다. 그래서 console.log(req.cookies.token)을 해보았을 때, undefined가 나옵니다.adminLogin을 진행하여 브라우저에 쿠키가 제대로 저장되었는지 확인해보았는데, localhost:5173에서도 localhost:3000에서도 cookie에 token값이 저장되어있었습니다.index.js에 cookie-parser 또한 존재하는 상태입니다.질문을 올리기 전에 여러가지를 시도해보았는데, router.post() 에서는 req.cookies.token의 값을 undefined로 가져오고, router.get()에서는 정상적인 토큰값을 반환했습니다.어떻게 해야 router.post() 에서도 req.cookies.token값을 가져올 수 있을까요?thunder client로 GET http://localhost:3000/api/auth/getCookie를 했을 때도 token은 undefined 값이 출력되었다가 브라우저에서 주소로 접근하니 token값이 정상적으로 출력되었습니다.아래의 사진은 thunder client로 get 방식과 post 방식으로 보냈을 때의 차이를 담은 사진입니다.브라우저에 cookie가 정상적으로 저장된 사진입니다.// index.js require("dotenv").config(); const express = require("express"); const mongoose = require("mongoose"); const cookieParser = require("cookie-parser"); const cors = require("cors"); const userRoutes = require("./routes/user"); const app = express(); const PORT = 3000; app.use(cors({ origin: "http://localhost:5173", credentials: true, })); app.use(express.json()) app.use(express.urlencoded({extended : true})) app.use(cookieParser()); app.use("/api/auth", userRoutes); app.get("/", (req, res) => { res.send("Hello world"); console.log("token: " + req.cookies.token); }); app.post("/cookie", (req, res) => { console.log(req.cookies.token) res.send("api/auth"); }) mongoose .connect(process.env.MONGO_URL) .then(() => console.log("MongoDB와 연결이 되었습니다.")) .catch((error) => console.log("MongoDB와 연결에 실패했습니다: ", error)); app.listen(PORT, () => { console.log("Server is running"); }); // user.js const express = require("express"); const router = express.Router(); const bcrypt = require("bcrypt"); const User = require("../models/User"); const axios = require("axios"); const jwt = require("jsonwebtoken"); // const cookieParser = require("cookie-parser"); // router.use(express.json()) // router.use(express.urlencoded({extended : true})) // router.use(cookieParser()); router.post("/signup", async (req, res) => { try { const { username, password } = req.body; const existingUser = await User.findOne({ username }); if (existingUser) { return res.status(400).json({ message: "이미 존재하는 사용자입니다." }); } const hashedPassword = await bcrypt.hash(password, 10); const user = new User({ username, password: hashedPassword, }); await user.save(); res.status(201).json({ message: "회원가입이 완료되었습니다." }); } catch (error) { res.status(500).json({ message: "서버 오류가 발생했습니다." }); console.log(error); } }); router.post("/login", async (req, res) => { try { const { username, password } = req.body; const user = await User.findOne({ username }).select("+password"); if (!user) { return res.status("401").json({ message: "사용자를 찾을 수 없습니다." }); } if (!user.isActive) { return res .status(401) .json({ message: "비활성화된 계정입니다. 관리자에게 문의하세요." }); } if (user.isLoggedIn) { return res .status(401) .json({ message: "이미 다른 기기에서 로그인되어 있습니다." }); } const isValidPassword = await bcrypt.compare(password, user.password); if (!isValidPassword) { user.failedLoginAttempts += 1; user.lastLoginAttempt = new Date(); if (user.failedLoginAttempts >= 5) { user.isActive = false; await user.save(); return res.status(401).json({ message: "비밀번호를 5회 이상 틀려 계정이 비활성화되었습니다.", }); } await user.save(); return res.status(401).json({ message: "비밀번호가 일치하지 않습니다.", remainingAttempts: 5 - user.failedLoginAttempts, }); } user.failedLoginAttempts = 0; user.lastLoginAttempt = new Date(); user.isLoggedIn = true; // try { // const response = await axios.get("https://api.ipify.org?format=json"); // const ipAddress = response.data.ip; // user.ipAddress = ipAddress; // } catch (error) { // console.log("IP 주소를 가져오던 중 오류 발생: ", error.message); // } await user.save(); console.log("로그인 성공"); const token = jwt.sign( { userId: user._id, username: user.username }, process.env.JWT_SECRET, { expiresIn: "24h" } ); console.log(token); res.cookie("token", token, { httpOnly: true, secure: "production", sameSite: "strict", maxAge: 24 * 60 * 60 * 1000, }); console.log("쿠키 설정", ); const userWithoutPassword = user.toObject(); delete userWithoutPassword.password; res.json({ user: userWithoutPassword }); console.log("json 전달 후 종료"); } catch (error) { console.log("서버 오류: ", error.message); res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); router.post("/logout", async (req, res) => { try { const token = req.cookies.token; console.log(token); if (!token) { return res.status(400).json({ message: "이미 로그아웃된 상태입니다." }); } try { const decoded = jwt.verify(token, process.env.JWT_SECRET); const user = await User.findById(decoded.userId); if (user) { user.isLoggedIn = false; await user.save(); } } catch (error) { console.log("토큰 검증 오류: ", error.message); } res.clearCookie("token", { httpOnly: true, secure: "production", sameSite: "strict", }); res.json({ message: "로그아웃되었습니다." }); } catch (error) { console.log("로그아웃 오류: ", error.message); res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); router.delete("/delete/:userId", async (req, res) => { try { const user = await User.findByIdAndDelete(req.params.userId); if (!user) { return res.status(404).json({ message: "사용자를 찾을 수 없습니다." }); } res.json({ message: "사용자가 성공적으로 삭제되었습니다." }); } catch (error) { res.status(500).json({ message: "서버 오류가 발생했습니다." }); } }); router.post("/verify-token", (req, res) => { const token = req.cookies.token; if (!token) { return res .status(400) .json({ isValid: false, message: "토큰이 없습니다." }); } try { const decoded = jwt.verify(token, process.env.JWT_SECRET); return res.status(200).json({ isValid: true, user: decoded }); } catch (error) { return res .status(401) .json({ isValid: false, message: "유효하지 않은 토큰입니다." }); } }); // router.get("/getCookie", async (req, res) => { // res.send(req.cookies.token) // console.log("getCookie's token : " , req.cookies.token) // }) // router.post("/postCookie", async (req, res) => { // res.send(req.cookies.token) // console.log("postCookie's token : ", req.cookies.token) // }) module.exports = router;
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
섬나라 아일랜드 DFS
이전강의에서 풀엇던것처럼 ch체크 배열만들고 시계방향 9,12,3,6시 방향으로만 체크해서 이렇게 만들었는데강사님이 강의 때 하셧던거에 비하면 효율이 많이 떨어지는지 궁금해서 질문 남깁니다 package section9; import java.util.ArrayList; import java.util.Scanner; public class Main13 { static int[] dx= {-1,0,1,0}; static int [] dy= {0,1,0,-1}; static int[][] ch,dir,map; static int n,answer; public static void main(String[] args) { // TODO Auto-generated method stub Scanner s=new Scanner(System.in); ArrayList<Integer> list = new ArrayList<>(); answer=0; n=s.nextInt(); map= new int[n][n]; ch= new int[n][n]; dir= new int[n][n]; for(int i=0;i<n;++i) { for(int z=0;z<n;++z) { map[i][z]=s.nextInt(); } } for(int i=0;i<7;++i) { for(int z=0;z<7;++z) { if(map[i][z]==1 && ch[i][z]==0) { DFS(i,z); if(answer>1) { list.add(answer); answer=0; } }else { answer=0; continue; } } } System.out.println(list.toString()); System.out.println(list.size()); } static void DFS(int x,int y) { if(map[x][y]==1) { answer++; } if(ch[x][y]==1) return; if(map[x][y]==0) return; if(x<0 || x>6 || y<0 || y>6) { return; }else { ch[x][y]=1; for(int i=0;i<4;++i) { int nx= x+dx[i]; int ny=y+dy[i]; if(nx>=0 && nx<7 && ny>=0 && ny<7 && ch[nx][ny]==0 && map[nx][ny]==1) { DFS(nx,ny); } } } } }
-
미해결게임 프로그래머 취업 전략 가이드
언리얼로 공부하다가 유니티 국비지원
언리얼로 포트폴리오를 만들고 있다가 혼자 공부하다보니 실력이 가늠이 안되서 학원을 알아보고 있습니다.-언리얼 오프라인, 왕복 3시간 20분-유니티 온라인(소프트웨어공학 전공이고, 언리얼은 GameAbilitySystem을 사용해서 코딩할 수 있습니다.) 둘 다 경험하는 것도 경쟁력 있다고 하셔서 선생님이시라면 먼 거리에도 불구하고 언리얼을 고집하실지, 유니티 온라인을 들어서 둘 다 경험해보실 지 경험자의 의견이 궁금해서 질문 남깁니다.
-
해결됨UIUX 포트폴리오 Part.3 - 반응형 웹 포트폴리오
이미지를 문의드립니다.
안녕하세요."UIUX 포트폴리오 Part.3 - 반응형 웹 포트폴리오" 강의를 재밌게 보고 있습니다."완성" 폴더에 "원본"폴더에 있는 "yeskey"에 들어간 움직이는 이미지들을, 이미지 사이트에서 다운로드 받으신걸까요?만약 그렇다면 다운 받으신 사이트의 주소를 알려주실 수 있을까요?제 이메일 주소를 남깁니다. happinessboom@daum.net 입니다.좋은 강의를 만들어 주셔서 감사합니다.
-
미해결딥러닝 CNN 완벽 가이드 - TFKeras 버전
Boston 코랩 실습
안녕하세요. 코랩에서 해당 실습을 진행하고자 합니다. 현재 코랩 내의 사이킷런 버전이 1.6.1이며, 안내해주신 방법으로 버전 재설치가 되지 않아서 문의를 남깁니다. 버전 설치 코드에 대한 오류는 다음과 같습니다. 확인해주시면 감사하겠습니다!
-
미해결프로그래밍 시작하기 : 웹 입문 (Inflearn Original)
sublime text 설치 불가
하라는 데로 다 해도 그냥 안 깔리네요. 응용 프로그램 크롬으로 넘어가는 과정도 전혀 실행이 안되고요. 추측되는 요인 있으신 분 없으실까요?
-
미해결이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해
비주얼 스튜디오 정의보기창? 정의 피킹?을 기본으로 사용하시는 거 같은데 어떻게 설정하나요?
cpp에 자동 선언 할 때나 f12로 레퍼런스 여실 때 작은 살펴보기 창이 열리는데 저는 alt f12를 눌러야 열립니다어떻게 설정해야 기본값으로 설정되나요?