묻고 답해요
163만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
spring boot security 적용시 currentUser에 null값 들어가는 이유
안녕하세요인프런 강의 들으면서 모르는 부분들은 찾아가면서 공부하고 있는 학생입니다.security 강의 듣고 프로젝트를 생성해서 연습하다가 로그인하는 것까지는 구현이 된 것 같은데스프링필터 설정에서 한 /memo/** 주소에 접근이 가능해졌다면 시큐리티 로그인이 잘 작동한 게 맞을까요 ?..그리고 memoForm 페이지로 입장하면 currentUser가 null로 확인되고 메모를 저장하려고 시도하면당연히 currentUser에 null이 들어가있어서 NullPointerException 오류가 나게 돼요.왜 로그인은 되었는데 currentUser에 아무 값도 들어 있지 않은 건지 이유를 잘 모르겠습니다.저와 비슷한 문제를 해결하신 경험이 계신 분이 있다면 어느 부분에서 수정을 해야 할 지 힌트라도 알려주시면 감사하겠습니다 ( •_ •̥ ˳ ˳ )
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
model.findone() no longer accepts a callback
더이상 저 문법을 지원하지 않는다고 해서 이것저것 코드 수정해 봤는데...비밀번호가 일치해도 일치한다는 메세지가 포스트맨에 나오지 않고에러도 뜨고 있습니다[에러 메세지] cb(null, isMatch); ^TypeError: cb is not a function at C:\Users\wwww\Documents\boiler-plate\models\User.js:69:5 index.js와 user.js를 첨부합니다 혹시 해결방법을 알 수 있을까요?// http://localhost:5000/ const express = require("express"); const app = express(); const port = 5000; const bodyParser = require("body-parser"); const cookieParser = require("cookie-parser"); const config = require("./config/key"); const { User } = require("./models/User"); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(cookieParser()); const mongoose = require("mongoose"); mongoose .connect(config.mongoURI) .then(() => console.log("MongoDB Connected...")) .catch((err) => console.log(err)); app.get("/", (req, res) => { res.send("Hello World!~~안녕 새해복"); }); app.post("/register", async (req, res) => { try { const user = new User(req.body); await user.save(); return res.status(200).json({ success: true, }); } catch (err) { return res.json({ success: false, err: err.message, }); } }); app.post("/api/users/login", async (req, res) => { try { // 요청된 이메일을 데이터베이스에서 찾기 const user = await User.findOne({ email: req.body.email }); if (!user) { return res.json({ loginSuccess: false, message: "제공된 이메일에 해당하는 유저가 없습니다.", }); } const isMatch = await user.comparePassword(req.body.password); if (!isMatch) { return res.json({ loginSuccess: false, message: "비밀번호가 틀렸습니다.", }); } // 비밀번호가 일치하면 토큰 생성 const userWithToken = await user.generateToken(); // 토큰 저장 res .cookie("x_auth", userWithToken.token) .status(200) .json({ loginSuccess: true, userId: userWithToken._id }); } catch (err) { return res.status(400).send(err); } }); app.listen(port, () => { console.log(`Example app listening on port ${port}`); }); const mongoose = require("mongoose"); // 몽구스 모듈을 가져와 몽고DB와 연결 const bcrypt = require("bcrypt"); const saltRounds = 10; const jwt = require("jsonwebtoken"); // 몽구스를 이용해 스키마 생성(필드들 작성) const userSchema = mongoose.Schema({ name: { type: String, maxlength: 50, }, email: { type: String, trim: true, unique: true, }, password: { type: String, minlength: 5, maxlength: 100, }, lastname: { type: String, maxlength: 50, }, role: { type: Number, default: 0, }, image: String, token: { type: String, }, tokenExp: { type: Number, }, }); userSchema.pre("save", function (next) { var user = this; if (user.isModified("password")) { bcrypt.genSalt(saltRounds, function (err, salt) { if (err) return next(err); bcrypt.hash(user.password, salt, function (err, hash) { if (err) return next(err); user.password = hash; next(); }); }); } else { next(); } }); // comparePassword userSchema.methods.comparePassword = function (PlainPassword, cb) { bcrypt.compare(PlainPassword, this.password, function (err, isMatch) { if (err) return cb(err); cb(null, isMatch); }); }; userSchema.methods.generateToken = function () { var user = this; return new Promise((resolve, reject) => { var token = jwt.sign(user._id.toHexString(), "secretToken"); user.token = token; user .save() .then((user) => resolve(user)) .catch((err) => reject(err)); }); }; const User = mongoose.model("User", userSchema); module.exports = { User };
-
해결됨C개발자를 위한 최소한의 C++
안녕하세요. Deep Copy 부분관련해서 질문 사항이 있습니다.
안녕하세요. 해당 두코드의 차이에 대해서 여쭙고 싶어 CMystring 클래스에는 operator 함수를 구현하지 않은 상황에서 아래 두 코드의 실행 결과가 달라 질문드립니다. 1번 코드CMystring String3 = String2;2번 코드CMystring String3; String3 = String2; 1번 코드에서는 복사가 호출되어 String3에 새로운 메모리가 할당이되고.2번 코드에서는 단순 대입, 즉 shallow copy 가 일어나는 것을 확인하여 String2와 같은 메모리를 참조하는 것을 확인했습니다. 두코드의 동작 방식을 확인하여 둘의 차이를 간접적으로 확인했으나 정확한 이유를 알고싶어 이렇게 질문게시판에 글을 남깁니다.
-
미해결오픈 소스 도구를 활용한 웹 해킹 및 스노트 분석(침해대응)
배포자료 있다고 강의중에 말씀하시는데요
학습자료는 강의실에 진입하셔서 우측 상단의 다운로드 버튼이나 커리큘럼의 각 수업 옆에 있는 구름모양의 다운로드 버튼 아이콘을 클릭하시면 확인하실 수 있습니다. 우측상단 다운로드 버튼 없고요쿠리큘럼 수업 옆에 구름모양 다운로드 아이콘도 없습니다.;;;어디서 받나요?
-
해결됨Vue3 완벽 마스터: 기초부터 실전까지 - "기본편"
ESlint.cjs 설정 관련 error 표시가 계속됩니다.
/* eslint-env node */ require('@rushstack/eslint-patch/modern-module-resolution') module.exports = { root: true, extends: [ 'plugin:vue/vue3-essential', 'eslint:recommended', '@vue/eslint-config-prettier/skip-formatting' ], parserOptions: { ecmaVersion: 'latest' }, rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 'prettier/prettier': [ 'error', { singleQuote: true, semi: true, useTabs: true, tabWidth: 2, trailingComma: 'all', printWidth: 80, bracketSpacing: true, arrowParens: 'avoid' } ] } }강의설명란을 참고해서 parserOption은 그대로 두고 나머지 부분을 추가하고, format on save 와 settings.json 파일도 수정하고, prettier 확장프로그램도 작업 영역에서 사용하지 않기를 설정 했는데도 저장만 하면 아래처럼 빨간 줄이 가득합니다 ㅠㅠ 어떻게 해야 할까요? { // eslint 적용할 파일 종류 "eslint.validate": [ "javascript", "javascriptreact", "typescript", "typescriptreact", "html", "vue", "markdown" ], // 저장시 eslint 스타일 적용 "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, "editor.tabSize": 2 }
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
docckerrun.aws.json 파일에서 name과 hostname의 차이가 궁금합니다.
안녕하세요. 알찬 강의 잘 듣고 있습니다.Dockerrun.aws.json 파일의containerDefinitions안의 container를 정의할 때,"name"과 "hostname"의 차이가 궁금합니다. 감사합니다.
-
미해결Next + React Query로 SNS 서비스 만들기
NextJS 14와 Styled-Components를 같이 이용할 때 질문
NextJS의 공식 문서에 따라 styled-components를 설치하고 적용하는거에는 성공했습니다.다만 styled-components를 사용하기 위해서는 page.tsx에서도 "use client"로 사용해야지만 오류가 나지 않았는데요! 스타일링을 위해서 page를 client로 고정해야만 하는거면 서버사이드의 장점이 없어지다보니 고민이 됩니다. nextJS 14와 styled-components를 같이 사용할 때 이러한 고민을 어떻게 해결하면 좋을까요?
-
미해결나도코딩의 자바 기본편 - 풀코스 (20시간)
형 변환(후반전)
오류가 왜 뜰까요 ..?? 알려주세용 ,, 감사합니다
-
미해결
DB관련
DB에 관한 질문을 드립니다. 영한님 로드맵을 봤는데요 DB 기초 후 Spring DB로 넘어가던데 어떤 DB에 관한 것을 공부해야하는지 알 수 있을까요? 제가 잘 몰라서 그러는데 SQL에 관한 것인가요?만약 SQL에 관한 것이면 MySQL인건가요??
-
해결됨홍정모의 따라하며 배우는 C언어
3분 11초경 질문
교수님이 마치 os가 된 것 처럼이라고 하셨는데 이게 무슨 뜻인가요?os가 변수의 주소값을 정해줘야하는데프로그래머가 os처럼 변수의 주솟값을 정해줘서 os가 된것처럼 이라고 말씀하시는건가요?
-
미해결JavaScript 비동기 프로그래밍 완벽 가이드 - Promise, await, async
안녕하세요. await async 강의 7분31초 부분에서 질문입니다. 7분 31초 부분에서 질문있습니다.
안녕하세요. const p = add(1,2);console.log(p); 여기서 Promise { <pending> } 이 출력되는데요.add 함수 내부에서 await setTimeout 호출되면 add 함수는 더 진행되지 않는다고 하셨습니다. 그럼 return 도 못한건데 왜 p 에 값이 Promise 가 들어왔는지 궁금합니다..
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
제코드좀 봐주세요 ㅠㅠ
https://drive.google.com/file/d/19EdcpxnIZQKKAeCSlucWIrX8HVv4bCtf/view?usp=drive_link 머리아프네요..17강까지 잘되었습니다..
-
미해결스프링 핵심 원리 - 기본편
스프링 빈 모두 조회하기 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.컨테이너에 담긴 모든 빈 조회하기 영상에서 한대로 코드를 따라했는데 코드를 썼을 때 강사님과 달리 자동으로 import되는 것들이 없었고 이에 따라 alt enter을 쓰거나 일일히 타이핑을 통해 import 되는 부분까지 동일히 작성했으나 밑과 같이 AppConfig.class, getBeanDefinitionNames(), getBean()을 인식하지 못하는 것처럼 에러가 뜹니다왜 그런지 모르겠어요
-
해결됨실무에 바로 적용하는 프런트엔드 테스트 - 1부. 테스트 기초: 단위・통합 테스트
Storybook이 안켜져요
강사님의 깃허브의 코드를 클론해서 npm i 까지 했습니다.이후 npm run dev 나 npm run storybook dev -p 6006을 실행하면 오류가 떠서 켜지지가 않아요..ㅠ살려주세요. 초기 세팅이 잘 안되네요
-
해결됨깃헙 블로그(Github blog)로 차별화 된 나만의 홈페이지 만들기!
해당 값들도 config.yml에서 바꿀 수 있을까요?
테디노트님 안녕하세요. 항상 좋은 강의와 빠른 QnA 감사드립니다. 다름이 아니라 제 페이지가 구글에서 검색되면, 위와 같이 제목이 'Github Pages'로 뜨고 favicon을 설정해주었음에도 해당 부분이 지구본으로 뜹니다. 파비콘은 구글링해서 완성 했고, 다른 영역에서는 잘 뜹니다.혹시 이 부분들도 바꿀 수 있을까요? 감사합니다.
-
해결됨Backend 멀티쓰레드 이해하고 통찰력 키우기
혹시 학습한 내용을 블로그에 정리해도 될까요?
어떤 형식이던지 괜찮습니다.자유롭게 질문해 주세요~내용은 자세할수록 좋습니다~ 안녕하세요 강의 정말 잘 들었습니다.실례가 안 된다면 강의를 들으며 학습한 내용을 블로그에 포스팅해도 괜찮을지 궁금합니다.물론 출처는 반드시 밝히겠습니다. 혹시나 질문이 불편하게 느껴지셨다면 죄송합니다!!
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 기본편
셀레니움 설정 강의에서 에러가 납니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.chrome.options import Options# 크롬 드라이버 자동 업데이트from webdriver_manager.chrome import ChromeDriverManager# 브라우저 꺼짐 방지chrome_options = Options()chrome_options.add_experimental_option("detach", True)# 불필요한 에러 메시지 없애기chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"])service = Service(executable_path=ChromeDriverManager().install())driver = webdriver.Chrome(service=service, options=chrome_options)# 웹페이지 해당 주소 이동driver.get("https://www.naver.com")\\여기까지 코드입니다. (그대로 따라썼는데 안되어서 강사님 다른 답변에서 직접 올려주신 코드 복사 붙여넣기 했습니다..!)selenium과 webdriver 모두 pip install 이용해서 설치했구요, selenium은 4.16.0, webdriver-manager는 4.0.1입니다. 에러 메시지는 아래와 같습니다.보기 힘드실까 하여 아래에 AttributeError부분을 써놓겠습니다. determined_browser_version = ".".join(determined_browser_version.split(".")[:3])AttributeError: 'NoneType' object has no attribute 'split'
-
해결됨Flutter로 SNS 앱 만들기
직접 null일 경우를 작성한 경우
이렇게 직접적으로 null인 경우의 로직을 작성해주니깐 작동이 되긴 한데, Moo님처럼 그냥 isEqualTo만 사용해서는 여전히 안 되네요. 해결은 했지만 원인이 궁금합니다..!
-
미해결파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편
docker run -d --restart always --name redis7 --publish 6379:6379 redis:7
docker --version Docker version 24.0.6, build ed223bc 으로 설치되어있는데 제목의 실행 명령어 수행시 docker run -d --restart always --name redis7 --publish 6379:6379 redis:7docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.See 'docker run --help'. 에러가 발생합니다
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
스마트포인터 25분 근처
같은부분 해봤습니다visual studio 2022버전이고컴파일러는 c++ 20 버전입니다 주석 단 것처럼 되는데 수업중 설명하고 다른거같습니다출력하면 소멸되었다는 부분이 없다는건 똑같지만 &k2로 들어가지지도 않고scope 후에 조사식에 k2를 쳐봐도 없다고 나옵니다 k2가 왜 삭제가 되는지 모르겠습니다 shared_ptr<Knight> k1 = make_shared<Knight>(); // k1 생성될 때 k1의 ref count가 1로 초기화된다 // 괄호 안은 ref count // k1 [ 1] { shared_ptr<Knight>k2 = make_shared<Knight>(); // k2 생성될 때 k2의 ref count가 1로 초기화된다 // k2 [ 1] k1->_target = k2; // k2를 타겟으로 하고 있어서 k2의 ref count가 올라간다 // k2 [ 2] k2->_target = k1; // k1을 타겟으로 하고 있어서 k1의 ref count가 올라간다 // k1 [ 2] } // scope가 끝나서 k2가 참고하는 객체가 사라졌다... 사라지면 안되는거 아닌가? // k1을 타겟으로 하던 k2가 사라졌지만 // k1 [ 2]가 유지되었다 k1->Attack();