현재 puppeteer-crawling해서 스타벅스메뉴와 이미지는 잘 긁어 왔는데요. 자꾸 MongoDB에 저장되어 있는 img를 불러올 때 에러가 발생하는데, 성공하신 분 있나요? 스키마에서 이미지 형식을 Buffer 했습니다. import mongoose from "mongoose"; const StarbucksSchema = new mongoose.Schema({ name: String, img: Buffer, }); export const Starbucks = mongoose.model("Starbucks", StarbucksSchema); //이미지 URL로부터 이미지 다운로드 if (!fs.existsSync("img_crawling")) { fs.mkdirSync("img_crawling"); } let fileName = `img_crawling/${menuName}.jpg`; request(menuImage).pipe(fs.createWriteStream(fileName)); console.log(`이미지 ${fileName} 저장 완료`); 저는 fs모듈과 request모듈을 추가로 사용했는데, 이미지의 주소를 MongDB에 저장하고, 이미지는 별도의 폴더에 저장되게 만들었습니다. 질문 요약 1. MongDB에 이미지 저장할 때 fs라이브러리와 request라이브러리를 사용하게 맞나요? 2. 이미지를 저장은 잘 됐는데, 화면에 뿌려 줄려고 하는데 자꾸 에러가 나요. 3.몽고DB에 접속해서 이미지 주소를 가져와서, 그 주소를 기반으로 뿌려줘야 되는지 4.아니면 몽고DB에 접속해서 그 메타주소(?)를 기반으로 현재 컴퓨터에 저장된 이미지를 화면에 뿌려줘야 하는지 자꾸 구글링하면 몽고DB에 이미지파일을 직접적으로 저장하는 것은 DB에 무리를 일으킨다. 그래서 어떠한 라이브러리를 사용해서 DB에는 메타주소(?)만을 저장하고, 이미지파일을 별도의 localStorage에 저장한다. 또한 이미지를 그냥 가져(load) 올 수 없어서 인코딩을 해줘야 한다. 뭔 말인지 모르겠어요 ㅠ.ㅠ
안녕하세요, 2주차 개념 #9 깊이 우선 탐색 예제 구현하면서 인접리스트(벡터로) 구현시 각 정점의 인접요소를 정의하는 부분이 main 함수에 있는데요 저는 모든 간선(4개)을 양방향으로 아래와 같이 입력하였는데 adj[1].push_back(2); adj[1].push_back(3); adj[2].push_back(1); adj[2].push_back(4); adj[2].push_back(5); adj[3].push_back(1); adj[4].push_back(2); adj[5].push_back(5); 예제에서는 일부는 단방향으로만 입력이 되어있더라구요 adj[1].push_back(2); adj[1].push_back(3); adj[2].push_back(4); adj[4].push_back(2); adj[2].push_back(5); DFS 특성상 Depth가 더 깊은 요소에 접근이 되려면 부모노드를 거칠 수 밖에 없긴한데 5개 방향의 간선에 대해서만 정의한 이유가 있는지 궁금합니다.
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'hello.core.order.OrderServiceImpl' available 오류가 나온다면 AutoAppConfig에서 @ComponentScan( basePackages = "hello.core.member", <- 이 부분을 지우면 된다!! // memeber를 포함한 하위 패키지를 기준으로 찾기 때문에 // order에 대한 것 NoSuchDefiniton이 나오게된다. excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) )
안녕하세요! 강의 너무 잘 듣고있습니다~~ HandlerConfig ... public class HandlerConfig { public void configureHandlerMappingMap(Map<String, Object> handlerMappingMap) { handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3()); handlerMappingMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members", new MemberListControllerV4()); } public void configureHandlerAdapters(List<MyHandlerAdapter> handlerAdapters) { handlerAdapters.add(new ControllerV3HandlerAdapter()); handlerAdapters.add(new ControllerV4HandlerAdapter()); } } FrontControllerServletV5 ... @WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*") public class FrontControllerServletV5 extends HttpServlet { private final Map<String, Object> handlerMappingMap = new HashMap<>(); private final List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); public FrontControllerServletV5() { HandlerConfig handlerConfig = new HandlerConfig(); handlerConfig.configureHandlerMappingMap(handlerMappingMap); handlerConfig.configureHandlerAdapters(handlerAdapters); } ... 위와 같이 HandlerConfig 클래스 내부의 메서드에서 handlerMappingMap 과 handlerAdapters 를 매개변수로 전달받아 값을 세팅해 주도록 코드를 작성해 봤습니다. 이런 방식 보다는 아래의 방식이 더 나을까요?? 아래가 좀 더 '주입'이라는 느낌에 가까운 것 같아서 어떤 구조가 좋은 구조인지 고민됩니다..! HandlerConfig ... public class HandlerConfig { public Map<String, Object> handlerMappingMap() { Map<String, Object> handlerMappingMap = new HashMap<>(); handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3()); handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3()); handlerMappingMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4()); handlerMappingMap.put("/front-controller/v5/v4/members", new MemberListControllerV4()); return handlerMappingMap; } public List<MyHandlerAdapter> handlerAdapters() { List<MyHandlerAdapter> handlerAdapters = new ArrayList<>(); handlerAdapters.add(new ControllerV3HandlerAdapter()); handlerAdapters.add(new ControllerV4HandlerAdapter()); return handlerAdapters; } } FrontControllerServletV5 ... @WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*") public class FrontControllerServletV5 extends HttpServlet { private final Map<String, Object> handlerMappingMap; private final List<MyHandlerAdapter> handlerAdapters; public FrontControllerServletV5() { HandlerConfig handlerConfig = new HandlerConfig(); this.handlerMappingMap = handlerConfig.handlerMappingMap(); this.handlerAdapters = handlerConfig.handlerAdapters(); } ...
안녕하세요. 강의를 듣던 중 @RequestParam 의 defaultValue 값 설정 관련해서 궁금증이 생겨 질문남깁니다. 강의에서는 offset, limit 값을 @RequestParam을 사용해 defaultValue 값을 설정할 수 있었는데, 만약 @ModelAttribute나 @RequestBody로 객체를 통해 값을 받는 상황에서는 어떻게 객체 내부 필드들에 defaultValue를 설정할 수 있을까요??
searchbar 포트폴리오 리뷰에서 props로 searchbar 컴포넌트에 refechBoardsComment넘겨서 searchbar 컴포넌트에서 refechBoardsComment이용하여 페이지네이션을 수정없이 lastpage를변경할 수 있는데 const { data: dataBoardsCount, refetch: refechBoardsCount } = useQuery<Pick<IQuery, "fetchBoardsCount">,IQueryFetchBoardsCountArgs>(FETCH_BOARDSCOUNT,{variables:{search:keyword}}); 이렇게 FETCH_BOARDSCOUNT에 variables 값의 search를 keyword(검색어)로 주어도 똑같이 작동하는데 이 방법이 refechBoardsComment props로 넘겨줄 필요없어 간단한거 같은데 refechBoardsComment이용한 것과 같은거 맞나요? 아님 refechBoardsComment를 이용한 것과 차이가 있는 건가요?
남박사님 안녕하세요~. 수업 재밌게 듣고 있습니다. 아래 코드의 클로져에 대한 내용은 이해했습니다. import time def time_checker(func): def inner_function(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(type(result)) print("함수 {} 동작시간 {}".format(func.__name__, end_time-start_time)) return result return inner_function def test1(): for i in range(5): time.sleep(0.1) f = time_checker(test1) f() 1. f= time_checker(test1) time_checker 실행하여 f에 inner_function 리턴 후, result에 test1()의 값(None) 담음 2.f() inner_function 실행하여 print() 및 test1()의 값 리턴 문제는 데코레이터 부분인데, 로직에 대한 제 생각이 맞는지 질문드립니다. @time_checker # test1 = time_checker(test1) def test1(): for i in range(5): time.sleep(0.1) test1() 1.@time_checker [ #test1 = time_checker(test1) ] test1 = time_checker(test1) -->time_checker 실행하여 test1에 inner_function 리턴 후, result에 test1()의 값(None) 담음 2.test1() test1()이 곧 inner_function()이므로 print() 및 test1()의 값 리턴 3.헷갈리는 점 이제 test1()이 inner_function이 되었고, test1() 정의 아래의 func도 test1()이니 충돌이 나지 않나요? def inner_function(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(type(result)) print("함수 {} 동작시간 {}".format(func.__name__, end_time-start_time)) return result P.S 저의 경우 time_checker의 동작 시간이 0.54초로 오차가 너무 큽니다. 컴퓨터 사양의 문제일까요,,?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/) [질문 내용] 안녕하세요 테스트코드 작성중 궁금한게 생겨 질문드립니다. @Setter 어노테이션을 자주 사용하게 되면 어디서 변경될지 모르기때문에 사용을 하지말라고 알고 있는데 김영한 강사님께서는 테스트 코드 작성시 set을 사용하셔서요 테스트코드에서만 setter를 사용한다면 문제가 없을까요? 이에 관련하여 구글링을 해보았는데 테스트코드 한정으로 setter를 사용한다고 하는 분들도 있네요 저 같은경우는 테스트코드에서도 @Builder 어노테이션을 통해서 set을 대체하고 있는데요 아무래도 좀 귀찮은면이 있어서... 엔티티에 @Setter를 선언하고 테스트 코드에만 사용하는것이 더 좋을지 그래도 @Setter의 위험성을 생각해서 사용하지말고, @Builder를 사용하는것이 더 좋을지 질문드립니다. 감사합니다.
알려 주신 대로 pip install PyQt5==5.14.2 로 재설치하는데 위처럼 오류가 납니다. 찾아보니 파이썬 버전이 너무 높아서 뜨는 오류 같은데 그럼 파이썬 자체를 낮은 버전으로 다시 깔아야 하는 건가요? 정확히 어떤 버전부터 오류가 발생하지 않는지도 헷갈리고... 예전 강의라 그런지 버전 이슈가 너무 불편하고 시간낭비만 며칠동안 엄청 하네여....ㅠ
select * from nw.orders where (customer_id,order_date) in ( select customer_id, max (order_date) from nw.orders group by customer_id) 이 쿼리를 날려도 customer_id 레벨이 M이라 LACOR이라는 value가 중복이 되는 건가요? 강의에선 메인 쿼리 레벨이 1이고 서브 쿼리 레벨이 M일 때 메인 쿼리 레벨이 1로 유지된다고 했는데, 이 쿼리처럼 메인 쿼리 레벨이 M이고 서브 쿼리 레벨이 1일 때도 메인 쿼리 레벨은 M으로 유지된다고 이해해도 괜찮을까요?
PYQT 첫 강부터 오류때문에 실행이 되지 않습니다ㅠㅠ PYQT-SIP 모듈을 찾을 수 없다는 오류 메시지가 떠서 구글링으로 찾은 방법을 다 시도해 봐도 해결이 안되네요. 최신 버전으로 업그레이드, 지웠다가 pip3으로 다시 재설치 등등 다 해봐도 해결이 안됩니다. 도와주세요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 22강 테스트 중 아래와 같은 에러가 발생 org.springframework.dao.InvalidDataAccessApiUsageException 해결 → articleId 앞에 Param을 붙여줌. @Query(value = "SELECT * " + "FROM comment " + "WHERE article_id = :articleId", nativeQuery = true) List<Comment> findByArticleId(@Param("articleId") Long articleId);