묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
생성 및 수정 페이지 사용시 302 에러
새로만든 포스트 생성 페이지나 수정 페이지를 통해 게시물을 생성하거나 수정하려고 하면 아래와 같은 오류가 발생합니다. "POST /blog/6/update/ HTTP/1.1" 302 0"POST /blog/create/ HTTP/1.1" 302 0 게시물이 생성되는 것과 수정되는 것에는 문제가 없는데 302가 떠서 이게 뭔가하고 살펴보니 head_image는 새로 생성할수도, 변경할 수도 없습니다. 제가 어딘가에서 오타를 낸 걸까요?
-
미해결파이썬 사용자를 위한 웹개발 입문 A to Z Django + Bootstrap
views.py의 클래스명과 템플릿의 관계에 대해 이해가 잘 안됩니다.
views.py에서 PostCreate와 PostUpdate 클래스가 템플릿과 어떻게 연결되는지 이해가 되지 않습니다. PostList나 PostDetail은 post_list, post_detail을 자동으로 찾는다고 이해하고 있었는데,PostCreate와 PostUpdate는 post_create, post_update 없이 템플릿이 자동으로 지정된거 같아 혼란스럽습니다. 클래스가 어떻게 템플릿을 찾는지 설명해주실수 있을까요? 그리고 PostListByCategory는 post_list_by_category템플릿을 찾아야 하지만 by_category부분이 없어 post_list.html을 템플릿으로 삼는다고 이해하고 있는데 이게 맞는건가요?
-
해결됨스프링 핵심 원리 - 기본편
BeanDefinition을 이해하기-단편
말하자면, xxxBeanDefinitionReader가 java code 및 xml을 '번역'하여 BeanDefinition이라는 단일 표현체를 만드는 것이군요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
엇..저도 같은현상이...
이제 마지막부분에 로그인을 하려고 하니까 로딩중 만돌아가고 프로필이 뜨지 않습니다. 리덕스데브툴로 확인하니까 사가로 넘어가지가 않은거 같아요. 깃허브 채널 4로 비교해봐도 다른점을 못찾겠는데 왜그럴까요..
-
미해결Vue.js 시작하기 - Age of Vue.js
블로그에 내용정리
안녕하세요 캡틴! 수업을 듣고 배운 것을 종합 정리해서 블로그로 올릴려고 했는데 이미 누가 질문으로 물어봤더라구요. 출처만 잘 남기면 괜찮다고 하셔서 저도 그냥 바로 올렸는데 생각해보니 원작자에게 직접 허락을 받는게 맞는거 같아서 죄송스럽게도 사후보고(?)형태로 요청을 드리게 되었습니다. 혹시 블로그에 내용 정리를 업로드 해도 괜찮을까요? 강사님 강의랑 강사님께서 참고로 올려주신 블로그를 보고 나름 정리했습니다. 출처도 전부 적었구요. 혹시 문제가 된다면 삭제하겠습니다 ㅠㅠ
-
미해결반응형 웹사이트 포트폴리오(Architecture Agency)
안녕하세요 iframe css 에 대한 질문입니다.
안녕하세요, iframe 제이쿼리 연결해서 모달창 띄우는 부분에서 질문이 있는데요, 강의하신 내용대로 아래와 같이 수정하면 html 페이지 링크했을때는 괜찮은데 이미지를 링크하면 이미지도 화면에 꽉차게 뜨는데요, 혹시 이미지는 원래 기본설정대로 두고 html페이지에만 css 적용시킬 방법이 있을까요? 제작자 깃허브 보면 <a href="#" data-featherlight="myimage.png">Open image in lightbox</a> <a href="#" data-featherlight="myhtml.html .selector">Open ajax content in lightbox</a> <a href="#" data-featherlight="<p>Fancy DOM Lightbox!</p>">Open some DOM in lightbox</a>이런식으로 나뉘어져서 써있긴 한데 이렇게 해봐도 창은 전체화면 크기입니다. ㅠㅠ .featherlight .featherlight-content { position: relative; text-align: left; vertical-align: middle; display: inline-block; overflow: auto; padding: 0; border-bottom: 25px solid transparent; margin-left: 0; margin-right: 0; max-height: 100%; background: #fff; cursor: auto; white-space: normal; width: 100%; height: 100%; }
-
미해결스프링 웹 MVC
@SessionAttributes와 @ModelAttribute 질문있습니다!
--sampleController -- SampleControllerTest 핸들러 메소드 8부 강의를 듣고 있었는데 test잘 통과하던 createEvent 함수가 sampleController class에 sessionAttributes("event") 애노테이션을 붙이니깐 createEvent 함수가 실행되지 않았습니다. --console Error 여기 강의 질문에서와 구글링 해봐서 나름 찾아본 결과, ModelAttribute 애노테이션을 쓰면 sessionAttributes("event")에서 있는 지 확인해보는 데 처음에 없으면 에러를 뱉는다. 였습니다. 그래서 SampleController 클래스에서 @ModelAttribute 선언 대신에 주석 단 위치에 model.addAttribute("event") 하니깐 test 가 에러없이 통과하는 것을 확인했습니다. ModelAttribute애노테이션을 쓰면 왜 createEvent test함수가 통과하지 못 하는 이유와 이것을 다른 방법으로 해결할 수 있는 지 궁금합니다. 간단하게라도 참고사항이나 가이드 주시면 감사하겠습니다!
-
해결됨스프링 핵심 원리 - 기본편
메소드 인자
안녕하세요. ^^ 이번 강의에서 구현한 메소드 중 하나인 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 ... 이게 정상인건가요?