기존 생성했던 npx create-react-app my-app 명령어로 생성했던 my-app 실제 경로로 들어가서 폴더 삭제하고 npm uninstall -g create-react-app npm install -g create-react-app npx create-react-app my-app 수행 시 C:\Program Files\nodejs>npx create-react-app my-app Need to install the following packages: create-react-app@5.0.1 Ok to proceed? (y) y npm WARN deprecated tar@2.2.2: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap. node:fs:1380 const result = binding.mkdir( ^ Error: EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs\my-app' at Object.mkdirSync (node:fs:1380:26) at module.exports.makeDirSync (C:\Users\김진구\AppData\Local\npm-cache\_npx\c67e74de0542c87c\node_modules\fs-extra\lib\mkdirs\make-dir.js:23:13) at createApp (C:\Users\김진구\AppData\Local\npm-cache\_npx\c67e74de0542c87c\node_modules\create-react-app\createReactApp.js:257:6) at C:\Users\김진구\AppData\Local\npm-cache\_npx\c67e74de0542c87c\node_modules\create-react-app\createReactApp.js:223:9 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { errno: -4048, code: 'EPERM', syscall: 'mkdir', path: 'C:\\Program Files\\nodejs\\my-app' } Node.js v20.11.0 에러가 발생합니다. 어떻게 조치해야할까요 ??
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 섹션 1. 프로젝트 환경설정 H2 데이터 베이스설치 관련 질문사항 제가 원래 H2는 제대로 동작 됐고 다음 JPA와 DB 설정을 진행하다 오류가 생겨 고민하다 아예 전부 지우고 다시 시행하는 과정에서 이번에는 H2데이터 베이스를 설치하면서 해결이 되지 않아서 질문합니다. (아마 제 생각에는 여러 번 깔았다가 지웠다하면서 뭔가 오류가 생긴 것 같습니다.) 1.cmd 창에 입력하면 창이 새롭게 뜨지 않습니다. 2.cmd (관리자 권한)이어도 마찬가지로 h2창이 뜨지 않습니다. 3.h2 console 을 누르면 아무런 반응이 없습니다. 어떻게 해야할까요? 아니면 흔적이 남지 않게 완전히 지우는 방법이라도 알려주세요... 버전을 다르게 깔아봤는데도 마찬가지입니다.
강의하셨던 코드를 쭉 훑어봤습니다. 강의에서 Spring이 굉장히 방대한 것을 알았습니다. 그리고, Spring에서의 MVC구조에 대해서는 대략 알게 되었습니다. 강의를 듣다 문득 궁금해졌던 부분인데, Spring 에서는 객체를 Spring Container에 넣어줘서 Bean으로 관리한다고 알려주셨습니다. Bean으로써 관리되는 객체는 Spring이 자동적으로 Dependency Injection을 한다고도 알려주셨고요. Spring Container, Bean은 자동 객체의 생성과 관리를 관장한다고는 알고있긴합니다만, MVC간 data 전달은 잘 모르겠습니다. 궁금한것은 Model Controller View간 객체를 전달 할 때의 방법 과 그 내부적인 원리 에 대해서입니다. Controller에서 Service/DTO/Repository쪽에서 Object를 어떻게 HTML인 View 에 전달하는지 그리고 View에서 어떻게 Object를 사용하고, 또 그 Object를 어덯게 Controller에 전달하는지가 알고싶습니다. 또, URL에서 QueryString이 어떻게 Client쪽에서 처리되어 Server쪽에 도달하는지, 그 내부적인 프로세스에 대해서 알고싶습니다. 전체적으로 Object들이 어떤 흐름으로 MVC에 전달되고, MVC 내부적으로 어떻게 Object들을 공유하길래 HTML과 Java Code간 객체의 데이터를 공유가능한건지 궁금합니다. 이건 Serialization과 관련된 내용인가요? 저 내용들을 다 알려주시기 어렵다면, 검색 키워드만이라도 알려주시면 좋겠습니다. "how does spring send objects with view internally and controller" "how does spring view send object to controller internally" 등으로 검색해봐도 원하는 정보가 나오지 않네요... 또한, 저 내용들이 김영한님 강의에 있는 내용이라고 하고, 더 강의를 들으면 알 수 있는 내용이라고 한다면, 검색 키워드와 함께 김영한님 강의 어느부분에서 다루는지도 알려주셨으면 합니다. 일단 강의는 모두 구매한 상태라 들을 수 있습니다..
[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요! provider적용하기 강의 듣고 있습니다. 궁금한게, 프로젝트를 진행할 수 록 여러개의 provider를 생성하게 되는데 그럼 이 모든 provider의 인스턴스가 사용하지 않아도 무조건 앱 실행시 다 인스턴스화 되어 메모리에 올라가게 되나요? 제가 객체지향관련 개념이 플러터하면서 처음이라 조금 헷갈립니다. 감사합니다.
실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
안녕하세요. 강의 다시 보기 하다가 질문이 생겨서 글 남깁니다. @Entity class Book( val name: String, @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null, ) { } @Entity class Book( name: String, ) { var name: String = name private set @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long = 0L } 코틀린에서 필드를 기본생성자로 하는 방식과 클래스 본문으로 하는 방식으로의 차이가 궁금해서 질문드립니다! 감사합니다
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] RequestMappingHandlerAdapter에서 컨트롤러의 파라메터에서 필요로 하는 객체를 반환받아서 ArgumentResolver의 supportsParameter()를 통하여 반환받은 객체가 있는지 검증 후 있으면 ArgumentResolver의 resolveArgument()를 통하여 컨트롤러를 호출해준다고 이해했습니다. 그런데 핸들러 어댑터 로직을 살펴보니 supportsParameter()를 통해 검증해주는 로직은 있지만 resolveArgument()를 호출해주는 로직이 존재하지 않는데 어디서 resolveArgument()를 통하여 컨트롤러를 호출할 수 있는 건지 resolveArgument()의 호출 위치가 궁금합니다 !
질문 답변을 제공하지만, 강의 비용에는 Q&A는 포함되어 있지 않습니다. 다만 실습이 안되거나, 잘못된 내용의 경우는 알려주시면 가능한 빠르게 조치하겠습니다! [질문 전 답변] 1. 강의에서 다룬 내용과 관련된 질문인가요? [예 | ] 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? [예 | ] 3. 질문 잘하기 법을 읽어보셨나요? [예 | ] (https://www.inflearn.com/blogs/1719) 4. 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 5. vagrant up 에서 발생하는 문제는 주로 호스트 시스템(Windows, MacOS)과 연관된 다양한 조건에 의해 발생합니다. 따라서 이를 모두 제가 파악할 수 없어서 해결이 어렵습니다. vagrant up 으로 진행이 어렵다면 제공해 드리는 가상 머신(VM) 이미지를 import해서 진행하시기 바랍니다. ( https://www.inflearn.com/questions/992407/comment/281901 ) 6. ARM 계열의 m1 , m2 계열은 VirtualBox를 통한 구성이 원할하지 않고, 실습 환경의 다변화는 추후 대처하기 어려워서 현재 과정에서는 지원하지 않습니다. ( https://www.inflearn.com/questions/915529 ) [질문 하기] 커리큘럼명 : A.11.012.파워유저용 k9s on kui 리눅스 베스천서버에서 kui를 설치하려는데 설치명령어를 알수 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 파이썬 처음 깔아봤는데 덕분에 여기까지 왔습니다 어떻게 이것저것 끼워넣어서 코드를 만들기는 했는데 유튜브 크롤링시 날짜 지정해서 그 날짜만 가져오고 싶습니다 스크롤 없애고 날짜 지정을 넣고 싶은데 너무 어렵네요 코드 수정 부탁드려도 될까요ㅠㅠ from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import time import pyautogui import openpyxl # 검색어 입력 keyword = pyautogui.prompt("검색어를 입력하세요") # 엑셀 생성 wb = openpyxl.Workbook() ws = wb.create_sheet(keyword) ws.append(['번호', '제목', '조회수', '날짜', 'URL']) #열 너비 조절 ws.column_dimensions['A'].width = 5 ws.column_dimensions['B'].width = 80 ws.column_dimensions['C'].width = 20 ws.column_dimensions['D'].width = 15 ws.column_dimensions['E'].width = 80 # 브라우저 설정 chrome_options = Options() chrome_options.add_experimental_option("detach", True) chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) browser = webdriver.Chrome(options=chrome_options) # YouTube 검색 페이지로 이동 url = f"https://www.youtube.com/results?search_query={keyword}" browser.implicitly_wait(5) browser.maximize_window() browser.get(url) # 스크롤 횟수 scroll_count = 5 # 스크롤 수행 i = 1 while True: browser.find_element(By.CSS_SELECTOR, "body").send_keys(Keys.END) time.sleep(0.7) if i == scroll_count: break i += 1 # 동적으로 로딩되는 콘텐츠를 기다림 wait = WebDriverWait(browser, 10) wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "ytd-video-renderer #video-title"))) # 페이지 소스를 가져와 BeautifulSoup으로 파싱 html = browser.page_source soup = BeautifulSoup(html, 'html.parser') videos = soup.select("ytd-video-renderer") # 정보 추출 for i, video in enumerate(videos, 1): title = video.select_one("#video-title").text.strip() metadata = video.select_one("#metadata-line") views = metadata.find_all("span")[0].text.strip() if metadata else "조회수 0회" date = metadata.find_all("span")[1].text.strip() if metadata else "날짜 없음" # 각 영상의 URL 가져오기 video_url = video.select_one("#video-title").get("href", "") full_url = f"https://www.youtube.com{video_url}" print(title, views, date, full_url) ws.append([i, title, views, date, full_url]) # 브라우저 종료 browser.quit() # 엑셀 파일 저장 wb.save(f"{keyword}_유튜브_검색결과.xlsx")
from typing import List from fastapi import FastAPI, Body, HTTPException, Depends from pydantic import BaseModel from sqlalchemy.orm import Session from database.orm import ToDo from database.connection import get_db from database.repository import get_todos from schema.response import ListToDoResponse, ToDoSchema app = FastAPI() @app.get("/") def heath_check_handler(): return {"ping": "pong"} todo_data = { 1: { "id": 1, "contents": "실전! FastAPI 섹션 0 수강", "is_done": True, }, 2: { "id": 2, "contents": "실전! FastAPI 섹션 1 수강", "is_done": False, }, 3: { "id": 3, "contents": "실전! FastAPI 섹션 2 수강", "is_done": False, }, } @app.get("/todos", status_code=200) def get_todos_handler( order: str | None = None, session: Session = Depends(get_db), ) -> ListToDoResponse: todos: List[ToDo] = get_todos(session=session) if order and order == "DESC": return ListToDoResponse( todos=[ToDoSchema.from_orm(todo) for todo in todos[::-1]] ) return ListToDoResponse( todos=[ToDoSchema.from_orm(todo) for todo in todos] ) @app.get("/todos/{todo_id}", status_code=200) def get_todo_handler(todo_id: int): todo = todo_data.get(todo_id) if todo: return todo raise HTTPException(status_code=404, detail="ToDo Not Found") class CreateToDoRequest(BaseModel): id: int contents: str is_done: bool @app.post("/todos", status_code=201) def create_todo_handler(request: CreateToDoRequest): todo_data[request.id] = request.dict() return todo_data[request.id] @app.patch("/todos/{todo_id}", status_code=200) def update_todo_handler( todo_id: int, is_done: bool = Body(..., embed=True) ): todo = todo_data.get(todo_id) if todo: todo["is_done"] = is_done return todo raise HTTPException(status_code=404, detail="ToDo Not Found") @app.delete("/todos/{todo_id}") def delete_todo_handler(todo_id: int): todo = todo_data.pop(todo_id, None) if todo: return raise HTTPException(status_code=404, detail="ToDo Not Found") from typing import List from pydantic import BaseModel class ToDoSchema(BaseModel): id: int contents: str is_done: bool class Config: orm_mode = True class ListToDoResponse(BaseModel): todos: List[ToDoSchema] from typing import List from sqlalchemy import select from sqlalchemy.orm import Session from database.orm import ToDo def get_todos(session: Session) -> List[ToDo]: return list(session.scalars(select(ToDo))) from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker DATABASE_URL = "mysql+pymysql://root:todos@127.0.0.1:3306/todos" engine = create_engine(DATABASE_URL, echo=True) SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=engine) def get_db(): session = SessionFactory() try: yield session finally: session.close() from sqlalchemy import Boolean, Column, Integer, String from sqlalchemy.orm import declarative_base Base = declarative_base() class ToDo(Base): __tablename__ = 'todo' id = Column(Integer, primary_key=True, index=True) contents = Column(String(256), nullable=False) is_done = Column(Boolean, nullable=False) def __repr__(self): return f"ToDo(id={self.id}, contents={self.contents}, is_done={self.is_done})" 에러가 납니다. 파이썬 콘솔 <input>:1: PydanticDeprecatedSince20: The from_orm method is deprecated; from schema.response import ToDoSchema from datagbase.orm import ToDo Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm 2023.3.2\plugins\python\helpers\pydev\pydevconsole.py", line 364, in runcode coro = func() ^^^^^^ File "<input>", line 1, in <module> File "C:\Program Files\JetBrains\PyCharm 2023.3.2\plugins\python\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in do_import module = self._system_import(name, args, *kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ModuleNotFoundError: No module named 'datagbase' from database.orm import ToDo todo = ToDo(id=100, contents="test", is_done=True) ToDoSchema.from_orm(todo) <input>:1: PydanticDeprecatedSince20: The from_orm method is deprecated; set model_config['from_attributes']=True and use model_validate instead. Deprecated in Pydantic V2.0 to be removed in V3.0. See Pydantic V2 Migration Guide at https://errors.pydantic.dev/2.5/migration/ Traceback (most recent call last): File "C:\Program Files\JetBrains\PyCharm 2023.3.2\plugins\python\helpers\pydev\pydevconsole.py", line 364, in runcode coro = func() ^^^^^^ File "<input>", line 1, in <module> File "C:\Users\manag\pyProject\todos\Lib\site-packages\typing_extensions.py", line 2499, in wrapper return arg(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\pydantic\main.py", line 1126, in from_orm raise PydanticUserError( pydantic.errors.PydanticUserError: You must set the config attribute from_attributes=True to use from_orm http://localhost:8000/docs#/default/get_todos_handler_todos_get 접속시 터미널 INFO: 127.0.0.1:56312 - "GET /docs HTTP/1.1" 200 OK INFO: 127.0.0.1:56312 - "GET /openapi.json HTTP/1.1" 200 OK 2024-01-23 16:06:15,108 INFO sqlalchemy.engine.Engine BEGIN (implicit) 2024-01-23 16:06:15,109 INFO sqlalchemy.engine.Engine SELECT todo.id, todo.contents, todo.is_done FROM todo 2024-01-23 16:06:15,109 INFO sqlalchemy.engine.Engine [cached since 826.5s ago] {} 2024-01-23 16:06:15,113 INFO sqlalchemy.engine.Engine ROLLBACK INFO: 127.0.0.1:56312 - "GET /todos HTTP/1.1" 500 Internal Server Error ERROR: Exception in ASGI application Traceback (most recent call last): File "C:\Users\manag\pyProject\todos\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 404, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in call return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\applications.py", line 1054, in call await super().__call__(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\applications.py", line 123, in call await self.middleware_stack(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\errors.py", line 186, in call raise exc File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\errors.py", line 164, in call await self.app(scope, receive, _send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app raise exc File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 762, in call await self.middleware_stack(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 782, in app await route.handle(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 297, in handle await self.app(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 77, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 64, in wrapped_app raise exc File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_app await app(scope, receive, sender) File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 72, in app response = await func(request) ^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 299, in app raise e File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 294, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 193, in run_endpoint_function return await run_in_threadpool(dependant.call, **values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\concurrency.py", line 40, in run_in_threadpool return await anyio.to_thread.run_sync(func, *args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\anyio\to_thread.py", line 56, in run_sync return await get_async_backend().run_sync_in_worker_thread( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\anyio\_backends\_asyncio.py", line 2134, in run_sync_in_worker_thread return await future ^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\anyio\_backends\_asyncio.py", line 851, in run result = context.run(func, *args) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\src\main.py", line 48, in get_todos_handler todos=[ToDoSchema.from_orm(todo) for todo in todos] ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\typing_extensions.py", line 2499, in wrapper return arg(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^ File "C:\Users\manag\pyProject\todos\Lib\site-packages\pydantic\main.py", line 1126, in from_orm raise PydanticUserError( pydantic.errors.PydanticUserError: You must set the config attribute from_attributes=True to use from_orm
= ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 이런질문을 해도될지 모르겠습니다만. 타임리프 기본 강의중에 어떠한 리스트를 테스트 하기 위해서 addUsers라는 메소드로 리스트를 만들어서 model에 넣어 사용하는데요. 저같은경우라면 보통 더미?를 만들때는 private List<User> createUserList() { List<User> list = new ArrayList<>(); list.add(new User("UserA",10)); list.add(new User("UserB",20)); list.add(new User("UserC",30)); return list; } 이런식으로 만들어서 데이터를 전달하는데 영한님은 private void addUsers(Model model) { List<User> list = new ArrayList<>(); list.add(new User("UserA",10)); list.add(new User("UserB",20)); list.add(new User("UserC",30)); model.addAttribute("users", list); } 이런식으로 메소드에서 리턴하는것이 아닌 모델을 받아 처리하도록 구현하셨더라구요. 어떠한 장점이 있어서 이런식으로 구현하신건가요? 아니면 그냥 스타일의 차이일까요 ?