묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결웹 게임을 만들며 배우는 Vue
showBalls 질문입니다.
중복되는 부분을 methods.showBalls 로 분리해주셨는데, methods가 아닌 외부함수로 빼지 않으신 이유가 있을까요? methods는 어떤 이벤트에 대한 콜백함수를 정의하는 공간이라고 생각해서, showBalls는 차라리 this.$data를 매개변수로 받도록 해서 외부로 빼도 괜찮을 것 같다는 생각이 들어서요...
-
미해결남박사의 파이썬으로 실전 웹사이트 만들기
폼검증 과 bootstrap 일부 error 추가질문
오늘 폼검증 쪽과 bootstrap 하였는데 대부분 잘되었는데 폼 검증에서 회원 가입 성공하는데 return을 boar/list 가 아닌 아무 글도 없는 백지인 member/join 으로 이동하고 있습니다. 강의 내용과 coding한걸 여러번 비교하였는데 아직 찾지 못하였습니다. 그리고 bootstrap 으로 변경이 다되었는데 list와 view 에 table 의 라인이 다 나타나지 않고 있습니다.
-
해결됨홍정모의 따라하며 배우는 C언어
5:25 초
지금 여기서 버퍼가 있는걸 없애주기 위해서 while(getcharo()!='\n') continue;를 한다라고 말씀하셨는데요 헷갈려서 제가 while문 사이에 printf("두개의 정수를 입력하세요");를 두었는데요 getchar과 scanf를 따로 보기위해서 일단 c=getchar에 #을 입력하면 버퍼엔 #과 \0가 남아있을텐데 일단 #을 불러드리고 두개의 정수를 입력하세요: 2 2 그리고 여기서 getchar()!='\n'이 나오는데 지금 일단 큰 while문은 c에 #만 들어간상태 아닌가요? \0은 보지 않고요. 큰 와일문이 다 끝나고 그 이후에 \0가 들어가야하는데 큰 while문 조건에서 못들어가게되는거아닌가요? 이게 좀 헷갈립니다 장황하게 써서 제가 무슨말 하는건지 헷갈리시다면 댓글 부탁드립니다...ㅠㅠ
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
Nucleo429ZI로 진행을 하려고 하는데 UDP는 동작을 하지 않는데 이유를 알 수 있나요?
자재를 받기전에 수업 진도를 나가고 싶어 갖고 있던 보드를 사용하고자 하는데UDP 에코 테스트가 동작을 하지 않아 글을 납깁니다. 소스는 문제없이 구동을하는데 데이터 수신을 하지 못하더라구요. 혹시 이유를 알 수 있을까요?
-
해결됨실전! 스프링 데이터 JPA
프록시 엔티티매니저
안녕하세요 강의 잘 보고있습니다. @PersistenceContext를 통해 주입받은 엔티티매니저를 사용하면 매 호출 마다 '프록시 엔티티매니저'가 생성되는 걸로 알고있습니다. 1.이 때 매번 생성하는 프록시 엔티티매니저와 연결되는 실제 엔티티매니저 또한 매번 생성되는건가요? 2. 1이 맞다면 매번 생성된 실제 엔티티매니저들은 영속성 컨텍스트를 공유하는건지, 엔티티매니저마다 영속성 컨텍스트를 갖는건지 궁금합니다!! 3. 혹시 관련 내용이 교재에 있나요??
-
미해결iOS12 앱 개발 퍼펙트 가이드
반드시 required init을 생성해야하는 이유가 뭔가요??
ios를 배우면서 required init을 왜 사용하는지 잘 모르겠습니다 required init에 대해 알려주시면 감사하겠습니다
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 질문 드립니다.
안녕하세요 강사님, 강의 잘 보고 있습니다. 질문 드릴 것이 있습니다. 다른 언어로 해당 문제를 풀었을 때는 강의처럼 풀 수 있지만 파이썬으로 했을 때는 라이브러리로 조합을 지원하는 걸로 알고 있습니다. 관점의 차이긴 하겠으나.. 시간 효율 등을 함께 보는 알고리즘 테스트에서 파이썬 언어를 선택했을 때, 강사님께서 알려주신 방법과 기본 라이브러리를 사용하는 방법 중 어떤 방식으로 푸는게 더 나을까요?
-
미해결iOS12 앱 개발 퍼펙트 가이드
3:20~ 3: 30 초에 rating 값을 0 으로 만들어 준다고했는데 왜 0으로 만들어주는 코드가 없죠?
3:20~ 3: 30 초에 rating 값을 0 으로 만들어 준다고했는데 왜 0으로 만들어주는 코드가 없죠?
-
미해결스프링 기반 REST API 개발
EventController의 update에서 eventDto -> event로 mapping하는 방법 질문
안녕하세요. ModelMapper 관련 문의 드립니다. (강의 본론을 좀 벗어난것 같긴한데 답변해 주실 줄 믿습니다. 감사합니다. 꾸벅) EventController의 update method에서 사용자로 부터 전달받은 eventDto에 값이 일부만 들어있는 경우 (예, name만 update하고 싶은 경우에 body로 아래와 같이 보내려고 합니다) 일일이 노가다하지 않고 처리할 수 있는 방법이 있을까요. -- 아래 -- { "name" : "Updated Event" } -------- 이 경우 나머지 컬럼은 null이어서 validation에 걸립니다. 원하는 것은 나머지 컬럼은 기존값을 그대로 갖는 거예요. @PutMapping("/{id}")public ResponseEntity update(@PathVariable Integer id, @Valid @RequestBody EventDto.CreateOrUpdate eventDto, BindingResult errors, @CurrentUser User currentUser) { if (errors.hasErrors()) { return badRequestResponse(errors); } Optional<Event> byId = this.eventRepository.findById(id); if (!byId.isPresent()) { return notFoundResponse(); } Event event = byId.get(); if (currentUser != null && !currentUser.equals(event.getManager())) { return new ResponseEntity(HttpStatus.FORBIDDEN); } modelMapper.map(eventDto, event); event.update(); eventValidator.validate(event, errors); if (errors.hasErrors()) { return badRequestResponse(errors); } eventRepository.save(event); EventModel eventModel = new EventModel(event); eventModel.add(linkToDelete(event)); eventModel.add(linkToProfile("resources-events-update")); return ResponseEntity.ok().body(eventModel);}
-
미해결React로 NodeBird SNS 만들기
saga axios.get 주소질문...............
https://www.inflearn.com/questions/33218 다시 새롭게 질문드립니다,. 프론트상의 요청주소를 "localhost:3060/post/100000(그룹id)" 로 하려고 전반적으로 수정하였고 부모자식관계가 있는 댓글부분을 참고해서 < routes / back>, < sagas / front > 거의 똑같이 만들었어요 "(게시물(Post)의 부모가되는) GpostId 를 찾아서 게시물들 불러오기" 를 하고싶어서 아래와같이 코드를 작성했는데 posts/ undefined 가 뜹니다. saga 에서 loadMainPostsApi 에서 변수 gpostId를 제대로 정의하지못하는것같습니다.. ****** 댓글올리기 사이클이랑 거의 동일하게 해주었는데 ( 초록색빗금표시를 한부분의 코드 ) 게시물불러오기가 안되는 이유가 뭘까요ㅠ?? ****** < posts.js/ routes / back > // 게시물'들' 불러오기 router.get('/:id', async (req, res, next) => { // GET /api/posts/100/개발자 try { const gpost = await db.Gpost.findOne({ where: { id: req.params.id } }); if (!gpost) { return res.status(404).send('포스트가 존재하지 않습니다.!!!!'); /////////////////////////// }////////////////////////////////////////////////////////////////////////////////////////// const posts = await db.Post.findAll({ where: { GpostId: req.params.id, }, include: [{ model: db.User, attributes: ['id', 'nickname'], },{ model: db.Image, },{ model: db.User, through: 'Like', as:'Likers', attributes:['id'], }], order: [['createdAt', 'DESC']], // DESC는 내림차순, ASC는 오름차순 }); res.json(posts); } catch (e) { console.error(e); next(e); } }); < post.js/ routes / back > // 게시물 올리기 route : http://localhost:3060/post/개발자 router.post('/:id', isLoggedIn, upload.none(), async (req, res, next) => { try { // 부모가되는 그룹포스트가있는지 ///////////////////////////////////////////// const gpost = await db.Gpost.findOne({ where: { id: req.params.id } }); if (!gpost) { return res.status(404).send('포스트가 존재하지 않습니다.????'); } /////////////////////////////////////////////////////////////////////////// const newPost = await db.Post.create({ content: req.body.content, UserId: req.user.id, GpostId: gpost.id, // 어떤 그룹에 속해있는지 }); await gpost.addPost(newPost.id); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// if (req.body.image) { // 이미지 주소를 여러개 올리면 image: [주소1, 주소2] if (Array.isArray(req.body.image)) { const images = await Promise.all(req.body.image.map((image) => { return db.Image.create({ src: image }); })); await newPost.addImages(images); } else { // 이미지를 하나만 올리면 image: 주소1 const image = await db.Image.create({ src: req.body.image }); await newPost.addImage(image); } } const fullPost = await db.Post.findOne({ where: { id: newPost.id }, include: [{ model: db.User, attributes: ['id', 'nickname'], },{ model: db.Image, },{ model:db.User, as:"Likers", attributes:['id'], }], }); res.json(fullPost); } catch (e) { console.error(e); next(e); } }); <<<<<<<<<<<<<<<<<< post.js/ sagas / front >>>>>>>>>>>>>>>>>>>> // 게시물 올리기 function addPostAPI(postData){ // http://localhost:3060/post/10000 ///////////////////// return axios.post(`/post/${postData.gpostId}`, { content: postData.content },{ withCredentials: true ////////////////////////////////////////////////////////// }); //////////////////////////////////////////////////////////////////////////////// } function* addPost(action) { try { const result = yield call(addPostAPI, action.data); yield put({ type: ADD_POST_SUCCESS, data: { //////////////////////////////////////////////////////////////// gpostId: action.data.gpostId, content: result.data, },////////////////////////////////////////////////////////////////////// }); console.error(e); } catch (e) { yield put({ type: ADD_POST_FAILURE, error: e, }); } } function* watchAddPost(){ yield takeLatest(ADD_POST_REQUEST, addPost); } // 게시물 로드하기 function loadMainPostsAPI(gpostId) { // http://localhost:3060/post/10000 return axios.get(`/posts/${gpostId}`); ////////////////////////////////////////// } /////////////////////////////////////////////////////////////////////////////////// function* loadMainPosts(action) { try { const result = yield call(loadMainPostsAPI, action.data); yield put({ type: LOAD_MAIN_POSTS_SUCCESS, data: { gpostId: action.data, content: result.data, }, }); } catch (e) { yield put({ type: LOAD_MAIN_POSTS_FAILURE, error: e, }); } } function* watchLoadMainPosts() { yield takeLatest(LOAD_MAIN_POSTS_REQUEST, loadMainPosts); } < server.js / front> server.get('/post/:id', (req, res) => { // http://localhost:3060/post/1000000 return app.render(req, res, '/posted', { id: req.params.id }); }); < posted.js / pages / front > - server.js 에서 연결해주는 동적페이지 // 그룹: 동적페이지 const Posted = () => { . . . return ( <> <div className="wrap"> {/* GpostId와 그룹의 id가 같을경우에만 화면에 표시 */} {GroupPosts.map((val)=>{ var gid = window.location.href.split("/").reverse()[0]; if( gid == val.id){ return( <div> <GroupBox gpost={val} gimg={val.GImgs} /><UploadForm gpost={val} /> </div> ); } })} </div> </> ); }; Posted.getInitialProps = async (context) => { console.log('posted getInitialProps', context.query.title); }; export default Posted; < UploadForm.js / Component / front > - 게시물올리는 컴포넌트 onSubmitForm 함수부분 const onSubmitForm = useCallback((e) => { e.preventDefault(); if (!text || !text.trim()) { return alert('게시글을 작성하세요.'); } const formData = new FormData(); imagePaths.forEach((i) => { formData.append('image', i); }); formData.append('content', text); //////////////////////////////////////////////////// formData.append('GpostId', gpost.id); //////////////////// <- ////////////////////////// dispatch({ //////////////////////////////////////////////////// type: ADD_POST_REQUEST, data: formData, }); }, [text, imagePaths, gpost.id]); < post.js /reducers / front > // 게시물 불러오기 case LOAD_MAIN_POSTS_REQUEST: { return { ...state, mainPosts: [], }; } case LOAD_MAIN_POSTS_SUCCESS: { return { ...state, mainPosts: action.data, }; } case LOAD_MAIN_POSTS_FAILURE: { return { ...state, }; } < WorkBench > - GpostId 의 파란색부분은 워크벤치에서 임의로 넣어주었습니다. + 노드 백서버 오류메세지입니다
-
미해결자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌
maven update project 가 안됩니다.
동영상대로 따라했을때 J2SE-1.5 가 1.8로 변해야하는데 제 이클립스에서는 변화가 없습니다. 무엇이 문제일까요? 구글링을 해보고 읽어보았는데 딱히 해결방안이 안나와있네요. 답변 주시면 감사하겠습니다.
-
해결됨C 프로그래밍 - 입문부터 게임 개발까지
for 질문
#include<stdio.h> int main(void) { for (int i = 10; i <= 10; i++); { printf("hello %d\n", i); } } 오류(활성) E0020 식별자 "i"이(가) 정의되어 있지 않습니다. 박준서 C:\Users\aqws\source\repos\박준서\박준서\c 프로그래밍-입문부터 게임 개발까지.c 6 뭐가 문제일까요?
-
해결됨스프링 프레임워크 핵심 기술
@Autowired Target 질문
@Autowired의 타겟에 ElementType.ANNOTATION_TYPE은 언제 사용하는 건가요? @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Autowire를 학습하고 있는 와중에 궁금한게 생겼습니다. Constructor, metod, field는 어떻게 사용하는지 알겠는데... parameter이랑 annotation은 사용한적이 없기 때문에 이걸 어떻게 사용하는지 의문이 드네요.ㅜㅜ;;; 파라미터야 대충 @Override public String print(@Autowired PetType petType, Locale locale) { return petType.getName(); } 이렇게 하면 될것 같은데, 어노테이션은 어떻게 사용을 해야할지.. 감이 잡히지 않네요. 인터넷에 찾아보니까 어노테이션에 추가하는 거라고는 하는데, 커스텀 어노테이션을 만들고, 그곳에다 주입을 해주는 건지... 아무튼... 이 두개는 아마 사용은 잘 하지 않을 것 같긴한데요. 스프링에 추가되어있어서 질문드립니다. 다시 질문을 작성하자면, @Autowired에서 target으로 parameter이랑, annotation은 언제 사용되는건가요?
-
미해결[개정판] 딥러닝 컴퓨터 비전 완벽 가이드
윈도우 10 환경에서 강의를 따라가도 문제가 없을까요?
안녕하세요 강사님 구글 클라우드 플랫폼을 쓰지않고, 윈도우 10에서 아나콘다와 쿠다를 설치해서 강의를 진행해도 문제가 없는지 궁금합니다. 구글에 메일을 많이 보냈는데도 할당량을 풀어주지 않아, 크게 문제가 없다면 그렇게라도 해보고 싶어서 질문드립니다.
-
미해결비전공자를 위한 개발자 취업 개론
자바는 어떤가요?
안녕하세요 튜터님. 저는 30살 직장인이며, 개발자로 전직하려고 하고 있습니다. 제가 개발자가 되려는 이유는 스타트업을 창업하거나 참여하고 싶어서입니다. Okky에서 보니 자바를 배우라는 말이 많고, 인프런에서도 배달의민족 로드맵을 보니 자바를 베이스로 하고 있더라구요. 그런데 튜터님께서는 자바스크립트와 파이썬을 추천해주셔서, 고민이 됩니다. SI를 가고 싶은 마음은 없으며, 디자인보다는 로직 짜는데 흥미가 있어 서버 개발자가 되려고 합니다.
-
해결됨Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
29강 Firebase와 Google 로그인 기능 구현 수업 진행 중 login_page.dart 파일 내부 소스 코드에서 에러 발생되는 부분에 대하여 문의 드립니다.
FirebaseUser user = await _auth.signInWithCredential( GoogleAuthProvider.getCredential(idToken: googleAuth.idToken, accessToken: googleAuth.accessToken)); login_page.dart 파일 내부 위 코드에서 아래와 같은 에러 (A value of type 'AuthResult' can't be assigned to a variable of type 'FirebaseUser'. ) 가 발생하고 있습니다. 어떻게 해야 하는지 문의 드립니다.
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
잘못된 클로저 사용 예시에서 궁금한 점이 있습니다.
리스트인 series처럼 cnt, total도 자유 변수로 선언한 것인데 cnt, total만 할당 전에 참조되었단 오류가 뜹니다. 그럼 series를 사용한 예시에서 series.append(v) 는 '참조'가 아닌 건가요? 내용이 정리되지 않아 한 번 여쭤봅니다.
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 쇼핑몰 사이트 만들기[전체 리뉴얼]
질문입니다.
로그인을 하려는 데 계속 이 화면만 뜨네요. 아이디와 비밀번호가 일치하는 것은 확인헀습니다. 코드야 copy and paste니 문제가 없다고 생각합니다만 ㅠ 무엇이 문제 일까요?? props으로 price까지 잘 받는데 결제만 딱 안되네요. 감사합니다. 참고로, 강의 완성된 소스코드를 클론해서 했는데도 동일한 화면이 떴습니다
-
미해결우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)
GIL과 멀티스레드
멀티스레드가 같은 자원을 공유하게 되면 GIL 때문에 락이 걸린다고 하셨는데, 그럼 다수의 스레드가 같은 global변수를 변경하는 함수를 실행하면 에러가 발생하나요? 이를 회피하기 위해서 멀티 프로세싱을 하는거구요?
-
미해결홍정모의 따라하며 배우는 C언어
*str5 질문있습니 다
str1~4와 다르게 지정된 메모리 값이 안들어오고 주소를 적는 메모지 사이즈 만큼 들어온다고 햐셨는데 그 주소 사이즈가 4바이트로 잡혔는고 포인터 주소 자체의 사이즈가 4바이트라고 하셨는데 그럼 모든 포인터 변수 자체의 사이즈가 4바이트인건가요??