묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
가운데 정렬
container 중앙으로 이동시킬때.container { background: #eeeeee; display: flex; flex-direction: row; justify-content: center; align-items: center; padding: 50px; }라고 하셨는데 가운데 정렬하게 될때 ,margin: 0 auto; 하는것과 어떤차이가 있을까요 ??
-
미해결[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)
SyntaxWarning: invalid escape sequence '\.' 에러가
제가 뭘 건든건지 잘되던게 갑자기SyntaxWarning: invalid escape sequence '\.'에러가 출력됩니다.셀레니움 css셀렉터에서 검색 카피해와서 붙였는데 그중에 \ 들어가면 에러를 내보네요.. 이유를 모르겠습니다.
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
Q클래스 파일 생성 오류
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]상황: build tool는 Gradle를 사용하고 있습니다.Gradle -> Tasks -> build -> clean Gradle -> Tasks -> other -> compileJava위에 작업을 실행해도 generated폴더에 Q클래스가 생성되지 않습니다. 참고로 generated도 생성되지 않습니다.다른 분들처럼 오류가 발생하지는 않습니다!!
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
On-Demand ISR 관련 질문
On-Demand ISR 사전 렌더링 방식을 보면서 현재 대부분의 SSR로 구현 되어 있는 어플리케이션을 좀 더 최적화 할 수 있겠다는 생각을 했습니다! 여기서 질문은 API Router를 생성해서 revalidate할 경로를 작성해서 해당 경로의 페이지를 On-Demand ISR 처리되도록 구현해주셨는데요..! 실제로 비지니스 로직을 작성할 때는 많은 페이지들이 존재하는데, 이럴때는 API Router에서 "/" 인덱스 페이지 경로를 하드코딩한 부분을 동적으로 받을 수 있게 처리해서 백엔드 서버와 통신 시, 정상응답을 받았을 때, 해당 API Router를 호출하게 하면 되는걸까요..?!추가로, 페이징 기능 같은 페이지가 있는 경우에는 어떤식으로 On-Demand ISR을 적용하는지도 궁금합니다..!!바쁘시겠지만 답변 해주시면 감사하겠습니다 😀 🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)질문 하실때 꼭 확인하세요- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
SpringMemberFormControllerV1 404에러
SpringMemberFormControllerV1에서 @Controller를 붙이고실행하면 폼이 정상적으로 뜨는데 이렇게@Controller를 주석처리하고@Component@RequestMapping 를 붙이고실행하면 404가 에러가 뜹니다. 게다가이렇게 testcontroller를 해서 실행해도 마찬가지로 404가 에러가 뜹니다 어떻게 해야 되나요?
-
미해결Java 마이크로서비스(MSA) 프로젝트 실습
마이크로 서비스 최종정리 msa 화면 흐름도?를보고 이해되지않아 문의드립니다
authentication-server는 어떤역활인가요?강의 마지막에 볼때..클라이언트가 GateWay-server에 요청할경우 config-server 와 Eureka-server를 보내고아이템서비스와 히스토리 서비스에 데이터 전달하는데authentication-server는 아이템서비스로 봐야하는지아니면 별도의 서버인지 궁금합니다.14장 pdf파일에 두번째 그림보고 궁금해서 문의드립니다.제가 느끼기엔 item-microservice와 유사한 기능이라 생각됩니다만.. 제가 이해하는게 맞을까요?
-
미해결[입문자를 위한 UE5] Part4. 언리얼 엔진 C++
에디터에서 cpp파일이 소스폴더 안의 헤더 경로 인식을 못합니다....
엔진버전은 5.4로 하고 있습니다.다름이 아니라 예를 들어서 액터 상속 받은 cpp파일을 만든다고 했을때 폴더 경로를 R1-> Test3 이렇게 해놓았습니다. 그런데 희한하게도 라이브 코딩에서 에러가 뜨는데 E:\Projects\UnrealProjects\RookissUE5Part4\R1\Source\R1\Test3\MyActor.cpp(4): fatal error C1083: Cannot open include file: 'Test3/MyActor.h': No such file or directory [2/4] Compile [x64] R1.init.gen.cpp [3/4] Compile [x64] R1PowerActing.cpp [4/4] Compile [x64] MyActor.gen.cpp Total time in Parallel executor: 0.86 seconds Total execution time: 5.13 secondsBuild failed.확인을 해보니까 헤더파일을 계속해서 인식을 못한다고 뜨더라구여 그래가지구 cpp파일에 #include "Test3/MyActor.h"여기서 #include "MyActor.h"로 폴더 경로를 아예 빼버리고 라이브코딩 빌드를 하니까 이거는 잘 작동을 합니다. 이게 5.4 버전 부터는 cpp경로에서 헤더파일의 폴더를 인식하지 못하는건지 아니면 따로 플러그인이나 다시 에디터를 재설치하는게 맞는지 좀 애매합니다. 혹시 이러한 경우를 겪으셨는지 궁금해서 이렇게 올려봅니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
타임리프html
<li>${user.username} = <span th:text="${user.username}"></span></li>제가 html에서 태그를 잘 알지 못해서 어느정도 영역까지 html을 알아야 하는지 감이 안잡혀서요예를 들어 현재 예시에서 해당지역에 th:text로 타임리프를 사용하는것은 알겠지만 span태그와 같은것을 사용해야 한다는것 또한 알아야 하나요?? 아니면 프론트 분들이 span 태그를 사용해야 한다는것을 남겨주시는 건가요??p태그, a태그, tr태그.. 등등 다양하게 변수를 감싸서 사용하는 것 같아서 알아야하는 부분인지 궁금합니다
-
미해결React + GPT API로 AI회고록 서비스 개발 (원데이 클래스)
css가 화면에 반영이 되지않습니다.
썸네일 이미지가 뜨지 않습니다!그리고 css도 안먹힙니다.더불어if (!data) { return <DiaryContainer></DiaryContainer>; } 위의 코드가 없으면 화면이 웹드라우저에 뜨지 않습니다. import { DiaryContainer, ResultTitle, Divider, CardContainer, CardTitle, CardContent, ActionListItem, } from "./CommonStyles"; import { LoadingOutlined, CheckCircleTwoTone, HeartTwoTone, SmileTwoTone, MessageTwoTone, SoundTwoTone, } from "@ant-design/icons"; import { Image } from "antd"; import styled from "styled-components"; const ThumbnailImage = styled(Image)` max-width: 100%; height: auto; border-radius: 8px; margin-bottom: 15px; display: block; `; const DiaryDisplay = ({ data, isLoading }) => { if (isLoading) { return ( <DiaryContainer> 불러오는중... <LoadingOutlined /> </DiaryContainer> ); } if (!data) { return <DiaryContainer></DiaryContainer>; } return ( <DiaryContainer> <ResultTitle>{data.title}</ResultTitle> <Divider /> <CardContainer> <CardTitle> <CheckCircleTwoTone twoToneColor="#FF9AA2" style={{ marginRight: "6px" }} /> 요약 </CardTitle> <CardContent>{data.summary}</CardContent> </CardContainer> <ThumbnailImage src={data.thumbnail} alt="Thumbnail" fallback="데이터:image/png;base64,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" /> <Divider /> <CardContainer> <CardTitle> <HeartTwoTone twoToneColor="#FFB7B2" style={{ marginRight: "6px" }} /> 감성일기장 </CardTitle> <CardContent>{data.emotional_content}</CardContent> </CardContainer> <Divider /> <CardContainer> <CardTitle> <SmileTwoTone twoToneColor="#FFDAC1" style={{ marginRight: "6px" }} /> 내가 느낀 감정 </CardTitle> <CardContent>{data.emotional_result}</CardContent> </CardContainer> <Divider /> <CardContainer> <CardTitle> <MessageTwoTone twoToneColor={"#B5EAD7"} style={{ marginRight: "6px" }} /> 심리 분석 </CardTitle> <CardContent>{data.analysis}</CardContent> </CardContainer> <Divider /> <CardContainer> <CardTitle> <SoundTwoTone twoToneColor="#C7CEEA" style={{ marginRight: "6px" }} /> GPT 조언 </CardTitle> <CardContent> {data.action_list.map((action, index) => ( <ActionListItem key={index}>{action}</ActionListItem> ))} </CardContent> </CardContainer> </DiaryContainer> ); }; export default DiaryDisplay; 코드는 이렇습니다.썸네일은 원래 본 강의의 깃허브에서 내려받은 코드로도 안돼서 고친 것입니다. 원래코드도 이미지가 안떳습니다 ㅠㅠ어떻게 문제를 해결할 수 있을까요?
-
미해결[초급] 찍어먹자! 코틀린과 Spring Security + JWT로 회원가입 만들기
4.1강 마지막 회원가입 실행
모든 코드를 다 작성하고 db실행도 다 한 상태로 send룰 눌렀는데 이렇게 빈 실행화면이 뜨고 디비에 회원정보가 생기지 않습니다. 오탈자가 있나 살펴보았지만 도저히 찾지 못하였습니다.
-
미해결견고한 결제 시스템 구축
R2DBC 관련해서 질문 드립니다.
안녕하세요.강의 잘 듣고 있습니다.R2DBC로 실습 환경을 구축해주셨는데요. R2DBC 이용하면서 DatabaseClient 를 이용해주셨는데요.혹시 Jooq 를 이용안하신 이유가 있을까요?그리고 실무에서도 DatabaseClient 를 이용하시는지 궁금합니다. 추가로 DatabaseClient 를 사용시에 동적 쿼리를 어떻게 작성을 해야 하는지 팁 주시면 감사하겠습니다! (where 절 고정이 아닌 특정값이 있을 경우에만 where절 생성 이라던지 ㅎ ) 감사합니다!
-
미해결호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)
collaboator로 초대받을 수 있을까요??
당연히 구글링 해보셨져? 원하는 결과를 못찾으셨나요? 어떤 검색어를 입력했는지 알려주세문제가 발생한 코드(프로젝트)를 Github에 올리시고 링크를 알려주세요.안녕하세요 호돌맨님.덕분에 강의 잘 듣고있습니다.깃헙 collaboator로 초대받을 수 있을까요?깃헙 아이디는 sol4854@naver.com 입니다!감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
백엔드 서버 외부 접속 차단
백엔드를 "https://api.example.com" 프론트엔드를 "https://example.com"이렇게 배포했습니다. 그런데 백엔드 서버는 example.com 이 주소에서 api 요청만 가능하고, https://api.example.com/graphql 은 주소창에 검색해도 접속 못하게 하고 싶습니다. 어떻게 해야할까요?
-
미해결[리뉴얼] 코딩자율학습 제로초의 자바스크립트 입문
클로저 관련해서 질문있습니다.
안녕하세요.강의 도중 클로저를 설명해주셨는데 의문점이 있습니다.익명 함수를 실행할 때 i를 인자로 넣어주고,함수 내부에서는 j로 그 값을 받습니다.그런데 setTimeout의 2번째 인자로 j가 아닌 i를 넣어주었는데도 올바르게 실행됩니다.익명 함수 내부에서의 i는 어디서 가져오고, j로 바꾸지 않아도 올바르게 작동하는지 궁금합니다.for (var i = 0; i < 6; i++) { (function (j) { console.log(i); setTimeout(() => { drawBall(balls[j], $result); }, 1000 * (i + 1)); })(i); }
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
2.8) 레이아웃 설정시 getLayout 메서드말고 if문 써서 이렇게 해도 될까요?
레이아웃 컴포넌트의 경우 여러 페이지에 공통적으로 들어가야 하는 것이기 때문에, _app.tsx에 넣어야 하는 것은 이해했습니다. 그리고 모든 페이지에 들어가는 레이아웃이 아닌 특정 페이지만 들어가는 레이아웃의 경우에 정환님 같은 경우에는 getLayout이라는 메서드를 해당 레이아웃을 필요로 하는 페이지 컴포넌트 함수에 메서드로 주시고 _app.tsx에서는 그 메서드를 불러오게끔 하셨는데요. 제가 머리가 나빠서인지는 모르겠지만, 뭔가 이런 메서드로 레이아웃을 관리하니까 이해하기 어렵고 뭔가 직관적으로 다가오는 느낌이 없어서 힘들더라구요.. 그래서 그냥 router와 if문을 이용해서 특정 페이지의 경우에만 searchable 레이아웃이 나오게 하고, 아닌 경우에는 그냥 페이지를 리턴하도록 하는 게 저한테는 뭔가 더 직관적..? 으로 다가오는데 이런 식으로 사용해도 되는지 궁금해서 여쭈어봅니다.. (코드는 밑에 같이 써놓았습니다!) export default function App({ Component, pageProps }: AppProps) { const router = useRouter(); const isSearchableLayoutPage = router.pathname === '/' || router.pathname === '/search'; return ( <GlobalLayout> {isSearchableLayoutPage ? ( <SearchableLayout> <Component {...pageProps} /> </SearchableLayout> ) : ( <Component {...pageProps} /> )} </GlobalLayout> ); }
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
bindingResult 질문입니다
MVC2 강의를 듣고 복습하는 겸 직접 상품관리 페이지를 만들어보고 있습니다.validation 부분에서 상품 추가까지는 잘 작동하게 되었는데, 수정 부분에서 문제가 생겼습니다.어느 부분이 문제인지 아무리 찾아봐도 모르겠어서 질문드립니다.@Data public class ItemUpdateForm { @NotNull private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; private Integer quantity; public ItemUpdateForm(Long id, String itemName, Integer price, Integer quantity) { this.id = id; this.itemName = itemName; this.price = price; this.quantity = quantity; } }@PostMapping("/edit/{itemId}") public String editItem(@PathVariable Long itemId, @Validated @ModelAttribute("item") ItemUpdateForm form, BindingResult bindingResult) { log.info("*** edit post 요청 ***"); log.info("itemUpdateForm: {}", form); if (bindingResult.hasErrors()) { log.info("bindingResult= {}", bindingResult); return "item/edit"; } itemService.updateItem(itemId, form); return "redirect:/item/detail/{itemId}"; }<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .field-error { border-color: red; color: red; } </style> </head> <body> <div> <div th:replace="fragment/bodyHeader :: bodyHeader" /> <div> <h2>상품 수정</h2> </div> <form method="post" th:object="${item}" th:action> <div> <label>ID</label> <input type="text" th:field="*{id}" readonly> </div> <div> <label>상품명</label> <input type="text" th:field="*{itemName}" th:errorclass="field-error" placeholder="상품명을 입력하세요."> <div class="field-error" th:errors="*{itemName}"> 상품명 오류 </div> </div> <div> <label>가격</label> <input type="text" th:field="*{price}" th:errorclass="field-error" placeholder="가격을 입력하세요."> <div class="field-error" th:errors="*{price}"> 가격 오류 </div> </div> <div> <label>수량</label> <input type="text" th:field="*{quantity}" th:errorclass="field-error" placeholder="수량을 입력하세요."> <div class="field-error" th:errors="*{quantity}"> 수량 오류 </div> </div> <button type="submit">저장</button> </form> </div> </body> </html>상품 수정 페이지에서 다른 경우에는 잘 작동하는데, typeMismatch가 발생한 경우에는 bindingResult에 다른 에러는 담기지 않고 typeMismatch 에러만 담기고 있습니다.다음은 에러 코드입니다.2024-08-25T17:50:41.455+09:00 INFO 15096 --- [nio-8080-exec-3] community.demo.web.ItemController : *** edit post 요청 ***2024-08-25T17:50:41.455+09:00 INFO 15096 --- [nio-8080-exec-3] community.demo.web.ItemController : itemUpdateForm: ItemUpdateForm(id=1, itemName=, price=10, quantity=null)2024-08-25T17:50:41.455+09:00 INFO 15096 --- [nio-8080-exec-3] community.demo.web.ItemController : bindingResult= org.springframework.validation.BeanPropertyBindingResult: 1 errorsField error in object 'item' on field 'quantity': rejected value [100a]; codes [typeMismatch.item.quantity,typeMismatch.quantity,typeMismatch.java.lang.Integer,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.quantity,quantity]; arguments []; default message [quantity]]; default message [Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; For input string: "100a"]2024-08-25T17:50:41.456+09:00 WARN 15096 --- [nio-8080-exec-3] actStandardFragmentInsertionTagProcessor : [THYMELEAF][http-nio-8080-exec-3][item/edit] Deprecated unwrapped fragment expression "fragment/bodyHeader :: bodyHeader" found in template item/edit, line 15, col 10. Please use the complete syntax of fragment expressions instead ("~{fragment/bodyHeader :: bodyHeader}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf. 다음은 코드파일입니다.https://drive.google.com/file/d/1aDFEYzno4e6slRN8K2Tm5EFEYUb5WDJP/view?usp=sharing
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]https://drive.google.com/drive/folders/1jHYkBAHDuUoSr5hjn0Kp5CzTAWLem3Zu?usp=drive_link 코드를 쭉 작성해봤는데 마지막에 submit할 때 whiteError페이지가 나옵니다. gpt에 해결책을 물어봤을 때에러 로그를 보면, Thymeleaf 템플릿을 처리하는 동안 문제가 발생한 것을 알 수 있습니다. 특히, item.orderItems[0].item.name라는 표현식에서 문제가 발생했습니다.에러의 원인에러 메시지 중에서 가장 중요한 부분은 다음과 같습니다:Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1025E: The collection has '0' elements, index '0' is invalid 이 메시지는 item.orderItems[0]에서 인덱스를 사용하여 컬렉션의 첫 번째 요소에 접근하려고 했지만, orderItems 컬렉션이 비어 있어서 인덱스 0이 유효하지 않다는 것을 의미합니다. 즉, orderItems 컬렉션이 비어있거나 null일 때 이 표현식을 평가하려다가 오류가 발생한 것입니다.해결 방법컬렉션이 비어있을 경우에 대한 처리:Thymeleaf 템플릿에서 컬렉션이 비어있는 경우를 대비하여 조건문을 추가할 수 있습니다. 예를 들어, orderItems가 비어있지 않은 경우에만 접근하도록 할 수 있습니다.<div th:if="${item.orderItems.size() > 0}"> <span th:text="${item.orderItems[0].item.name}">Item Name</span> </div> 안전한 접근을 위한 기본값 제공:orderItems 컬렉션이 비어있을 때 안전하게 처리하기 위해, th:text 속성에서 기본값을 제공할 수 있습니다.<span th:text="${item.orderItems.size() > 0 ? item.orderItems[0].item.name : 'No items'}">Item Name</span> 서버 측에서 데이터 처리:서버 코드에서 orderItems가 비어있는 경우에 대해 적절히 처리하도록 할 수도 있습니다. 예를 들어, orderItems가 비어있다면 기본값을 설정하거나, 비어있음을 표시하는 별도의 로직을 추가할 수 있습니다.템플릿 구조 개선:템플릿 구조를 개선하여, orderItems가 비어있을 때는 특정 HTML 요소를 렌더링하지 않도록 할 수 있습니다.결론에러의 원인은 item.orderItems[0].item.name에서, orderItems 컬렉션이 비어있을 때 인덱스 0에 접근하려고 했기 때문입니다. 이를 해결하려면 위의 방법 중 하나를 사용하여, orderItems가 비어있는 경우를 안전하게 처리해야 합니다. 템플릿에서 Thymeleaf의 조건문이나 기본값 제공 기능을 사용하여 이 문제를 해결할 수 있습니다. 이런식으로 나왔고 h2데이터베이스의 order자체에 값이 잘 저장된 것은 확인했는데 무엇이 문제인지 잘 모르겠어서 질문드립니다
-
미해결
비주얼 스튜디오에서 install부터가 안됩니다.
따라하며 배우는 노드, 리액트 시리즈 - 챗봇 사이트 만들기 | 학습 페이지 (inflearn.com) 여기도 질문을 했는데 답을 못받을까봐 씁니다. 지금 "dialogflow-fulfillment": "^0.6.1",얘가 최신버전인데, 얘와 호환되는 애가 node6이라고 합니다. 지금 10버전이상이 나오고 있는데 6버전을 쓸 수는 없는 것 같아요. 최신버전에 맞처서 진행을 하고 싶습니다.npm install을 하면 버전이 자꾸 안맞다고 합니다.그렇다고 dialogflow-fulfillment이거를 최신노드버전이랑 호화되는 것을 찾으려고 하니... 저게 최신이라고 합니다. 6년전께요. 얼마전까지 인스톨해서 포스트맨까지확인하고, 채팅까지 했었고 이벤트 적용하다가 자꾸 에러가 처음부터 다시 작업하는데 이번에도 버전문제라고 하네요 모듈의 버전을 현재 안정적인 최신버전으로 (제 컴퓨터에깔린)바뀌어서 인스톨을 진행하지만 자꾸 에러가 납니다 어떻게 하면 인스톨하고, 작업을 할까요?얼마전 까지 인스톨을 지나서 기능만들고, css 적용하고 있는데 갑자기갑자기 버전 문제라고 에러가 계속 뜨기시작합니다. { "name": "chatbot-app", "version": "1.0.0", "description": "chatbot-app", "main": "index.js", "engines": { "node": ">=20.16.0", "npm": ">=10.2.0" }, "scripts": { "start": "react-scripts --openssl-legacy-provider start", "build": "react-scripts --openssl-legacy-provider build", "test": "react-scripts test", "eject": "react-scripts eject", "backend": "nodemon index.js", "frontend": "npm run front --prefix client", "dev": "concurrently \"npm run backend\" \"npm run start --prefix client\"" }, "author": "Jaewon Ahn", "license": "ISC", "dependencies": { "@google-cloud/dialogflow": "^6.8.0", "actions-on-google": "^2.6.0", "body-parser": "^1.18.3", "dialogflow": "^4.0.3", "dialogflow-fulfillment": "^0.6.1", "express": "^4.16.4", "mongoose": "^5.4.20" }, "devDependencies": { "concurrently": "^8.2.2", "nodemon": "^3.1.4" } } C:\project\vswork\chatbot-app> C:\project\vswork\chatbot-app>npm install npm warn EBADENGINE Unsupported engine { npm warn EBADENGINE package: 'dialogflow-fulfillment@0.6.1', npm warn EBADENGINE required: { node: '6' }, npm warn EBADENGINE current: { node: 'v20.16.0', npm: '10.8.2' } npm warn EBADENGINE } npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. npm warn deprecated npmlog@5.0.1: This package is no longer supported. npm warn deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported npm warn deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported npm warn deprecated are-we-there-yet@2.0.0: This package is no longer supported. npm warn deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated npm warn deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies npm warn deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated gauge@3.0.2: This package is no longer supported. npm warn deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm warn deprecated axios@0.18.1: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 npm warn deprecated grpc@1.24.11: This library will not receive further updates other than security fixes. We recommend using @grpc/grpc-js instead.
-
해결됨서버개발자 과제전형 완벽가이드 - 1편
포트폴리오 질문
이 강의를 기반으로 포트폴리오도 만들어보려고합니다. 포트폴리오 만들때 여러가지 기술들을 더 적용해보는게 좋을까요 아니면 강의에 나온 기술만 활용해도 충분할까요?
-
미해결따라하며 배우는 노드, 리액트 시리즈 - 챗봇 사이트 만들기
npm install 이 안됩니다
지금 "dialogflow-fulfillment": "^0.6.1",얘가 최신버전인데, 얘와 호환되는 에가 node6이라고 합니다. 지금 10버전이상이 나오고 있는데 6버전을 쓸 수는 없는 것 같아요. npm install을 하면 버전이 자꾸 안맞다고 합니다.최신버전에 맞처서 진행을 하고 싶습니다.그렇다고 dialogflow-fulfillment이거를 최신노드버전이랑 호화되는 것을 찾으려고 하니... 저게 최신이라고 합니다. 6년전께요. 얼마전까지 인스톨해서 포스트맨까지확인하고, 채팅까지 했었고 이벤트 적용하다가 자꾸 에러가 처음부터 다시 작업하는데 이번에도 버전문제라고 하네요 모듈의 버전을 현재 안정적인 최신버전으로 (제 컴퓨터에깔린)바뀌어서 인스톨을 진행하지만 자꾸 에러가 납니다 { "name": "chatbot-app", "version": "1.0.0", "description": "chatbot-app", "main": "index.js", "engines": { "node": ">=20.16.0", "npm": ">=10.2.0" }, "scripts": { "start": "react-scripts --openssl-legacy-provider start", "build": "react-scripts --openssl-legacy-provider build", "test": "react-scripts test", "eject": "react-scripts eject", "backend": "nodemon index.js", "frontend": "npm run front --prefix client", "dev": "concurrently \"npm run backend\" \"npm run start --prefix client\"" }, "author": "Jaewon Ahn", "license": "ISC", "dependencies": { "@google-cloud/dialogflow": "^6.8.0", "actions-on-google": "^2.6.0", "body-parser": "^1.18.3", "dialogflow": "^4.0.3", "dialogflow-fulfillment": "^0.6.1", "express": "^4.16.4", "mongoose": "^5.4.20" }, "devDependencies": { "concurrently": "^8.2.2", "nodemon": "^3.1.4" } } C:\project\vswork\chatbot-app> C:\project\vswork\chatbot-app>npm install npm warn EBADENGINE Unsupported engine { npm warn EBADENGINE package: 'dialogflow-fulfillment@0.6.1', npm warn EBADENGINE required: { node: '6' }, npm warn EBADENGINE current: { node: 'v20.16.0', npm: '10.8.2' } npm warn EBADENGINE } npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. npm warn deprecated npmlog@5.0.1: This package is no longer supported. npm warn deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated npm warn deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported npm warn deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported npm warn deprecated are-we-there-yet@2.0.0: This package is no longer supported. npm warn deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated npm warn deprecated chokidar@2.1.8: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies npm warn deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated google-p12-pem@1.0.5: Package is no longer maintained npm warn deprecated gauge@3.0.2: This package is no longer supported. npm warn deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm warn deprecated axios@0.18.1: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 npm warn deprecated grpc@1.24.11: This library will not receive further updates other than security fixes. We recommend using @grpc/grpc-js instead.