묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결PHP 7+ 프로그래밍
FILTER_VALIDATE FILTER_SANITIZE 차이를 모르겠습니다.
각각 뭔지에 대한 설명이 부족한 것 같습니다 ㅜㅜ
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Transactional generate key 질문
안녕하세요! '스프링 통합 테스트' 강의 중 궁금한 사항이 생겨서 올립니다. @Transactional 어노테이션을 붙이면 각 테스트 항목 실행 후 롤백한다고 하셨는데, insert문 실행됐을 때 자동 업데이트되는 키 값은 계속 증가합니다. 왜 이 값은 롤백이 되지 않는지 문의드립니다. 감사합니다!
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
Exception 질문입니다
SQLException 와 ConnectException 부모로 SCException 같은 것을 하나 만들어서 throws SCException 하는 것은 안좋은 방법인가요 ??? 그러면 체크 예외를 체크할 수 있으면서 다른 기술에도 의존하지 않게 되지 않나요 ??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 업데이트시 수정부분을 알려주시면 감사합니다.!
제가 아날로그 인간이라 ㅠㅠ 기존에 프린트까지해서 적는 사항이라. 단순히 어떤 " 부분" 수정되었다기 보단 몇페이지의 어디가 어떻게 수정되었다고 comment 달아주실수 없으실까요? 메번 찾아서 수정하기가 힘드네요 ㅠㅠ 감사합니다!
-
미해결Slack 클론 코딩[실시간 채팅 with React]
route path 수정 후 흰 화면만 보입니다ㅠㅠ
url 로 정보가 보일 수 있게 수정하던 중에 흰색 화면만 보이고, 아무런 콘솔도 뜨지 않습니다ㅠㅠ <Route path="/workspace/:workspace" element={<Workspace />} /> 일때는 빈 화면인데, 아래와 같이 다시 수정하면 슬랙화면이 보입니다 <Route path="/workspace" element={<Workspace />} /> react routerv6 path parameter blank page 검색어와 같이 이슈를 찾아보았는데 해결이 되지 않아 이렇게 질문 남깁니다ㅠㅠ
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
이전 질문에 연장되는 질문입니다.
안녕하세요 조현영님. 주말에도 답변 계속 달아주셔서 감사드립니다. 정말 도움이 많이됩니다! 저번 질문에서 제가 리뷰와 이미지 사이의 관계를 여쭤봤을 때 조현영님께서 리뷰와 이미지 사이의 관계는 일대다라고 하셨었죠. 이렇게 되면 리뷰쪽 컬럼에는 oneToMany, 이미지 쪽에는 ManyToOne이 붙게 되어 더불어 JoinColumn까지 이미지 쪽에 붙게 됩니다. 그러면 이미지 쪽에 리뷰에 관한 외래키 컬럼이 생성됩니다. 그런데 저는 여기서 위와 똑같은 방식으로 리뷰 대신 문의의 관련된 엔티티와 리뷰와 이미지를 관계 설정한것 처럼 똑같이 하려 합니다. 그러면 결국에 이미지 쪽에는 리뷰에 관한 외래키 컬럼과 문의에 관한 외래키 컬럼이 생기게 되는 것이죠. 여기서가 핵심인데 이렇게 되면 이미지 엔티티에는 리뷰, 문의가 공존하게 되는데 만약 리뷰가 있을시 문의의 외래키 컬럼에는 null값으로 존재하게 되고 문의가 있을시 리뷰의 외래키 컬럼에는 null값으로 존재합니다. 그리고 이미지에 추가적으로 상품 이미지 역시 존재합니다. 이러면 이미지 엔티티에 세 개(상품, 리뷰, 문의)의 외래키 컬럼이 존재하게 되는데 만약에 한 개의 컬럼에 값이 존재할 때 나머지 두개는 null값인 형태입니다. 그래서 제 결론은 이미지 엔티티 하나에 세 개의 외래키를 전부 넣는것이 아닌 예를 들어 상품 이미지 엔티티, 리뷰 이미지 엔티티, 문의 이미지 엔티티 이런식으로 엔티티를 각각 만들어야 할거 같은데 실무에서는 어떻게 해결하는지 조현영님의 의견이 궁금합니다.
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
강의 내용 외 크롤링 질문입니다.
1.엑셀 파일에 저장되어있는 url을 list 형식으로 가져온다. 2. 가져온 url들을 '상품' 열에 str형식으로 저장한다. 3. 가져온 url 에 접속하여 크롤링하여 해당 url 행에 각각의 컬럼에 해당하는 값을 저장한다. 위의 3개의 과정을 코드로 작성해보았는데 작동이 되질 않아 뭐가 문제인지 잘 모르겠습니다 ㅠㅠ import requests from bs4 import BeautifulSoup import time import openpyxl import pandas as pd import numpy as np import os #url 추출 excel_source = pd.read_excel('example_2.xlsx') df=pd.DataFrame(excel_source) url = df['상품'] item_url = list(url) for i in item_url: response = requests.get(i) html = response.text soup = BeautifulSoup(html, 'html.parser') wb = openpyxl.Workbook() ws = wb.create_sheet("네이버쇼핑크롤링") ws.append(["상품", "썸네일", "상품명","카테고리","소비자가","판매가","배송비","리뷰수","사용자총평점","상품정보","상품번호","제조사","모델명","원산지","상품상태","브랜드","제조일자","판매자정보","상호명","사업자등록번호","사업장소재지","대표자","통신판매업번호"]) infos = soup.select("div._2-I30XS1lA ") for s in range(0,len(item_url)+1): ws.append([item_url[s]]) for z,info in enumerate(infos,1): #상품 #썸네일 #상품명 item_name = info.select_one("div.CxNYUPvHfB").text ws.append([z,df,item_name]) wb.save("naver_store.xlsx")
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
RUN이 되지 않습니다
Ctrl+F5를 눌러서 실행할려고 했더니 일반텍스트 디버깅에 대한 확장이 설치되어 있지 않다고 하는데 어떤 확장을 설치해야 할까요? 아톰은 script를 찾을수가 없어서 못깔아서 VScode 로 실습중인데 처음부터 막히니 막막하네요 ㅜㅜ
-
미해결따라하며 배우는 도커와 CI환경 [2023.11 업데이트]
docker-compose 와 Dockerfile
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 제목 그대로 Dockerfile 이 꼭있어야 docker-compose 도 할 수 있는 건가요? 아니면 docker-compose 단독으로 사용이 가능한가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
컨트롤러 안의 메소드는 어떻게 맵핑이 이루어지는 건가요?
Controller는 객체니까 Map 컬렉션에 저장되어 맵핑 작업에 사용될 수 있는 건 이해가 갑니다. 하지만 Controller안의 method는 어떻게 맵핑이 이루어지는 건가요? 예를 들어 @Controller @RequestMapping("/hello") public class SampleController { @RequestMapping("/world") public void sampleMethod() { } } 일 때 /hello/world로 요청이 들어오면 맵핑을 통해 SampleController를 찾아낼 것입니다.그 다음 sampleMethod()를 찾아내서 호출해야 하는데 이 작업은 어떤 식으로 이루어지는 거죠?강의에는 Controller를 찾는 것까지만 나와있어서 method는 어떻게 찾아지는지 궁금합니다.
-
미해결Java TPC 실전프로젝트 (Java API 활용)
InputStream is = Project01_C.class.getResourceAsStream(src) 경로에 대해서
1. 지금 이 방법은 Project01_C 클래스와 info.json 파일의 경로가 같을 때만 사용할 수 있는 방법인가요 ? 2. 제가 알기로 외부 파일 읽을때는 try - catch 나 throws 로 처리해야 되는 걸로 알고 있는데 이건 예외처리 방식이 좀 다른이유는 뭘까요 ?? 3, 그리고 InputStream close는 안해줘도 되나용 ??
-
미해결자바스크립트 : 기초부터 실전까지 올인원
질문 있습니다
replit 에서 강의따라 코드작성해보고 run 하는데 오른쪽에 결과가 안떠요...! 뭐가 문제일까요.. 처음부터 막히네요;
-
미해결반응형 웹사이트 포트폴리오(Architecture Agency)
hiring button의 comment-dots image issue
hiring button에서 comment-dots image 가 화면에 안 나타납니다. 기본적인 부분인데 이유를 모르겠어서 요청 드립니다. index.html 과 style.css 풀 코드 올립니다. index.html: <!doctype html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <title>bizpage website - Architecture</title> <script src="js/jquery-2.1.4.js"></script> <!-- Page scroll Effects JS & CSS --> <script src="js/velocity/modernizr.js"></script> <script src="js/velocity/velocity.min.js"></script> <script src="js/velocity/velocity.ui.min.js"></script> <script src="js/velocity/main.js"></script> <link rel="stylesheet" href="js/velocity/velocity.css"> <!-- Smooth Scrolling --> <script src="js/jquery.scrollTo.min.js"></script> <!-- Custom JS & CSS --> <script src="custom.js"></script> <link rel="stylesheet" href="style.css"> <link rel="stylesheet" href="responsive.css"> </head> <!-- hijacking: on/off - animation: none/scaleDown/rotate/gallery/catch/opacity/fixed/parallax --> <body data-hijacking="on" data-animation="rotate"> <div class="container"> <section class="cd-section visible" id="home"> <div> <div class="content"> <img src="images/temp-section-01.jpg"> </div> </div> </section> <section class="cd-section" id="about"> <div> <div class="content"> <img src="images/temp-section-02.jpg"> </div> </div> </section> <section class="cd-section" id="project"> <<div> <div class="content"> <img src="images/temp-section-03.jpg"> </div> </div> </section> <section class="cd-section" id="plan"> <div> <div class="content"> <img src="images/temp-section-04.jpg"> </div> </div> </section> <section class="cd-section" id="awards"> <div> <div class="content"> <img src="images/temp-section-05.jpg"> </div> </div> </section> <section class="cd-section" id="location"> <div> <div class="content"> <img src="images/temp-section-06.jpg"> </div> </div> </section> <section class="cd-section" id="contact"> <div> <div class="content"> <img src="images/temp-section-07.jpg"> </div> </div> </section> <header class="active"> <div class="gnb-inner"> <div class="logo active">bizpage</div> <div class="gnb active"> <div class="menu"> <a href="#home">Home</a> <a href="#about">About</a> <a href="#project">Project</a> <a href="#plan">Plan & History</a> <a href="#awards">Awards</a> <a href="#location">Location</a> <a href="#contact">Contact</a> </div> <div class="slogan">We think different and make different.</div> </div> <div class="trigger active"> <span></span> <span></span> <span></span> </div> </div> </header> </div> <a href="#" class="gototop active"><img src="images/gototop.png"></a> <a href="" class="btn-hiring"><i class="fa-duotone fa-comment-dots"></i>Hiring</a> <nav> <ul class="cd-vertical-nav"> <li><a href="#0" class="cd-prev inactive">Next</a></li> <li><a href="#0" class="cd-next">Prev</a></li> </ul> </nav> </body> </html> style.css: /* Google Web Font : Montserrat */ @import url('https://fonts.googleapis.com/css2?family=Nanum+Gothic&family=Nunito&family=Open+Sans&display=swap'); @import url('https://fonts.googleapis.com/css?family=Montserrat:200,300,400,500&display=swap'); @import url('https://fonts.googleapis.com/css?family=Manrope:300,400,500,600&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@200;300;400;600;700;900&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Overpass&display=swap'); /* FontAwesome CDN 4.7 */ @import url('https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css'); /* Reset CSS */ * { box-sizing: border-box;} ul {list-style: none;} a {text-decoration: none;} /* Default CSS */ body { font-family: 'Mondtserrat', 'sans-serif'; color: #222; font-size: 15px; margin: 0; height: 100vh; background-color: #fff; } /* Entire Layout */ .cd-section { height: 100vh; } .cd-section > div { height: 100%; position: relative; } .content { background-color: #ddd; position: absolute; width: calc(100% - 40px); height: calc(100% - 80px); left: 20px; bottom: 20px; overflow: hidden; } /* Header */ header { position: fixed; top: 0; left: 0; width: 100%; z-index: 100; } .gnb-inner { /* border: 1px solid #000; */ width: calc(100% - 40px); margin: auto; height: 60px; line-height: 60px; } .logo { font-size: 2.4rem; font-weight: bold; color: #066bf7; float: left; } /* .logd img { padding-top: 17px; } */ .gnb { float: right; } .menu { display: none; } /* .menu a {} */ .slogan { font-style: italic; font-size: 16px; float: right; } .trigger { display: none; } /* Hiring Button */ .btn-hiring { position: fixed; right: 30px; bottom: 30px; color: #fff; background-color: #000; padding: 10px 20px; border-radius: 20px; box-shadow: 5px 5px 20px rgba(0, 0, 0, 0.38); transition: 0.5s; } .btn-hiring .fa-duotone { transform: rotateY(180deg); margin-right: 5px; } .btn-hiring:active { transform: scale(0); }
-
미해결[개정판] 파이썬 머신러닝 완벽 가이드
잠재요인 기반에서 normal함수 이용시
안녕하세요! 수업 잘 듣고 있습니다! P값 q값을 초기화해주는 부분에서, np.random.normal 함수를 이용할 때, scale = 1/K (K=잠재요인 개수)를 설정합니다. 여기서 scale을 이렇게 설정하는 이유가 궁금합니다. 정규화 또는 표준화하는 것으로 생각되는데, K는 단위와 상관이 없어 scale문제가 발생하지 않을 것 같은데, 이를 설정하는 이유를 알 수 있을까요
-
미해결Java TPC 실전프로젝트 (Java API 활용)
JSONObjct를 쓰는 이유 ??
Gson 을 쓸 때는 BookDTO 에 맞춰서 문자열을 객체화 시킬 수 있구나 생각해서 이해가 됬는데 JSONOBject는 사용자가 정의한 객체가 아닌 그냥 JSON타입의OBject 객체 인거 같은데 JSONOBject를 쓰면 좋은 점이 있나요 ?
-
미해결다양한 사례로 익히는 SQL 데이터 분석
ModuleNotFoundError: No module named 'psycopg2' 오류
안녕하세요. 권철민 선생님! 시각화 개요 - 시각화 - PostgresSQL 과 Pandas 연계하기 강의 중 그림과 같이 오류가 나오고 있습니다. 비밀번호는 강의와 똑같이 'postgres' localhost도 그림처럼 5433으로 되어 있습니다. 이전 강의에서 쿼리는 문제가 없었는데 어떤 이유로 오류가 났을지 궁금합니다!
-
해결됨[리뉴얼] React로 NodeBird SNS 만들기
ADD_COMMENT_SUCCESS acrtion이 실행되지 않는 질문드립니다.
ADD_COMMENT_REQUEST action은 아래와 같이 정상적으로 data도 전달하고 동작하는데 ADD_COMMENT_SUCCESS action이 실행되면 아래와 같은 오류가 발생해서 action이 실행되지 않는건 물론이고 다른 action도 동작하지 않는 문제가 발생해서 질문드립니다. // action 발생 컴포넌트 import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import { Button, Form, Input, Row } from 'antd'; import { useSelector, useDispatch } from 'react-redux'; import { addCommentRequestAction } from '../../reducers/post'; const CommentForm = ({ mainPosts }) => { const dispatch = useDispatch(); const { addCommentLoading } = useSelector((state) => state.post); const id = useSelector((state) => state.user.me?.id); const [form] = Form.useForm(); const onSubmitComment = useCallback((value) => { console.log(value.comment, mainPosts.id, id); dispatch(addCommentRequestAction({commentText: value.comment, postId: mainPosts.id, userId: id})); form.resetFields(); }, []); return ( <> <Form form={form} name="writeComment" onFinish={onSubmitComment} > <Form.Item name="comment" rules={[ { type: 'text', }, ]} > <Input.TextArea placeholder='댓글을 입력하세요.' showCount maxLength={100} rows={2} /> </Form.Item> <Row align='end'> <Button type='primary' htmlType='submit' loading={addCommentLoading} > 등록 </Button> </Row> </Form> </> ) }; CommentForm.propTypes = { mainPosts: PropTypes.shape({ id: PropTypes.string, User: PropTypes.object, title: PropTypes.string, desc: PropTypes.string, content: PropTypes.arrayOf(PropTypes.object), Images: PropTypes.arrayOf(PropTypes.object), tag: PropTypes.string, Comments: PropTypes.arrayOf(PropTypes.object), }) }; export default CommentForm; // reducers/post.js import produce from 'immer'; import shortId from 'shortid'; export const initialState = { mainPosts: [{ id: 1, User: { id: 1, nickname: 'ZeroCho' }, title: '돼지고기 갈비찜', desc: '한국인이 좋아하는 대표 고기 요리 갈비찜 레시피!!', content: [{ ingredient: '주 재료 = 갈비 600g, 당근 20g, 은행 10알, 밤 10개, 파 1대, 양파 50g, 양념장 재료 = 간장 3큰술, 설탕 2큰술, 육수 12큰술, 다진 생강 1작은술, 깨소금 2큰술, 청주 ¼컵, 다진 마늘 3큰술, 참기름 1큰술, 후춧가루 약간', }, { recipes: '갈비는 사방 5㎝ 크기로 썰어 기름기를 제거한다., 기름기를 없앤 갈빗살에 칼집을 낸 다음 찬물에 30분~한 시간쯤 담가 핏물을 빼주고, 혹시 모를 절단 과정에서 섞인 뼛가루나 뼛조각을 제거해준다. 이 핏물 빼는 과정을 속성으로 하고 싶으면, 한 번 끓여 데치는 거로 대체해도 되긴 된다, 끓는 물에 핏물을 뺀 갈비와 토막 낸 양파·파를 넣어 속까지 익을 때까지 삶아낸다. 중간에 젓가락으로 고기를 찔러보아 핏물이 나오는지 확인한다. 핏물이 나오면 고기가 덜 익은 것., 고기가 익으면 체에 받친다. 이 국물은 걸러서 지저분한 것을 제거하고 양념장의 육수로 이용한다. 갈비는 사방 5㎝ 크기로 썰어 기름기를 제거한다., 기름기를 없앤 갈빗살에 칼집을 낸 다음 찬물에 30분~한 시간쯤 담가 핏물을 빼주고, 혹시 모를 절단 과정에서 섞인 뼛가루나 뼛조각을 제거해준다. 이 핏물 빼는 과정을 속성으로 하고 싶으면, 한 번 끓여 데치는 거로 대체해도 되긴 된다, 끓는 물에 핏물을 뺀 갈비와 토막 낸 양파·파를 넣어 속까지 익을 때까지 삶아낸다. 중간에 젓가락으로 고기를 찔러보아 핏물이 나오는지 확인한다. 핏물이 나오면 고기가 덜 익은 것., 고기가 익으면 체에 받친다. 이 국물은 걸러서 지저분한 것을 제거하고 양념장의 육수로 이용한다.' }, { tips: '갈비를 한 번 끓여서 핏물이나 기름기를 어느 정도 빼준 후, 재료들을 압력밥솥에 싹 때려넣고 그대로 푹 익혀버리면 질긴 고기가 녹아드는 수준이 되어 부드럽게 먹을 수 있다.' }], Images: [{ src: 'https://recipe1.ezmember.co.kr/cache/recipe/2015/06/03/f6551b241deba537266c7dfe668e09821.jpg', }, { src: 'https://recipe1.ezmember.co.kr/cache/recipe/2017/09/15/af5ed61b01ce6d0c8ded20d59f0d15e31.jpg', }, { src: 'https://www.cj.co.kr/images/theKitchen/PHON/0000002320/0000009726/0000002320.jpg', }], tag: '맛있을것같아요 #hashtag1 짱짱맨!! #hashtag2 ##hashtag3', Comments: [{ User: { nickname: 'AppleLover', }, content: '우와 정말 맛있을것 같아요 ㅎㅎ', }, { User: { nickname: 'Nightmare', }, content: '오늘 저녁은 갈비찜이다!!', }] }], imagePaths: [], addPostLoading: false, addPostDone: false, addPostError: null, addCommentLoading: false, addCommentDone: false, addCommentError: null, }; const dummyPost = (data) => ({ id: shortId.generate(), User: { id: 2, nickname: 'Mirrer', }, title: data.title, desc: data.desc, content: [{ ingredient: data.ingredient, }, { recipes: data.recipes, }, { tips: data.tips, }], tag: data.tags, Images: [{ src: 'https://www.hongcheon.go.kr/site/tour/images/contents/cts1927_img1.jpg' }, { src: 'https://t1.daumcdn.net/cfile/tistory/1837BE1A4BF1BA073F' }], Comments: [{ User: { nickname: 'Korean', }, content: '역시 한국인은 밥심이죠 ㅎㅎ', }], }); const dummyComment = (data) => ({ User: { id: 2, nickname: 'Mirrer', }, content: data, }); export const ADD_POST_REQUEST = 'ADD_POST_REQUEST'; export const ADD_POST_SUCCESS = 'ADD_POST_SUCCESS'; export const ADD_POST_FAILURE = 'ADD_POST_FAILURE'; export const ADD_COMMENT_REQUEST = 'ADD_COMMENT_REQUEST'; export const ADD_COMMENT_SUCCESS = 'ADD_COMMENT_SUCCESS'; export const ADD_COMMENT_FAILURE = 'ADD_COMMENT_FAILURE'; export const addPostRequestAction = (data) => { console.log('reducer'); return { type: ADD_POST_REQUEST, data, } }; export const addCommentRequestAction = (data) => { console.log('reducer'); return { type: ADD_COMMENT_REQUEST, data, } }; const reducer = (state = initialState, action) => { return produce(state, (draft) => { switch (action.type) { case ADD_POST_REQUEST: draft.addPostLoading = true; draft.addPostDone = false; draft.addPostError = null; break; case ADD_POST_SUCCESS: draft.mainPosts.unshift(dummyPost(action.data)); draft.addPostLoading = false; draft.addPostDone = true; break; case ADD_POST_FAILURE: draft.addPostLoading = false; draft.addPostError = action.error; break; case ADD_COMMENT_REQUEST: draft.addCommentLoading = true; draft.addCommentDone = false; draft.addCommentError = null; break; case ADD_COMMENT_SUCCESS: { const post = mainPosts.find((v) => v.id === action.data.postId); post.Comments.unshift(dummyComment(action.data.commentText)); draft.addCommentLoading = false; draft.addCommentDone = true; break; } case ADD_COMMENT_FAILURE: draft.addCommentLoading = false; draft.addCommentError = action.error; break; default: return state; } }); }; export default reducer; // sagas/post.js import { all, fork, delay, put, takeLatest } from 'redux-saga/effects'; // import axios from 'axios'; import { ADD_POST_REQUEST, ADD_POST_SUCCESS, ADD_POST_FAILURE, ADD_COMMENT_REQUEST, ADD_COMMENT_SUCCESS, ADD_COMMENT_FAILURE } from '../reducers/post'; // function addPostAPI(data) { // return axios.post('/api/post', data); // } function* addPost(action) { try { // const result = yield call(addPostAPI, action.data); yield delay(1000); yield put({ type: ADD_POST_SUCCESS, data: action.data, }) } catch(err) { yield put({ type: ADD_POST_FAILURE, data: err.response.data }) } } // function addCommentAPI(data) { // return axios.post(`/api/post/${data.postId}/comment`, data); // } function* addComment(action) { console.log(action); try { // const result = yield call(addCommentAPI, action.data); yield delay(1000); yield put({ type: ADD_COMMENT_SUCCESS, data: action.data, }) } catch(err) { yield put({ type: ADD_COMMENT_FAILURE, data: err.response.data }) } } function* watchAddPost() { yield takeLatest(ADD_POST_REQUEST, addPost); } function* watchAddComment() { yield takeLatest(ADD_COMMENT_REQUEST, addComment); } export default function* postSaga() { yield all([ fork(watchAddPost), fork(watchAddComment), ]); }
-
미해결iOS/Android 앱 개발을 위한 실전 React Native - Basic
ios 구동했을 때 Welcome to React가 아니라 애플
ios 구동했을 때 Welcome to React 화면이 아니라 아이폰 기본화면만 나오네요. 그래서 선생님이 Step one 을 two three 로 바꿔도 저는 화면에 안나와요. cmd d 눌러도 안나오네요. 어떻게 해야햐나요?
-
미해결실전! 스프링 데이터 JPA
Enum 활용기에 대하여
안녕하세요. 현업에서 JPA로 개발하고 있는 주니어 개발자입니다. 사이드 프로젝트를 진행하면서 **DBMS**단에서 Enum을 사용할 지 VARCHAR를 사용할 지 별도의 Table을 사용할 지 고민을 하고 있습니다. 관련하여 향로님께서 써주신 Enum 활용기라는 글을 비롯한 우아한 형제들 기술 블로그에 있는 다른 Enum 내용을 모두 정독하였습니다. 하지만 Java 앱 단에서 Enum을 사용한다는 사실은 찾을 수 있었지만, DB에서 데이터를 저장하는 방식은 찾을 수 없었습니다. 이해한 바로는 해당 게시글에서는 Java(JPA)단에서는 Enum을 사용하고 DBMS에서는 VARCHAR, CHAR로 데이터를 저장하는 것 아닐까 싶은데 잘 이해한건가요? (만약 그렇다면 다른 프로젝트에서 해당 DB 테이블을 사용할 때 어떤 입력 값을 받아야 하는 지 알기 위해 어떻게 해야 할까요..??) > 강의 매우 잘보고 있습니다. 거의 다 2번 이상씩 본 것 같아요..!! 감사합니다. (혹여 무례하지 않다면 질문에 대해 직접 말씀 듣고 싶습니다.) (예시가 빠졌네요!) 가령 Account라는 테이블이 있다면 해당 Account의 상태로 ACTIVE, LOCKED, WITHDRAW, ...)을 저장해야 하는 경우 입니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
next()후 다음에 실행할 미들웨어가 없으면
app.get('/',(req,res,next)=>{ console.log("/ 라우터"); res.sendFile(path.join(__dirname,'/index.html')); next(); },(req,res,next)=>{ console.log("/ 라우터의 두번째 미들웨어"); // next(); }); app.get('/about',(req,res)=>{ console.log("about 라우터"); }); -> 정상 app.get('/',(req,res,next)=>{ console.log("/ 라우터"); res.sendFile(path.join(__dirname,'/index.html')); next(); },(req,res,next)=>{ console.log("/ 라우터의 두번째 미들웨어"); next(); }); app.get('/about',(req,res)=>{ console.log("about 라우터"); }); -> 404 Not Found app.get('/',(req,res,next)=>{ console.log("/ 라우터"); res.sendFile(path.join(__dirname,'/index.html')); next(); },(req,res,next)=>{ console.log("/ 라우터의 두번째 미들웨어"); next(); }); app.get('*',(req,res)=>{ console.log("* 라우터"); }); app.get('/about',(req,res)=>{ console.log("about 라우터"); }); -> 정상 세가지 코드를 비교해봤는데, localhost:3000/ 접속시 두번째 코드에서 404 Not Found가 뜨는 이유는 next()로 다음 미들웨어를 실행했는데, 실행할 미들웨어가 없어서 404가 뜨는건가요?