묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Axure RP 9,10 - 서비스 기획자를 위한 최적의 프로토타이핑 툴
RP10에서 Style Effect 복붙이 안됩니다.
안녕하세요, 정말 좋은 강의 감사합니다. RP10으로 결제해서 사용중입니다. 위처럼 Style effect를 GNB menu1에서 적용한걸 우클릭하거나 ctrl + c를 하면 복사는 되는데위처럼 GNB menu2에서 붙여넣기 하고 싶어서 ctrl + v 나 마우스 우클릭을 하면 반응이 없고 우클릭시 윈도우도 안뜨는데 이건 RP9나 RP10에 원래 기능이 없는 것인지요?원래 같은 같은 메뉴만 되는것인지...
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 기본 강의
proxy 질문 드립니다.
안녕하세요 먼저 유익한 강의 감사드립니다.다름이 아니라 proxy를 통해 cros해결하는 강의를 진행하고 있는데 코드를 보면 반복문이 실행되는 부분도 없는데 계속 콘솔이 2개씩 찍히더라구요!! 혹시 무슨 문제가 있는 걸까요?? 코드 첨부 합니다!setupProxy.jsLandingPage.jsindex.jsconsole
-
미해결스프링 핵심 원리 - 기본편
@Configuration에 대한 질문입니다.
복습을 하다가 @Configuration에 대해서 복습을 하다 이상한 점이 발견되어 질문 드립니다.@Configuration을 클래스 위에 붙이면 해당 클래스를 스프링 컨테이너에서 싱글톤으로 관리한다고 들었습니다. 그런데 StatefulServiceTest 코드의 TestConfig에서 @Configuration을 제거한 상태로 테스트를 돌려보니 같은 객체가 리턴되는 것을 보고 AppConfig에서도 @Configuration을 제거하고 ConfigurationSingletonTest 테스트를 실행해보았더니 다른 객체가 리턴되어서 어떤 이유인지 궁금해 질문 올립니다. 아래는 해당 코드들 입니다. StatefualServiceTestpackage hello.core.singleton; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; class StatefulServiceTest { @Test void StatefulServiceSingleton() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); StatefulService statefulService1 = ac.getBean(StatefulService.class); StatefulService statefulService2 = ac.getBean(StatefulService.class); // A 사용자 10000원 주문 statefulService1.order("userA", 10000); // B 사용자 20000원 주문 statefulService2.order("userB", 20000); System.out.println("statefulService1 = " + statefulService1); System.out.println("statefulService2 = " + statefulService2); MemberServiceImpl bean1 = ac.getBean(MemberServiceImpl.class); MemberServiceImpl bean2 = ac.getBean(MemberServiceImpl.class); System.out.println("bean1 = " + bean1.getMemberRepository()); System.out.println("bean2 = " + bean2.getMemberRepository()); // A사용자 주문 금액 조회 int price = statefulService1.getPrice(); System.out.println("price = " + price); assertThat(statefulService1.getPrice()).isEqualTo(20000); } static class TestConfig { @Bean public StatefulService statefulService() { return new StatefulService(); } @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean MemberRepository memberRepository() { return new MemoryMemberRepository(); } } }테스트 실행 시 로그 ConfigurationSingletonTestpackage hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberRepository; import hello.core.member.MemberServiceImpl; import hello.core.order.OrderServiceImpl; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class ConfigurationSingletonTest { @Test void configurationTest() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); MemberRepository memberRepository1 = memberService.getMemberRepository(); MemberRepository memberRepository2 = orderService.getMemberRepository(); System.out.println("memberService -> memberRepository1 = " + memberRepository1); System.out.println("orderService -> memberRepository2 = " + memberRepository2); System.out.println("memberRepository = " + memberRepository); Assertions.assertThat(memberService.getMemberRepository()).isSameAs(memberRepository); Assertions.assertThat(orderService.getMemberRepository()).isSameAs(memberRepository); } @Test void configurationdeep() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); AppConfig bean = ac.getBean(AppConfig.class); System.out.println("bean = " + bean.getClass()); } }테스트 실행 시 로그 AppConfigpackage hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; //@Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemoryMemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); } }
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Send에서 Queue를 써주는 이유가 뭔가요??
큐를 쓰는게 send하려는 데이터들이 몰렸을 때의 병목 현상?을 해결해 줄수 있어서 그런 거 맞나요? 제가 잘 이해했는지 모르겠네요List같은 것도 있는데 굳이 큐를 써주는 이유는 뭔가요...? 선입선출한다는 특징은 알고는 있지만...궁금하네요...
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
OrphanRemoval = true 관련 질문드립니다
강의에서 orphanRemoval = true 로 설정 했을때, findParent.getChildList().remove(0);를 하면 child 객체가 db에서 사라진다 라는 부분이 조금 햇갈립니다(14:27 부분)고아객체 설정시 부모 클래스를 지우면 child 객체가 같이 삭제가 된다는 말은 이해가 됩니다. 그런데 orphanRemoval 를 false로 해도 findParent.getChildList().remove(0); 이 부분은 쿼리가 나가고 지워지는게 아닌걸까요?다시 말해 orphanRemoval 과 상관없이 당연히 child 객체를 호출해서 .remove() 라고 하면 삭제가 되는게 아닌가요?이 부분이 헷갈립니다 ㅠㅠ try{ Child child1 = new Child(); Child child2 = new Child(); Parent parent = new Parent(); parent.addChild(child1); parent.addChild(child2); em.persist(parent); em.flush(); em.clear(); Parent findParent = em.find(Parent.class, parent.getId()); findParent.getChildList().remove(0); tx.commit(); } catch (Exception e) {
-
미해결
플러터 진도 스터디
혼자 강의 진도 빼기 어려우시죠??스터디로 진도 빼는 게 제일 빨라요~~ 기존에 스터디 참여하고 있다가 갑차기 스터디가 종료되는 바람에다시 스터디를 구합니다.기존 진행하던 스터디 계획안 참고해서 그대로 진행하려고 합니다제가 절반이상 강의를 들어본 결과 코딩 생초보분들은 어려우실 것 같고자바스크립트 까지는 공부하신분이 오시면 적정합니다. 4~5명까지 모집하겠습니다. 첫 스터디는 가급적 10.1일부터 시작했으면 좋겠습니다. 많이 연락주세요~~ ^^ 스터디 계획안https://www.notion.so/92b82582e4bb4ce993a93f6eb36ad8ec[개발 스터디 모집 내용]스터디 주제 : 플러터 앱 개발 기초스터디 자료 : 인프런 코드팩토리 강의(구매 필요)두달 안에 다트 및 플러터 앱 개발 정복 예상 스터디 일정(횟수) :2022.10.01~2022.11.20 매주 일요일 저녁 9시스터디 방법 : 게더타운(온라인 회의 플랫폼) 활용 온라인 스터디 진행스터디 방법 : 자세한 스터디 방법과 일정은 첨부한 노션(https://www.notion.so/daewon-seo/b7019a2ee7d74b1e989efbd783392219)을 참고해주세요예상 모집인원 : 3 ~ 4명스터디 관련 주의사항- 프로그래밍 경험이나 기술 레벨을 10으로 했을 때 2~3에 해당하는 초보 분들을 대상으로 진행되는 스터디입니다. 지원방법 : 카카오톡 오픈 채팅방으로 문의해주세요https://open.kakao.com/o/gmLmCLDe
-
미해결한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지
객체 재생성에 대한 질문입니다.
안녕하세요 data와 함수들을 같이 전달했을 때 '객체'의 재 생성이 일어나는데, useMemo로 래핑 했음에도 왜 dispatches의 재 생성을 막을 수 없는건가요?
-
미해결MERN STACK 커뮤니티 : 시작부터 배포까지 알려주는 React
504에러
userInfo 조회하니까 데이터는 들어오는데 왜 _id값을 못 읽을까요..?
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
윈도우 버전 사용하고 있는데 ssh 컨테이너 내에 도커가 동작하지 않아요
최신 이미지라 그런지 etc/sysconfig/docker 폴더도 존재하지 않습니다 ..
-
미해결반응형 웹사이트 포트폴리오(App Official Landing Website)
scroll behavior 오류
css scroll behavior 가 브라켓에서 오류가 납니다. 사진처럼 빨갛게 처리되고, 당연히 동작하지 않습니다.선생님이 VS Code에서 하셨길래 VS Code 가서 테스트해보니, 거기서는 잘되네요 ;; (html파일을 냅다 크롬에서 열어서 테스트해봐도 잘되긴합니다)브라켓 대신에 VS Code 쓰면 해결되는 문제이긴 하지만 왜 그런지 궁금해서 한 번 여쭤봅니다.
-
미해결마케터를 위한 구글 애널리틱스 실무
PDF 가이드북 요청드립니다!!
PDF 가이드북 요청드립니다!!designell@naver.com그리고 강의 듣고 ga4 다루는데도 문제가 없나요?
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
src참조 오류 관련 질문드리겠습니다.
ADD_POSTING_SEUCCESS후에 다음과 같이 정상적으로 post가 등록됬습니다.근데 아래와 같이 클라이언트에서 포스트의 이미지 주소를 참조하지 못하고 있다고 에러가 발생해서 질문드립니다.express static에서 문제가 발생한것같은데 혹시 해당 오류 원인에 대해서 알 수 있을까요?postcard.js const PostCard = ({ post }) => { const dispatch = useDispatch(); const id = useSelector((state) => state.user.me && state.user.me.id); const liked = post.Likers.find((v) => v.id === id); return ( <article> <CardWrapper bodyStyle={{height: '120px', overflow: 'hidden'}} hoverable cover={ <CardImageWrapper> <ImageWrapper alt="post image" src={`http://localhost3065/${post.Images[0].src}`} onClick={showPostModal} /> </CardImageWrapper> } : : export default PostCard;postingform.jsimport React, { useCallback } from 'react'; import { Button, Form, Input, Upload } from 'antd'; import { UploadOutlined } from '@ant-design/icons'; import { useDispatch, useSelector } from 'react-redux'; import Router from 'next/router'; import { PostingFormWrapper, FormWrapper, FormHeader, HeaderText, HeaderBtn, HeaderDiviver, ImageUploaderWrapper, ContentFormWrapper, TagsInputWrapper } from './styles'; import { ADD_POST_REQUEST, UPLOAD_IMAGES_REQUEST } from '../../reducers/post'; const PostingForm = () => { const { imagePaths, addPostLoading } = useSelector((state) => state.post); const dispatch = useDispatch(); const onSubmitForm = useCallback((value) => { console.log(value); dispatch({ type: ADD_POST_REQUEST, data: { imagePaths, content: value, } }) }, [imagePaths]); const normFile = useCallback((e) => { console.log(`normFile : ${e}`); if (Array.isArray(e)) { return e; } return e?.fileList; }, []); const onChangeImages = useCallback((e) => { console.log(`onchange : ${e}`); const imageFormData = new FormData(); e.fileList.forEach((f) => { imageFormData.append('image', f.originFileObj); }); dispatch({ type: UPLOAD_IMAGES_REQUEST, data: imageFormData, }); }, []); // const onRemoveImages = useCallback((e) => { // console.log(`onRemove : ${e.name}`); // }, []); const onBeforeUpload = useCallback((file, fileList) => { // Return False So That Antd Doesn't Upload The Picture Right Away return false }, []); return ( <section> <PostingFormWrapper name="posting" onFinish={onSubmitForm} scrollToFirstError encType='multipart/form-data' > <FormWrapper style={{marginBottom: '1em'}}> <FormHeader> <HeaderText>Post Writing</HeaderText> <div> <HeaderBtn type='primary' size='large' htmlType="submit" loading={addPostLoading} > 등록 </HeaderBtn> <Button size='large'>취소</Button> </div> </FormHeader> <HeaderDiviver /> </FormWrapper> <FormWrapper name="title" rules={[ { type: 'text', }, { required: true, message: '포스팅 제목을 입력하세요.', }, ]} hasFeedback > <Input placeholder='제목을 입력해 주세요.' allowClear="true" size='large' /> </FormWrapper> <FormWrapper name="desc" rules={[ { type: 'text', }, ]} > <Input placeholder='포스팅의 간략한 설명을 입력해 주세요.' allowClear="true" size='large' /> </FormWrapper> <ImageUploaderWrapper name="images" rules={[ { required: true, message: '조리사진을 첨부하세요.', }, ]} valuePropName="fileList" getValueFromEvent={normFile} > {/* action: 파일을 업로드할 실제 URL -> localhost3065/images */} <Upload.Dragger name="image" multiple // action="http://localhost:3065" listType="picture" onChange={onChangeImages} // onRemove={onRemoveImages} beforeUpload={onBeforeUpload} > <p style={{marginBottom: '0.5em'}}>Drag files here OR</p> <Button type='primary' size='large' icon={<UploadOutlined />}>Upload</Button> </Upload.Dragger> </ImageUploaderWrapper> <ContentFormWrapper name="ingredient" rules={[ { type: 'text', }, { required: true, message: '재료를 입력하세요.', }, ]} hasFeedback > <Input.TextArea placeholder='재료를 입력하세요.' size='large' showCount maxLength={100} rows={5} /> </ContentFormWrapper> <ContentFormWrapper name="recipes" rules={[ { type: 'text', }, { required: true, message: '요리방법을 입력하세요.', }, ]} hasFeedback > <Input.TextArea placeholder='요리방법을 입력하세요.' size='large' showCount maxLength={1000} rows={20} /> </ContentFormWrapper> <ContentFormWrapper name="tips" rules={[ { type: 'text', }, ]} > <Input.TextArea placeholder='Tip을 입력하세요.' size='large' showCount maxLength={200} rows={8} /> </ContentFormWrapper> <Form.Item name="tags" rules={[ { type: 'text', }, ]} > <TagsInputWrapper placeholder='태그를 입력해 주세요.' size='large' /> </Form.Item> </PostingFormWrapper> </section> ) }; export default PostingForm;reducerconst reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case UPLOAD_IMAGES_REQUEST: draft.uploadImagesLoading = true; draft.uploadImagesDone = false; draft.uploadImagesError = null; break; case UPLOAD_IMAGES_SUCCESS: draft.imagePaths = action.data; draft.uploadImagesLoading = false; draft.uploadImagesDone = true; break; case UPLOAD_IMAGES_FAILURE: draft.uploadImagesLoading = false; draft.uploadImagesError = action.error; break; case ADD_POST_REQUEST: draft.addPostLoading = true; draft.addPostDone = false; draft.addPostError = null; break; case ADD_POST_SUCCESS: draft.addPostLoading = false; draft.addPostDone = true; draft.mainPosts.unshift(action.data); draft.imagePaths = []; break; case ADD_POST_FAILURE: draft.addPostLoading = false; draft.addPostError = action.error; break; } }); }; export default reducer;sagafunction uploadImagesAPI(data) { console.log('사가의 데이터', data); return axios.post('/post/images', data); } function* uploadImages(action) { try { const result = yield call(uploadImagesAPI, action.data); yield put({ type: UPLOAD_IMAGES_SUCCESS, data: result.data, }) } catch(err) { yield put({ type: UPLOAD_IMAGES_FAILURE, data: err.response.data }) } } function addPostAPI(data) { return axios.post('/post', data); } function* addPost(action) { try { const result = yield call(addPostAPI, action.data); console.log(result.data); yield put({ type: ADD_POST_SUCCESS, data: result.data, }) yield put({ type: BOARD_ADD_POST_TO_ME, data: result.data, }) } catch(err) { yield put({ type: ADD_POST_FAILURE, data: err.response.data }) } } back/app.jsconst express = require('express'); const cors = require('cors'); const passport = require('passport'); const session = require('express-session'); const cookieParser = require('cookie-parser'); const dotenv = require('dotenv'); const morgan = require('morgan'); const path = require('path'); const postsRouter = require('./routes/posts'); const postRouter = require('./routes/post'); const userRouter = require('./routes/user'); const db = require('./models') const app = express(); const passportConfig = require('./passport'); dotenv.config(); db.sequelize.sync() .then(() => { console.log('db 연결 성공'); }) .catch(console.error); passportConfig(); app.use(morgan('dev')); app.use(cors({ origin: 'http://localhost:3060', credentials: true, })); app.use('/', express.static(path.join(__dirname, 'uploads'))); app.use(express.json({ limit: '100mb' })); app.use(express.urlencoded({ limit: '100mb', extended: true })); app.use(cookieParser(process.env.COOKIE_SECRET)); app.use(session({ saveUninitialized: false, resave: false, secret: process.env.COOKIE_SECRET, })); app.use(passport.initialize()); app.use(passport.session()); app.use('/posts', postsRouter); app.use('/post', postRouter); app.use('/user', userRouter); app.listen(3065, () => { console.log('서버 실행 중'); });back/post.jsconst express = require('express'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const { Post, Comment, Image, User } = require('../models'); const { isLoggedIn } = require('./middlewares'); const router = express.Router(); try { fs.accessSync('uploads'); } catch (error) { console.log('uploads폴더가 존재하지 않아 생성합니다.'); fs.mkdirSync('uploads'); } const upload = multer({ storage: multer.diskStorage({ destination(req, file, done) { done(null, 'uploads'); }, filename(req, file, done) { const ext = path.extname(file.originalname); const basename = path.basename(file.originalname, ext); done(null, basename + '_' + new Date().getTime() + ext); }, }), limits: { fileSize: 20 * 1024 * 1024 }, }); // data: { // imagePaths, // content: value, // } router.post('/', isLoggedIn, async (req, res, next) => { // addPostAPI / POST /post try { const post = await Post.create({ UserId: req.user.id, title: req.body.content.title, desc: req.body.content.desc, ingredient: req.body.content.ingredient, recipes: req.body.content.recipes, tips: req.body.content.tips, tags: req.body.content.tags, }); if (req.body.imagePaths) { if (Array.isArray(req.body.imagePaths)) { const images = await Promise.all(req.body.imagePaths.map((image) => Image.create({ src: image }))); await post.addImages(images); } else { const image = await Image.create({ src: req.body.imagePaths }); await post.addImages(image); } }; const fullPost = await Post.findOne({ where: { id: post.id }, include: [{ model: Image, }, { model: Comment, include: [{ model: User, attributes: ['id', 'nickname'], }], }, { model: User, attributes: ['id', 'nickname'], }, { model: User, as: 'Likers', attributes: ['id'], }] }); console.log(fullPost); res.status(201).json(fullPost); } catch (error) { console.error(error); next(error); } }); router.post('/images', isLoggedIn, upload.array('image'), async (req, res, next) => { try { console.log('라우터', req.files); res.json(req.files.map((v) => v.filename)); } catch (error) { console.error(error); next(error); } }); module.exports = router;
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
완강했습니다.
안녕하세요 루키스 강사님 다름이 아니고 언리얼 데디케이트 서버로 게임을 만들려고 하는데 관련 강의 자료가 언리얼 공식 홈페이지 말고는 찾아볼게 없는 건가요?
-
미해결Jenkins를 이용한 CI/CD Pipeline 구축
강의자료! 쉐어! 요청!
학습에 사용되는 강의자료 공유가 필요한듯 합니다. 강의 자료 공유 부탁드립니다. 좋은 강의 감사 드립니다.
-
해결됨웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩
실습페이지가 버프스위트에 잡히지가 않습니다
인터셉트 켜도 실습페이지가 잡히질 않는데 어떻게 해야할가요 ㅜㅜ
-
해결됨[초급편] 안드로이드 커뮤니티 앱 만들기(Android Kotlin)
맥북 M1 쓰는데 안드로이드 스튜디오를 까니까 'No Android SDK found'라고 뜹니다. 어떻게 해야 하나요?
맥북 M1 쓰는데 안드로이드 스튜디오를 까니까 'No Android SDK found'라고 뜹니다. 어떻게 해야 하나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
알고리즘 교안 매우사소한 오타(아닐수도있습니당...)
p4"\n"p23"기준"인것같습니다!!!p33"0 ~ 25" 인것같습니다 수강후기쓰기위해 후딱 공부하겠습니다!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백준 1213번 질문
백준 1213번 푸는 중 질문이 생겨 글 올립니다.http://boj.kr/f0b468739ad24762a244c8fcecffa24c결과값은 맞는데, 틀렸다고 나옵니다.어떤 점이 문제가 될 수 있나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
th: item 질문이있어요
html에서 th:value에서 item을 가져올때 이전에 add item에서도 model.addAttribute("item",item)으로 저장하고 editForm에서도 model.addAttribute("item",item)으로 저장하는데 html에서 타임리프가 item을 가져올때 어떻게 1번아이템인지 2번아이템인지 구분하고 값을 가져오는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
백준 9996번 질문
안녕하세요 백준 9996번 문제 풀다가 질문 올립니다.http://boj.kr/c32649e80d26490ba805cdec30b90d3d결과값은 잘 나오는데 , 런타임 에러라고 뜹니다.어떤 부분이 잘못되었나요? (앞으로는 양식에 맞게 질문하겠습니다.)