묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
질문하나만드려도될까요?
개발자님 안녕하세요 저는 취업준비생입니다 개발자님의 무료 강의와 유료강의 를 다 구매해서 듣고있습니다 제가 깃을 오늘부터 사용하는데 그전에 따라친 코드들을 깃에 올려놓고싶은데 괜찮을까요 ? 면접시 깃을 사용해서 공부했다는 증거를 보여주고싶어서그렀습니다 혹은 안된다한다면 gitignore 등록은 괜찮을란지요.. 답변감사합니다 또한 다음강의 기대하고있습니다
-
해결됨프로그래밍 시작하기 : 웹 입문 (Inflearn Original)
설문조사 실습에서
설문조사 실습에서 for (var j = 0; j < list[i].options.length; j++) // 이 부분에서 에러가 나타납니다.Uncaught TypeError: Cannot read property 'length' of undefined at survey.html:23뭐가 문제일까요...?
-
해결됨스프링 부트 개념과 활용
개발자님 질문하나만 드려도될까요?
제가 깃을 이제서야 공부했습니다 개발자님의 무료 강의와 유료강의를 다구매해서 듣고있습니다. 공부한거 하나하나 깃에 올려도될까요? 올리면 오픈소스가되고 저작권침해가 될것같아서ㅠㅠ 취업준비하면서 공부하고있습니다 면접에 플러스 요인이될것같아서 질문드립니다. 답변감사합니다.
-
미해결프로그래밍 시작하기 : 웹 입문 (Inflearn Original)
div / span 차이?
div는 블록 요소, span은 인라인 요소로 이해하고 있는데요, div안에 span을 넣는 경우는 어떻게 이해하면 될까요? 아이디 validation 구현을 위해 div 안에 span을 넣을 때 왜 입력폼 오른쪽(옆)에 구현되는지 궁금합니다. span이 인라인 요소라면 다음줄에 구현되어야 하는 것 아닌가요? 질문이 두서 없지만 요약하자면 div와 span 쓰임새 차이가 궁금합니다!
-
미해결코로나맵 개발자와 함께하는 지도서비스 만들기 1
서비스 시작시에 현재위치에서 지도를 시작할 수 있나요??
안녕하세요 강의 잘 듣고 있습니다 이 강의의 다른분 질문처럼 현재 위치를 눌렀을 때 표시는 똑바로 되지만 해당 위치로 제대로 이동하지는 않네요... 그래서 지금 서비스를 시작하면 서울에서 시작을 하는데 현재위치 혹은 제가 지정한 위치에서 서비스가 시작되도록 서비스를 구현할 수 있나요?? 있다면 방법은 어떻게 하나요??
-
미해결실전! 웹사이트제작! Step By Step! _Basic (한화캐미컬_반응형웹)
안녕하세요. 강의 보면서 공부하고 있습니다.
안녕하세요. 강의 보면서 공부하고 있습니다. 설명을 잘 해 주셔서 감사합니다. 이곳에 강의를 몇 개 올려 주셨는데요, 다 들을려고 합니다. 혹시 어떤 순서로 들으면 좋은지 알려주세요. 그리고, 회원가입, 로그인, 답변형 게시판, 구입물품 장바구니담기, 결제 등의 기능이 있는 쇼핑몰 제작 강의도 꼭 부탁드립니다. 실제 기능은 서버단에서 구현한다고 해도 이를 위한 front단 화면을 만들고 싶습니다. 부탁드립니다. 오늘도 좋은 하루 되세요.
-
미해결하울의 안드로이드 인스타그램 클론 만들기
안녕하세요
안녕하세요 강의 덕분에 잘 듣고 보고 배우고있습니다. 한가지 궁금한게 생겼는데요 이메일과 비밀번호를 치면 바로 로그인과 동시에 회원가입이 되는데 이를 구분할수 있는 방법이 없을까요?! 구글에 뭐라치면 이강의랑 합칠수있을까요
-
해결됨스프링 시큐리티
(해결완료) AjaxSecurityConfig 클래스에서 cofigure 이전 강의코드에서 살짝 바뀌었으니 참고들 하세요!
이전 강의 코드 현재 강의 코드
-
미해결Vue.js 끝장내기 - 실무에 필요한 모든 것
Vue CLI 4.x에서 eslint+prettier 설정 관련..
안녕하세요. vue CLI 4.x로 수강하고 있는데..혹시 eslint+prettier 설정에 변경이 있는걸까요..?계속 error가 나서..eslint+prettier 부분을 주석처리하고 수강을 이어가고 있긴 한데.. 다시 해보려고 해도 잘 되지 않아..질문 남겨봅니다.
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
가상환경을 설정하고 import pendulum을 하면 에러가 발생합니다.
가상환경 설정을 끝내고 예제처럼import pendulum을 하는데, 아래와 같은 에러가 납니다. ModuleNotFoundError: No module named 'pendulum' pip list로 pendulum이 설치되어 있는것고 확인했는데 왜 모듈을 찾지 못하는 건지 모르겟습니다..
-
해결됨스프링 웹 MVC
@RequestParam
안녕하세요 강사님, @RequestParam으로 요청매개변수를 Map이외에 List, Optional 객체로도 받아 사용할 수 있다는것을 알았는데 spring 내부적에서 포멧터를 사용해 바인딩을 해주는지 궁금합니다
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
시점 이동 관련 질문
현재 내가 보고 있는 시점으로 카메로 이동이 되는 것과는 반대로 카메라가 보고 있는 시점으로 내가 이동 하는 방법이 있을까요?
-
미해결[OpenCV] 파이썬 딥러닝 영상처리 프로젝트 - 손흥민을 찾아라!
faceROI 선정
faceROI 선정할 때,범위가 [x:x+w, y:y+h]가 아닌 [y:y+h, x:x+w]가 되는걸까요? x 축 y축이.. 제가 생각하는 개념이랑 다른건가요?!! 강의영상에도 질문남겼는데, 여기에 올리는게 좋을것 같아서 여기에 질문드립니다!!
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
궁금한 점이 있습니다!
로그인 을 유지하기 위해서 dispatch({type:LOAD_MY_INFO_REQUEST});//login유지 를 index.js 에서 써주는걸로 이해하고 있는데요. http://localhost:3160/profile 로 이동 하여 새로고침 눌러도 계속 정보를 가져오더라구요 !(로그인이 유지되어있다는 말!) 왜 그런가요 ? 사실 상 모든 페이지에서 로그인을 유지하기 위해 LOAD_MY_INFO를 dispatch 해야하는게 아닌가요 ?
-
미해결HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)
메뉴 li로 안 감싸고 a로만 해도 괜찮은 건가요?
백엔드로 넘어가서 연결시 문제 없는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Enum
Define 클래스가 static이 아닌데 그 안에 있는 멤버 변수 Enum은 해당 클래스를 인스턴스로 만들지 않아도 Define.xxx 로 접근이 가능한건가요??? enum이 상수여서 그런건가요?? 그러면 const도 접근이 가능하나요??
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기
업로드 과정 오류
강의를 듣는도중 업로드 과정에서 서버와 클라이언트 똑같은 코드를 사용했는데도 fail to the save video in server alert를 띄웁니다. 도저히... 코드를 봐도 모르겠습니다. 한번 봐주시면 감사하겠습니다. https://github.com/AnGwangsu/YoutubeClone
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 유튜브 사이트 만들기
비디오 업로드 폼 질문드려요
강의 잘 보고 있습니다. 비디오 업로드 폼에서 콘솔에 파일 이름과 경로는 나오는데 왜 영화/애니, 비공개/공개 설정하고 submit 버튼 누르면 'Please first fill all the fields' 팝업창이 왜 뜨는지 궁금합니다. 썸네일 504 에러도 궁금하구요 ㅜㅜ UploadVideoPage.js 코드 첨부합니다. import React, { useState, useEffect } from 'react' import { Typography, Button, Form, Input, Icon } from 'antd'; import Dropzone from 'react-dropzone'; import axios from 'axios'; import { useSelector } from "react-redux"; const { Title } = Typography; const { TextArea } = Input; const Private = [ { value: 0, label: '비공개' }, { value: 1, label: '공개' } ] const Catogory = [ { value: 0, label: "영화/애니메이션" }, { value: 0, label: "자동차" }, { value: 0, label: "음악" }, { value: 0, label: "동물" }, { value: 0, label: "스포츠" }, ] function UploadVideoPage(props) { const user = useSelector(state => state.user); const [title, setTitle] = useState(""); const [Description, setDescription] = useState(""); const [privacy, setPrivacy] = useState(0) const [Categories, setCategories] = useState("영화/애니메이션") const [FilePath, setFilePath] = useState("") const [Duration, setDuration] = useState("") const [Thumbnail, setThumbnail] = useState("") const handleChangeTitle = (event) => { setTitle(event.currentTarget.value) } const handleChangeDecsription = (event) => { console.log(event.currentTarget.value) setDescription(event.currentTarget.value) } const handleChangeOne = (event) => { setPrivacy(event.currentTarget.value) } const handleChangeTwo = (event) => { setCategories(event.currentTarget.value) } const onSubmit = (event) => { event.preventDefault(); if (user.userData && !user.userData.isAuth) { return alert('Please Log in First') } if (title === "" || Description === "" || Categories === "" || FilePath === "" || Duration === "" || Thumbnail === "") { return alert('Please first fill all the fields') } const variables = { writer: user.userData._id, title: title, description: Description, privacy: privacy, filePath: FilePath, category: Categories, duration: Duration, thumbnail: Thumbnail } axios.post('/api/video/uploadVideo', variables) .then(response => { if (response.data.success) { alert('video Uploaded Successfully') props.history.push('/') } else { alert('Failed to upload video') } }) } const onDrop = (files) => { let formData = new FormData(); const config = { header: { 'content-type': 'multipart/form-data' } } console.log(files) formData.append("file", files[0]) axios.post('/api/video/uploadfiles', formData, config) .then(response => { if (response.data.success) { console.log(response.data); let variable = { filePath: response.data.filePath, fileName: response.data.fileName } setFilePath(response.data.filePath) //gerenate thumbnail with this filepath ! axios.post('/api/video/thumbnail', variable) .then(response => { if (response.data.success) { setDuration(response.data.fileDuration) setThumbnail(response.data.thumbsFilePath) } else { alert('Failed to make the thumbnails'); } }) } else { alert('failed to save the video in server') } }) } return ( <div style={{ maxWidth: '700px', margin: '2rem auto' }}> <div style={{ textAlign: 'center', marginBottom: '2rem' }}> <Title level={2} > Upload Video</Title> </div> <Form onSubmit={onSubmit}> <div style={{ display: 'flex', justifyContent: 'space-between' }}> <Dropzone onDrop={onDrop} multiple={false} maxSize={800000000}> {({ getRootProps, getInputProps }) => ( <div style={{ width: '300px', height: '240px', border: '1px solid lightgray', display: 'flex', alignItems: 'center', justifyContent: 'center' }} {...getRootProps()} > <input {...getInputProps()} /> <Icon type="plus" style={{ fontSize: '3rem' }} /> </div> )} </Dropzone> {Thumbnail !== "" && <div> <img src={`http://localhost:5000/${Thumbnail}`} alt="haha" /> </div> } </div> <br /><br /> <label>Title</label> <Input onChange={handleChangeTitle} value={title} /> <br /><br /> <label>Description</label> <TextArea onChange={handleChangeDecsription} value={Description} /> <br /><br /> <select onChange={handleChangeOne}> {Private.map((item, index) => ( <option key={index} value={item.value}>{item.label}</option> ))} </select> <br /><br /> <select onChange={handleChangeTwo}> {Catogory.map((item, index) => ( <option key={index} value={item.label}>{item.label}</option> ))} </select> <br /><br /> <Button type="primary" size="large" onClick={onSubmit}> Submit </Button> </Form> </div> ) } export default UploadVideoPage Video.js 코드도 첨부합니다. const express = require('express'); const router = express.Router(); const multer = require('multer'); var ffmpeg = require('fluent-ffmpeg'); const { Video } = require("../models/Video"); const { Subscriber } = require("../models/Subscriber"); const { auth } = require("../middleware/auth"); var storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, 'uploads/') }, filename: (req, file, cb) => { cb(null, `${Date.now()}_${file.originalname}`) }, fileFilter: (req, file, cb) => { const ext = path.extname(file.originalname) if (ext !== '.mp4') { return cb(res.status(400).end('only jpg, png, mp4 is allowed'), false); } cb(null, true) } }) const upload = multer({ storage: storage }).single("file") //클라이언트가 올린 비디오를 서버에 전달한다 router.post("/uploadfiles", (req, res) => { upload(req, res, err => { if (err) { return res.json({ success: false, err }) } return res.json({ success: true, filePath: res.req.file.path, fileName: res.req.file.filename }) }) }); router.post("/thumbnail", (req, res) => { let thumbsFilePath =""; let fileDuration =""; ffmpeg.ffprobe(req.body.filePath, function(err, metadata){ console.dir(metadata); console.log(metadata.format.duration); fileDuration = metadata.format.duration; }) ffmpeg(req.body.filePath) .on('filenames', function (filenames) { console.log('Will generate ' + filenames.join(', ')) thumbsFilePath = "uploads/thumbnails/" + filenames[0]; }) .on('end', function () { console.log('Screenshots taken'); return res.json({ success: true, thumbsFilePath: thumbsFilePath, fileDuration: fileDuration}) }) .screenshots({ // Will take screens at 20%, 40%, 60% and 80% of the video count: 3, folder: 'uploads/thumbnails', size:'320x240', // %b input basename ( filename w/o extension ) filename:'thumbnail-%b.png' }); }); router.get("/getVideos", (req, res) => { Video.find() .populate('writer') .exec((err, videos) => { if(err) return res.status(400).send(err); res.status(200).json({ success: true, videos }) }) }); router.post("/uploadVideo", (req, res) => { const video = new Video(req.body) video.save((err, video) => { if(err) return res.status(400).json({ success: false, err }) return res.status(200).json({ success: true }) }) }); router.post("/getVideo", (req, res) => { Video.findOne({ "_id" : req.body.videoId }) .populate('writer') .exec((err, video) => { if(err) return res.status(400).send(err); res.status(200).json({ success: true, video }) }) }); router.post("/getSubscriptionVideos", (req, res) => { //Need to find all of the Users that I am subscribing to From Subscriber Collection Subscriber.find({ 'userFrom': req.body.userFrom }) .exec((err, subscribers)=> { if(err) return res.status(400).send(err); let subscribedUser = []; subscribers.map((subscriber, i)=> { subscribedUser.push(subscriber.userTo) }) //Need to Fetch all of the Videos that belong to the Users that I found in previous step. Video.find({ writer: { $in: subscribedUser }}) .populate('writer') .exec((err, videos) => { if(err) return res.status(400).send(err); res.status(200).json({ success: true, videos }) }) }) }); module.exports = router; 뭐가 문제일까요? 도와주세요 ㅜㅜ
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
MSA 질문
해당 강의 초반에 마이크로 서비스에 대한 이야기가 나오는데요. 도커에 올리는 각각의 컨테이너가 마이크로 서비스가 되는 것인가요? 아니면 1개의 도커가 1개의 마이크로 서비스가 되는 것인가요? 맨 처음 개요 강의에서 얘기했던 모놀리틱과 마이크로 방식의 차이는 이해를 했는데 저 부분이 아리까리 하네요
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
컨테이너 질문
해당 강의에서 tomsik68/wordpress를 받아서 워드프레스 + DB를 사용했는데 (질문1) 저것처럼 제가 직접 WAS, DB 등 여러 요소들을 하나의 컨테이너에 담아 이미지화 할 수도 있나요? (질문2) 그리고 질문1과는 별개로 여러개의 컨테이너를(예를들어 아파치 올라간 컨테이너 하나, mysql올라간 컨테이너 하나) 이어붙여서(?) 하나의 웹서비스로 제공하는 것이 가능한가요?