묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
메소드 인자
안녕하세요. ^^ 이번 강의에서 구현한 메소드 중 하나인 discount()에 관해 질문드립니다. 스펙은 int discount(Member member, int price) 이었는데요, discount() 내에서는 회원 등급.. member.getGrade()만 사용하는데 Grade 타입이 아닌 Member 타입 객체를 받는 이유가 궁금합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: ASP.NET Core 심화편
ConfigureServices 질문
호스트가 서비스 컨테이너를 생성하고 ConfigureServices 메서드를 사용하여 서비스 컨테이너에 서비스를 등록한다고 알고있습니다. ( 틀릴 수도 있어요.)강좌에서 ConfigureServices 메서드안에 생명주기가 있는 서비스를 넣는걸 보고 궁금해졌는데 Singleton 으로 만든 서비스는 앱 전체에서 하나만 생성되어 유일하게 사용되는것이고 나머지 Scoped 같은 것들은 HTTP 요청이 들어올 때 마다 새로운 서비스가 생성되어 사용되는건가요?
-
미해결공공데이터로 파이썬 데이터 분석 시작하기
갑자기 복습하다가 오류가 떴습니다
안녕하세요 질문이 있어서 질문 남깁니다. 강의를 들을 때는 다 잘됐었는데 복습을 하는도중 loc부분만 다 에러가 뜹니다. 갑자기 왜 그러는지 이유를 모르겠습니다.
-
미해결CSS Flex와 Grid 제대로 익히기
flex 궁금합니다
flex 강의 잘 듣고 있습니다! 저기 메뉴 글자 product의 t가 안떨어 지도록 할 수 있는 방법이 궁금합니다 ㅠㅠ
-
미해결iOS/Android 앱 개발을 위한 실전 React Native - Basic
npm --version 6.4.1
안녕하세요, 좋은 강의 감사합니다. 제 mac 으로 npm --version 확인 시 6.4.1으로 뜨는데, 강의에는 6.13.7 버전입니다. 혹시 이 버전 다른 게 개발 환경에 영향이 있을까요? 감사합니다.
-
미해결몇 줄로 끝내는 인터랙티브 웹 개발 노하우 [초급편]
죄송한데 질문좀 드릴게요 ㅠ
x y 전역변수 0으로 초기화 해야 작동이 되는 이유가 궁금합니다. 숫자 값이 있어야 리 퀘스트 프레임이 작동되는 건가요?ㅠ 아그리고 이벤트리스너는 클라이언트만 가져오는 역할을 하는건가요? 마우스무브는 리스너에 있는데 루프함수에서 작동되는 원리를 몰라서요 ㅠ 초보라 .. 죄송합니다..
-
미해결스프링과 JPA 기반 웹 애플리케이션 개발
압축파일관련
강의와 관련 압축파일을 푸는데 파일이름이 너무 길다며 약 920개 정도의 파일이 압축해제가 안되었다고 뜨는데... 이게 정상적인가요..? 이런경우는 처음이라 질문드려요
-
미해결Vue로 Nodebird SNS 만들기
로그인 관련
요즘 자주 질문드리네요~ :) 해당 강좌를 질문을 통해서 무사히~ 로컬 회원가입, 로그인, 로그아웃이 되어서 SNS 로그인으로 넘어가고 있습니다. express passport를 이용한 google 인을 하고 싶어서 만들어봤는데 뭔가 하나가 부족해서 질문 남깁니다. 인터넷 stackoverflow에서 자료가 너무 없어서 passport.org에서도 자료를 최대한 찾아봤는데 해결이 안되네요.. 제 생각에는 1. HTML 에서 <a href=''> Google login </a> 로 트리거 하고 2. backend에서 get('/google') 로 들어오면 해당 scope를 가지고 패스포트로 strategy로 보낸 후 3. 인증 처리 이후 관련 user 정보를 google에서 받고 4. user 정보를 내 database에 저장한 후 5. 콜백 처리후 redirect로 프론트로 보내서 6. nuxtServerInit 함수로 db에 저장된 것을 불러와 store에 다시 저장후 로그인 인증을 유지한다. 여기까지 인데~ 문제점이 많습니다. 4번에 database 저장하는 것이 패스워드가 없어서 기존에 있던 User Model이 (nickname, email, password)인데 password를 넣을수가 없어서 에러가 납니다. 그래서 임의로 1111을 넣었는데 작동은 잘되는데 이건 아닌 것 같아서~ 어떻게 해야 하는지 모르겠네요. 관련 자료에 대해서 zerocho.com의 facebook을 봤는데 조금 달라서 잘 되지 않고 있습니다. Facebook 도 해보고 싶은데 제가 하는 방식과는 조금 달라서 난감한 상황이라 문의 드립니다. 1. backend/routes/auth.js const express = require('express'); const bcrypt = require('bcrypt'); const passport = require('passport'); const db = require('../models'); const { isLoggedIn, isNotLoggedIn } = require('./middlewares'); const router = express.Router(); router.get('/', (req, res)=>{res.send('logout')}) router.get('/failed', (req, res)=>{res.send('failed to log in')}) router.get('/good', isLoggedIn, (req, res)=>{ res.redirect('http://localhost:3000/setup') res.send(`welcome to ${req.user.displayName}`) }) //1. a tag 를 통해서 '/google' 로 오면 passport-setup.js 로 profile 정보를 가지고 감(id, password, email) router.get('/google', passport.authenticate('google', { scope: ['profile', 'email'] })); //6 req.user 정보가 안생기면 '/auth/failed', 정보가 생기면 '/auth/good' 으로 redirect 됨 router.get('/google/callback', passport.authenticate('google', { failureRedirect: '/auth/failed' }), function(req, res) { console.log(req.user) res.redirect('/auth/good') }); router.get('/google/logout', (req, res)=>{ req.session = null req.logout() res.redirect('/') }) 2. backend/passport/passport-setup.js const passport = require('passport'); const User = require('../models/User'); const GoogleStrategy = require('passport-google-oauth20').Strategy; const db = require('../models/') const bcrypt = require('bcrypt') //4 구글 아이디를 들고 쿠키를 싦음 passport.serializeUser(function(user, done){ done(null, user) }) // 5 user 정보를 보내줌 req.user passport.deserializeUser(async (user, done)=>{ try{ const newUser = await db.User.findOrCreate({ where:{ email: user.emails[0].value, username: user.displayName, password: '1111' } }) return done(null, user) }catch(error){ console.log(error) return done(error) } }) // passport.deserializeUser(function(user, done){ // console.log('google-user', user) // done(null, user) // req.user // }) //2 '/google'에서 넘어옴 아이디 패스워드 체크 후 인증이 되면 callback URL로 보내줌 passport.use(new GoogleStrategy({ clientID: "28194224462-job5pv0aswefef3s2hjqlf57tsdfsdflv956ko2r5hr.apps.googleusercontent.com", clientSecret: "lfj_aYTi6zgXe4nwefBHF1dpwefewfewfYyq", callbackURL: "http://localhost:3085/auth/google/callback" }, //3 구글 인증이 되면 해당 프로필로 구글 아이디를 User Db에서 받아옴 그리고 done으로 user 값을 받거나 err 나면 error를 보내줌 function(accessToken, refreshToken, profile, done) { return done(null, profile); } )); backend/app.js //------------------------------------------------// // BACKEND/FRONT PORT //------------------------------------------------// const backPort = '3085' const frontPort = '3000' const express = require('express') const db = require('./models') const cors = require('cors') const morgan = require('morgan') //------------------------------------------------// // ROUTER REQUIRE //------------------------------------------------// const userRouter = require('./routes/user') const authRouter = require('./routes/auth') // const widgetRouter= require('./routes/widget') // const imageRouter = require('./routes/image') // const databaseRouter = require('./routes/database') // const postRouter = require('./routes/post') // const loadPostRouter = require('./routes/loadPost') //------------------------------------------------// // PASSPORT MODULE //------------------------------------------------// const passport = require('passport') const passportConfig = require('./passport') const session = require('express-session') const cookie = require('cookie-parser') require('./passport/passport-setup') require('./passport/passport-facebook') const app = express() app.use(morgan('dev')) db.sequelize.sync({force:true} ) // db 실행 {force:true} app.use(express.json()) // express 가 json을 받기 위함 app.use(express.urlencoded( {extended: false})) // passport app.use(session({ resave: false, saveUninitialized: false, secret: 'ns747800', cookie: { httpOnly: true, secure: false, } })) app.use(cookie('ns747800')) app.use(passport.initialize()) app.use(passport.session()) passportConfig() //------------------------------------------------// // CORS FRONTEND PORT //------------------------------------------------// app.use(cors({ origin: `http://localhost:${frontPort}`, credentials: true })) //------------------------------------------------// // IMAGE STATIC FILES //------------------------------------------------// app.use('/', express.static('uploads')); //------------------------------------------------// // ROUTER API //------------------------------------------------// app.get('/', (req,res)=>{ res.send('hello wizeto') }) app.use('/user', userRouter) app.use('/auth', authRouter) // app.use('/image', imageRouter) // app.use('/widget', widgetRouter) // app.use('/database', databaseRouter) // app.use('/post', postRouter) // app.use('/loadpost', loadPostRouter) //------------------------------------------------// // LISTEN //------------------------------------------------// app.listen(backPort,()=>{ console.log(`YES backend server is ${backPort}`) }) 조금 자세히 설명해주시면 감사하겠습니다.~~~ vue - express - passport - google 관련 너무 자료가 없어요...
-
미해결현존 최강 크롤링 기술: Scrapy와 Selenium 정복
PhantomJS 가 중단..
Important: PhantomJS development is suspended until further notice 라고 뜨네요. 추후 공지가 있을떄까지는 중단이라고 하는가 봅니다.
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
파이어 베이스 구글 로그인을 구현한뒤 몇가지 질문이 있습니다.
앱에서 구글 로그인을 사용하는건 편리하고 좋은거 같은데 (의미는 대충 파악하고 복붙만 했어여 구글 로그인 객체로 로그인한뒤 그 결과를 파이어 베이스 유저에 저장하면 루트 페이지에서 그 변화(로그인 상태 변화)를 감지해서 로그인 상태가 될경우 탭 페이지 출력 이런식으로 (인자값이나 토큰 설정 같은건 의미를 정확히 모르고 일단 복붙했어여 ) 그런데 이시점에서 질문이 4가지 있습니다 1.구글 파이어베이스 로그인을 구현한뒤 추가적인 계정 관련 정보를 저장해야 한다면 (전화 번호, 팔로잉 팔로우 등등) 클라우드 파이어 스토어에 nosql 형식으로 저장하나여? 2.로그인과 계정 정보(팔로잉 팔로워 등등)만 파이어베이스와 연동하고 그외는 전형적인 api 서버들과 연동하는것도 괜찮은 방식이 되나여? 3.로그인 로직은 그냥 복붙해서 써서 어렵지 않은거 같은데 orm 비슷한 로직들이 전형적인 api 서버(node,장고 등)에 대한 호출과는 조금 다른것 같아서 좀더 어렵게 느껴지는데 전형적인 api 서버 + flutter 강의는 아직 안찍으셨나여? 4.책도 구입하는게 좋을까여? (플루터와 다트 기초가 부족해서여 그리고 1,2,3의 답이 혹시 책에 있을까여?) 알려주시면 감사여 !
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
안녕하세요 강사님 auth 부분 질문드릴게요
안녕하세요 강사님 한번 완강하고 두번째 듣는중입니다. #13 Auth 기능만들기 강의를 들었습니다. app.get('/api/users/auth',auth,(req,res)=>{ ...생략 부분에서 잘 이해가 안되는게.. 로그인 할때는 포스트맨으로 post register을 돌리고, 로그 아웃할때는 포스트맨으로 get logout 을 돌리잖아요? 근데 auth 부분은 포스트맨에서 get auth 이렇게 돌리는것도 아닌데 어떻게 실행이 되는지 잘 이해가 안되네요.. 마치 제가 느끼기에는 로그인 할때 자동으로 auth 부분까지 돌아가는 것 같이 느껴지네요.. 답변해주시면 정말 감사하겠습니다!
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
1.19 버전에서 deployment 생성 스크립트가 변경된 것 같네요
kubectl run 명령어는 pod 실행 명령어로 바뀌고 deployment를 생성하려면 kubectl create deployment {디플로이먼트-이름} --image={이미지-이름} 와 같은 형태로 해야되네요, 제가 잘 본게 맞는지 확인부탁드립니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
게시글 작성 후 삭제 시 워크벤치 게시글 ID는 변경안되나요?
게시글을 작성하면서 id가 1,2,3,4 ... 올라가면서 현재는 23, 24로 나오는데 게시글을 전부 삭제하고, 작성하면 1, 2가 아니고 25, 26 ... 이게 정상인건가요?
-
미해결[리뉴얼] 처음하는 파이썬 데이터 분석 (쉽게! 전처리, pandas, 시각화 전과정 익히기) [데이터분석/과학 Part1]
머신러닝/인공지능 기본
선생님, 머신러닝/인공지능 기본 강의는 언제쯤 출시(?)예정이신가요?ㅎㅎ 정확하진 않겠지만 대략적으로라도 알려주심 감사하겠습니다. 기다리려구요.
-
미해결[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드
box-sizing태그에 대해서 궁금한점이 있습니다.
아래와 같이 box sizing을 안넣고 padding을 20px; 그리고 border를 10px를 줬을때 두번째 사진처럼 패팅이 먹히는데, 박스사이징을 보더박스로 한 경우에는 상하좌우로 20px; 패딩이 안먹히잖아요. 원래 그런건가요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
aws ec2 프리티어 사용제한에 대한 질문입니다
ec2 서버 월 750 시간 무료라고 알고 있는데 11월 22일 부터 시작한 ec2 서버가 왜 750 시간 모두 사용이 되었는지 모르겠습니다. 현재 2달러 과금이 되었는데 서버를 계속 켜놓으면 과금이 많이 되나요? 꺼놓는게 나을까요 ㅠㅠ..
-
미해결[개념부터 실습까지] 추천 시스템 입문편
sunplot
개봉연도 시각화 수업을 google colaboratory에서 진행하며 그대로 따라했는데 sunplot의 x축(개봉연도)이 오름차순이 아니라 중구난방으로 나와서 막대바가 들쭉날쭉이네요 원래 이런건가요?
-
미해결Vue.js 시작하기 - Age of Vue.js
배포 질문.
안녕하세요. 좋은 vue강의 만들어주셔서 감사합니다. 프론트엔드는 보통 배포시에 build 된 결과물을 서버에 올리고 nginx로 연결하는 방법을 이용하나요? 현업에서 백엔드와 함께 전체적인 서비스 배포가 어떻게 이루어지는지 궁금합니다.
-
미해결코어 자바스크립트
오프라인과 온라인 중
오프라인과 온라인 중 뭘 들으면 좋을까요? 웬만하면 생략보다는 더 깊이 강의하신 내용이 좋겠는데 고민이네요. 이제 막 시작하려는 학생입니다!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원가입 테스트 오류관련 질문드립니다
강사님 안녕하세요! 강의 잘 듣고있습니다. 다름이 아니라 회원가입 단위테스트를 하는데 오류관련하여 질문드립니다! <테스트환경 : 윈도우10, 인텔리제이 커뮤니티버전> 아래와같이 실행하여 h2오픈하고 회원가입 단위테스트를 했습니다 테스트 결과는 히카리관련 오류와 jdbc연결오류입니다 wrong user name or password관련한 오류는 스프링부트2.4부터 application.properties에 spring.datasource.username=sa를 추가해줘야한다고 하여 추가된상태입니다. 시간되실때 확인부탁드립니다:)