묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[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올라간 컨테이너 하나) 이어붙여서(?) 하나의 웹서비스로 제공하는 것이 가능한가요?
-
미해결it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비
질문있습니다.
1,2,4,5번 문제는 맞는데 왜 3번만 틀렸다고 할까요..? #include<stdio.h> int num[100001]; int main(){ int i, n, temp, cnt=0, max=-214700; //freopen("input.txt","rt", stdin); scanf("%d",&n); for(i=0; i<n; i++){ scanf("%d",&num[i]); } temp=num[0]; //배열의 첫번째요소를 임시로 넣음 for(i=0; i<n; i++){ if((num[i]-temp)>=0){ //이전의 요소와 뺄셈을 했을때 0보다 크거나 같으면 증가했다 취급함. cnt++; temp=num[i]; //다음반복을 위해서 현재요소를 임시값으로 지정 } else{ //이전의 요소와 비교했을때 값이 작으므로 감소했다 취급. if(max<cnt){ //증가가 끝났으니 max값 최신화 max=cnt; } cnt=1; temp=num[i]; //다음반복을 위해서 현재요소를 임시값으로 지정 } } printf("%d",max); return 0; }
-
미해결빠르게 git - 핵심만 골라 배우는 Git/Github
pull request 질문
만약 새 branch(강의에서 newbranch)가 아닌 master에다가 커밋하고 push하고 PR하는 경우는 어떻게 되나요??
-
미해결데브옵스(DevOps)를 위한 쿠버네티스 마스터
리눅스 명령어 질문
sudo docker exec -it WP bash exec -it 가 인풋 터미널을 요청하는 명령인 것은 알겠는데 그 뒤에 WP bash는 무슨 뜻인가요? WP : 이름을 WP로 만든 xampp를 bash : 열어라(?) 라는 뜻이 맞나요??
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
강의 내용과 결과가 다르게 나와 궁금한게 생겼어요.
강사님이 db에 저장이 된 상태가 아니라 조회도 안될것이다 라고 5분에 말씀하셨는데요. 일단 commit은 안된 상태지만 조회가 됩니다. 안되야 하는데 이상하네요.. persist를 하면 JPA가 관리할거다. 영속한다. 라는것일 뿐이고 쓰기 지연 sql 저장소에만 저장이 된 상태겠지요. 즉, commit을 해야 databse에 직접적으로 쿼리가 날라가고 저장이 될텐데. 흠... Member memberA = new Member(970L, "1"); Member memberB = new Member(980L, "2"); Member memberC = new Member(990L, "3"); em.persist(memberA); em.persist(memberB); em.persist(memberC); TypedQuery<Member> query = em.createQuery("select mem from Member mem", Member.class); List<Member> members = query.getResultList(); for (Member m : members) { System.out.println("m.getId() = " + m.getId()); System.out.println("m.getName() = " + m.getName()); } System.out.println(" =============== ");// tx.commit(); //이시점에 DB 쿼리가 날라감
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
인피니트 스크롤링 리퀘스트
강좌 내용대로 적용했는데 redux devtools 로 확인할 때 LOAD_POSTS_REQUEST 가 2번 실행 되는 경우도 있어서 이부분은 정상적인 건지 제가 무언가 실수를 해서인지 원인을 모르겠어요
-
미해결[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
안녕하세요 다름이아니라 궁금한 점이 있어서요!
res = requests.get('') soup = BeautifulSoup(res.content, 'html.parser') 이 부분에서 .content, html.parser부분을 제가 실전? 다른 강의에서는 text, 'lxml' 이라고 배웠었던 것이 기억이 납니다. parser부분은 여러가지가 있다고 하셨는데 어떤 것을 써도 상관은 없는건가요?? text와 content의 차이점이 있나요? 또 requests 라이브러리와 urllib 라이브러리는 똑같이 페이지를 불러오는 것으로 이해를 하면 될까요? 예전에 검색을 하다가 요즘은 requests 라이브러리를 많이 사용한다고 봤는데 그럼 그냥 둘 중 아무거나 사용을 하면 되는건지 용도가 다른것인지 궁금합니다..! 혹시 강의에서 설명을 하셨는데 제가 듣지 못해 질문을 드리는거면 죄송합니다ㅠㅠ
-
미해결앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해
completion closure안에 @escaping 질문입니다
escaping에 해당하는 closure가 작동하려면 runQueue와 completionQueue설정이 되어 있어야만 하나요?
-
미해결실전! 스프링 데이터 JPA
@PreUpdate 시 @Transient 필드 null 로 대입되는 현상 관련 문의
안녕하세요, 스프링 데이터 JPA 관련 강의들을 잘 듣고 있습니다. (다 보았지만 다시 볼 예정입니다 ㅎㅎ..) @PreUpdate 관련하여 기대한 바와 다른 동작이 확인되어 문의드립니다. Audit 관련 정보를 기록하려 하고, 이때 Listener 를 사용하지 않고 등록일/등록자 를 저장하고자 합니다. Board 게시판은 MyAudit 클래스를 상속하고 있으며, MyAudit은 userId라는 @Transient 가 적용된 필드를 가지고 있습니다. @PrePersist public void prePersist() { creator = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 createAt = LocalDateTime.now(); modifier = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 updateAt = LocalDateTime.now(); } @PreUpdate public void preUpdate() { modifier = userId; // userId는 preUpdate가 속해있는 class field 로써 @Transient 적용 updateAt = LocalDateTime.now(); } PrePersist는 의도한 바처럼 Transient 필드 값을 가지고 저장하나, preUpdate의 경우 modifier에 null이 대입이 됩니다. Listener를 쓴다면 해결이 되겠지만 @PreUpdate에서 Transient 필드가 왜 null이 되는지 궁금합니다. 그리고 의도한 바처럼 Transient 필드의 값을 PreUpdate 시점에 가져와서 대입이 가능할지 문의드립니다.
-
미해결실전! Querydsl
where 절에서 or 을 어떻게 사용하면 되는 지 여쭤보고 싶습니다.
안녕하세요 강사님 . 복습하면서 여쭤보고 싶은점이 생겨서 글을 남깁니다. @BeforeEachpublic void before(){ Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); em.persist(teamA); em.persist(teamB); Member member1 = new Member("member1", 10, teamA); Member member2 = new Member("member2", 20, teamA); Member member3 = new Member("member3", 30, teamB); Member member4 = new Member("member4", 40, teamB); em.persist(member1); em.persist(member2); em.persist(member3); em.persist(member4);} 처럼 기본으로 데이터에서 @Testpublic void searchAndParam(){ JPAQueryFactory queryFactory = new JPAQueryFactory(em); Member findMember = queryFactory .selectFrom(member) .where( member.username.eq("member1"), member.age.eq(10) .or(member.age.eq(20)) ) .fetchOne(); Assertions.assertThat(findMember.getUsername()).isEqualTo("member1");} 제가 하고 싶었던 것은 이름이 member1이면서 나이가 10살이거나 // 나이가 20살인 사람을 선택하려고 했습니다. //member member0_ where member0_.username='member1' and (member0_.age=10 or member0_.age=20); 아쉽게도 생각과 다르게 나왔습니다. 아직 배우는 입장이다보니 어떻게짜면 원하는 결과를 얻을 수 있는지 모르겠네요. 벌써 querydsl까지 왔습니다. 덕분에 좋은 강의 정말 잘 듣고있습니다. 감사합니다!.
-
미해결하울의 안드로이드 인스타그램 클론 만들기
[참고]네비게이션바 리스너에 this 넣을시 에러
메엔 엑티비티에 네비게이션뷰를 상속받지 않고 바로 람다식으로 리스너를 달면 됩니다 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)// bottom_navigation.setOnNavigationItemReselectedListener(this) bottom_navigation.setOnNavigationItemSelectedListener { it -> when (it.itemId) { R.id.action_home -> { val detailViewFragment = DetailViewFragment() supportFragmentManager.beginTransaction().replace(R.id.main_content, detailViewFragment).commit() true } R.id.action_search -> { val gridFragment = GridFragment() supportFragmentManager.beginTransaction().replace(R.id.main_content, gridFragment).commit() true } R.id.action_photo -> { true } R.id.action_favorite_alarm -> { val alarmFragment = AlarmFragment() supportFragmentManager.beginTransaction().replace(R.id.main_content, alarmFragment).commit() true } R.id.action_account -> { val userFragment = UserFragment() supportFragmentManager.beginTransaction().replace(R.id.main_content, userFragment).commit() true } else -> false } } }}
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
params 값으로 구별하는 부분에서
value="/users/{id}/", params="version=1" 해당 부분에서 만약에 param 값이 여러개가 들어오게 되었을 때 가장 앞의 param 값으로 매핑이 되는 것을 확인할 수 있었는데요, 그렇다면 2개 이상의 param 값을 조건으로 하여 @GetMapping 으로 처리하고 싶을 때에는 어떻게 처리하는지 궁금합니다.
-
미해결그로스해킹 - 데이터와 실험을 통해 성장하는 서비스를 만드는 방법
OMTM관련 질문 드립니다
안녕하세요, 우선 좋은 강의 정말 잘 듣고 있습니다 :) "지표활용"챕터를 수강하다가 궁금한 점이 있어 질문을 남깁니다. 1) 상품을 중개하여 판매하는 종합몰이나 소셜커머스의 경우 매출의 증가를 궁극적인 목표로 삼고 있다고 생각합니다. 강의 내용 중에 매출을 OMTM으로 삼는 것을 지양하라고 하셨는데, 여러 카테고리의 상품을 한 곳에 모아 판매하는 위 사업구조의 경우에 이상적인 OMTM은 무엇이 있을지 궁금합니다. 2) OMTM과 KPI의 다른 점을 설명해주셨는데, 이를 잘 활용하는 기업은 큰 개념의 OMTM을 설정하고 각 부서가 이에 align되는 KPI를 설정하여 조직원의 역량과 부서 성과를 평가하는 것일까요? 3) 만약 문제가 되지 않는다면 마이리얼트립의 OMTM을 공유해주실 수 있으실까요? (어려우시다면 괜찮습니다 :D) 질문을 너무 많이 드려서 죄송합니다! 답변 미리 감사드립니다!