inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

deploy.yml이 workflow에서 작동되지 않는 이유

미해결

AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)

섹션 4의 "배포용 Workflow 만들기"를 수강 중 deploy.yml이 진행되지 않습니다.. test.yml은 진행이 잘 됩니다 뭐가 문제일까요? .yml 파일 작성할 때 들여쓰기가 상관이 있나요? 아래는 작성한 deploy.yml 파일입니다. 추가로 한 탭씩 들여쓰기 하지 않고 중간 중간에 스페이스 두 번으로 들여쓰기 하는게 있는데, 규칙인가요? - (대시)기호 이것도 규칙인가요? 안 적으면 실행이 안되는건가요? name: deploy on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - name: Set up SSH run: | mkdir -p ~/.ssh/ echo "${{secrets.SSH_PRIVATE_KEY}}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa - name: Set up known hosts run: | echo "${{secrets.SSH_KNOWN_HOSTS}}" >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts - name: SSH and deploy run: | ssh ${{secrets.SSH_USERNAME}}@${{secrets.SSH_PUBLIC_IP}} " cd express git pull || exit 1 npm install || exit 1 npm run build || exit 1 sudo pkill node || exit 1 sudo npm run start & || exit 1 sudo npm run start & npx wait-on http://localhost exit "

  • aws
  • docker
  • ci/cd
  • aws-ecs
송민철 댓글 2 좋아요 0 조회수 547

내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다

미해결

처음 만난 리액트(React)

기존 생성했던 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 에러가 발생합니다. 어떻게 조치해야할까요 ??

  • HTML/CSS
  • javascript
  • react
댓글 2 좋아요 1 조회수 1724

에러 질문있습니다

해결됨

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

이 부분 에러 어떻게 고치나요? export const firebaseApp = initializeApp(firebaseConfig, "appname") 하니까 위에 오류는 안뜨는데 이 방법이 맞나요? 저 방법으로 수정하면 이 오류가 뜹니다 ㅠ

  • react
  • node.js
  • seo
  • graphql
  • next.js
yoonseong 댓글 1 좋아요 0 조회수 170

H2 데이터 베이스 설치 오류

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 섹션 1. 프로젝트 환경설정 H2 데이터 베이스설치 관련 질문사항 제가 원래 H2는 제대로 동작 됐고 다음 JPA와 DB 설정을 진행하다 오류가 생겨 고민하다 아예 전부 지우고 다시 시행하는 과정에서 이번에는 H2데이터 베이스를 설치하면서 해결이 되지 않아서 질문합니다. (아마 제 생각에는 여러 번 깔았다가 지웠다하면서 뭔가 오류가 생긴 것 같습니다.) 1.cmd 창에 입력하면 창이 새롭게 뜨지 않습니다. 2.cmd (관리자 권한)이어도 마찬가지로 h2창이 뜨지 않습니다. 3.h2 console 을 누르면 아무런 반응이 없습니다. 어떻게 해야할까요? 아니면 흔적이 남지 않게 완전히 지우는 방법이라도 알려주세요... 버전을 다르게 깔아봤는데도 마찬가지입니다.

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
스핑 댓글 1 좋아요 1 조회수 189

일대다 조인 질문

해결됨

실전! Querydsl

안녕하세요 강사님! 프로젝트 진행중에 이해가 되지 않은 점이 생겨 질문드립니다..! @Test @DisplayName("유저가 반품, 취소한 상품들을 조회할 수 있다. ") public void findDistinctWithDetailsByMemberId() { // given Member member = Member.builder().build(); Order order = Order.builder() .member(member) .orderNo("123") .build(); Product product1 = Product.builder().build(); Product product2 = Product.builder().build(); Product product3 = Product.builder().build(); OrderDetail orderDetail1 = OrderDetail.builder() .order(order) .product(product1) .statusCode(StatusCodeType.RETURN_COMPLETED.getCode()) .build(); OrderDetail orderDetail2 = OrderDetail.builder() .order(order) .product(product2) .statusCode(StatusCodeType.ORDER_CANCEL.getCode()) .build(); OrderDetail orderDetail3 = OrderDetail.builder() .order(order) .product(product3) .statusCode(StatusCodeType.DELIVERY_DELAY.getCode()) .build(); order.addOrderDetail(orderDetail1); order.addOrderDetail(orderDetail2); order.addOrderDetail(orderDetail3); productRepository.saveAll(List.of(product1, product2, product3)); memberRepository.save(member); orderRepository.save(order); // when List<Order> orders = orderRepository.findDistinctWithDetailsByMemberId(member.getId()); // then assertThat(orders).hasSize(1) .extracting("orderNo") .contains("123"); List<OrderDetail> orderDetails = orders.get(0).getOrderDetails(); assertThat(orderDetails).hasSize(2); } @Override public List<Order> findDistinctWithDetailsByMemberId(Long memberId) { BooleanExpression statusCondition = orderDetail.statusCode.eq(ORDER_CANCEL.getCode()); BooleanExpression orCondition = statusCondition.or(orderDetail.statusCode.eq(RETURN_COMPLETED.getCode())); return queryFactory .selectDistinct(order) .from(order) .join(order.orderDetails, orderDetail).fetchJoin() .where( order.member.id.eq(memberId), orCondition ) .fetch(); } 다음과 같이 테스트를 작성했습니다. memberId와 ORDER_CANCEL,RETURN_COMPLETED 상태로 걸러서 최종적으로 원하는 orderDetail이 2개 나올 것으로 예상했습니다. 그러나 예상과 달리 3개의 orderDetail이 나왔습니다. em.flush(); em.clear(); // when List<Order> orders = orderRepository.findDistinctWithDetailsByMemberId(member.getId()); when절 이전에 강제로 영속성 컨텍스트를 플러시하고 클리어 해주니 예상대로 orderDetail이 2개가 반환되었습니다. 영속성 컨텍스트에서 어떠한 문제가 있는 것 같은데 감도 안잡혀서 이렇게 질문 드립니다...ㅠㅠ 감사합니다. 아래는 JPA가 날린 쿼리입니다..! select distinct o1_0.order_id, o1_0.address_id, o1_0.created_at, o1_0.deleted_at, o1_0.member_id, od1_0.order_id, od1_0.order_detail_id, od1_0.cancelled_at, od1_0.coupon_id, od1_0.created_at, od1_0.deleted_at, od1_0.delivered_date, od1_0.order_no, od1_0.payment_key, od1_0.price, od1_0.product_id, od1_0.quantity, od1_0.reason, od1_0.status_code, od1_0.updated_at, o1_0.order_name, o1_0.order_no, o1_0.real_price, o1_0.total_price, o1_0.total_used_coupon_price, o1_0.updated_at, o1_0.used_point from orders o1_0 join order_detail od1_0 on o1_0.order_id=od1_0.order_id where o1_0.member_id=? and ( od1_0.status_code=? or od1_0.status_code=? )

  • java
  • jpa
모깅 댓글 1 좋아요 0 조회수 295

mysql 연동관련

미해결

스프링 핵심 원리 - 기본편

안녕하세요 옛날에 했던 프로젝트 db를 mysql로 바꾸는 중에 에러가 났습니다. db connection까지도 완료 했는데 에러가 뜨네요 무슨 문제일까요....

  • spring
105gh 댓글 1 좋아요 0 조회수 400

Spring 에서 MVC 간 객체를 넘겨주는 방법에 대한 질문

미해결

스프링 핵심 원리 - 기본편

강의하셨던 코드를 쭉 훑어봤습니다. 강의에서 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" 등으로 검색해봐도 원하는 정보가 나오지 않네요... 또한, 저 내용들이 김영한님 강의에 있는 내용이라고 하고, 더 강의를 들으면 알 수 있는 내용이라고 한다면, 검색 키워드와 함께 김영한님 강의 어느부분에서 다루는지도 알려주셨으면 합니다. 일단 강의는 모두 구매한 상태라 들을 수 있습니다..

  • spring
  • 객체지향
mjnsoo c 댓글 1 좋아요 0 조회수 218

[4장]Vitis 부분 질문

해결됨

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

xsa파일을 올리고 next를 누르면 이 그림 처럼 안뜨고 빈파일로 보이는데 어떤 문제가 있는걸까요..? 1장에서 시계 만들 때는 아무 문제 없었는데..

  • fpga
  • 임베디드
어릿광대 댓글 1 좋아요 2 조회수 276

배열에 관한 질문입니다!

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

배열 구조개선 값 입력 코드에 관한 질문입니다! 저 보라색 박스와 빨간색 박스 코드가 이중으로 두개가 겹치니까 이렇게 코드를 쓰고 출력해도 똑같나요??

  • java
  • 객체지향
서연 댓글 1 좋아요 0 조회수 212

모든 Provider의 인스턴스가 앱이 실행되면 무조건 다 생기나요?

미해결

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

안녕하세요! provider적용하기 강의 듣고 있습니다. 궁금한게, 프로젝트를 진행할 수 록 여러개의 provider를 생성하게 되는데 그럼 이 모든 provider의 인스턴스가 사용하지 않아도 무조건 앱 실행시 다 인스턴스화 되어 메모리에 올라가게 되나요? 제가 객체지향관련 개념이 플러터하면서 처음이라 조금 헷갈립니다. 감사합니다.

  • flutter
  • 하이브리드-앱
kmgkxm 댓글 1 좋아요 0 조회수 239

Kotlin에서 필드 정의할때 질문드립니다.

해결됨

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (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 } 코틀린에서 필드를 기본생성자로 하는 방식과 클래스 본문으로 하는 방식으로의 차이가 궁금해서 질문드립니다! 감사합니다

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩토링
조재연 댓글 1 좋아요 2 조회수 277

GA4 태그 구성

미해결

실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(26년 Update)

안녕하세요~ 태그 관리자에서 태그 등록하려고 하는데 웹 속성 ID에 G-******* 코드 입력 시 '추적 ID는 UA-XXXXX-X 형식이어야 합니다.'라는 문구가 뜨며 저장 자체가 안되는데 어떻게 해야 될까욥?

  • Google-Analytics
  • Google-Tag-Manager
  • 데이터-리터러시
  • GA4
주이진 댓글 1 좋아요 0 조회수 373

HandlerMethodArgumentResolver의 resolveArgument()의 호출 위치

해결됨

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] RequestMappingHandlerAdapter에서 컨트롤러의 파라메터에서 필요로 하는 객체를 반환받아서 ArgumentResolver의 supportsParameter()를 통하여 반환받은 객체가 있는지 검증 후 있으면 ArgumentResolver의 resolveArgument()를 통하여 컨트롤러를 호출해준다고 이해했습니다. 그런데 핸들러 어댑터 로직을 살펴보니 supportsParameter()를 통해 검증해주는 로직은 있지만 resolveArgument()를 호출해주는 로직이 존재하지 않는데 어디서 resolveArgument()를 통하여 컨트롤러를 호출할 수 있는 건지 resolveArgument()의 호출 위치가 궁금합니다 !

  • spring
  • mvc
경민 댓글 1 좋아요 2 조회수 296

EK07 암호

미해결

네트워크 패킷 분석 입문 및 악성코드 샘플 분석

EK07 압축파일을 풀려고 하니 암호창이 뜨네요. 암호가 뭔가요?

  • 악성코드
  • 네트워크
댓글 2 좋아요 0 조회수 321

중첩 라우트

미해결

따라하며 배우는 리액트 A-Z[19버전 반영]

그럼 중첩 라우트는 인클루드 개념 인거겠네요?

  • react
  • redux
  • tdd
  • typescript
  • next.js
  • 소프트웨어-테스트
악보-Designer Park 댓글 1 좋아요 0 조회수 194

kui 설치

미해결

그림으로 배우는 쿠버네티스(v1.35)

질문 답변을 제공하지만, 강의 비용에는 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를 설치하려는데 설치명령어를 알수 있을까요?

  • docker
  • kubernetes
tfybjh 댓글 1 좋아요 0 조회수 232

유튜브 크롤링

미해결

[신규 개정판] 이것이 진짜 크롤링이다 - 실전편 (인공지능 수익화)

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 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")

  • python
  • 웹-크롤링
sek95041143 댓글 2 좋아요 0 조회수 649

(실습) ORM 적용 - HTTP Response 처리

미해결

실전! FastAPI 입문

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

  • python
  • 리팩토링
  • orm
  • FastAPI
  • pytest
네오스카이 댓글 2 좋아요 0 조회수 1276

타임리프 기본기능 강의중에 궁금한것이 있습니다.

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

= ========================================= [질문 템플릿] 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); } 이런식으로 메소드에서 리턴하는것이 아닌 모델을 받아 처리하도록 구현하셨더라구요. 어떠한 장점이 있어서 이런식으로 구현하신건가요? 아니면 그냥 스타일의 차이일까요 ?

  • spring
  • mvc
Super Novice 댓글 1 좋아요 1 조회수 212

스프링 시큐리티6 커스텀 로그인 오류

미해결

스프링 시큐리티 커스텀 로그인 오류가 발생하는데 코드를 잘 작성한 것 같은데 로그인이 안되는 오류가 생겨 오류 해결에 어려움을 겪고 있습니다.... 도와주세요 의존성 thymeleaf mysql driver spring security spring web jpa config package com.chatp.security.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; @Configuration // 이 클래스는 config용 이라는 것을 나타냄 @EnableWebSecurity // 시큐리티라는 것을 나타내기 위해 작성 public class SecurityConfig { // 비밀번호 암호화 해싱 @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } // 스프링 시큐리티 커스텀 config @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{ // 특정한 경로일 때 스프링 시큐리티 인증 권한을 받도록 함 http .authorizeHttpRequests((auth) -> auth .requestMatchers("/", "/login", "/sign", "/signProc").permitAll() .requestMatchers("/admin").hasRole("ADMIN") .requestMatchers("/my/**").hasAnyRole("ADMIN", "USER") .anyRequest().authenticated() ); http .formLogin((auth) -> auth .loginPage("/login") // 커스텀 로그인 페이지 설정! .defaultSuccessUrl("/") // 로그인 성공 티폴트 redirect 경로 .permitAll() ); http .csrf((auth) -> auth.disable()); return http.build(); } } 로그인페이지 경로 ../resources/templates/Login.html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org" > <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h2>로그인</h2> <form th:action="@{/login}" method="post"> <label for="username">아이디:</label> <input type="text" id="username" name="username" required/> <br/> <label for="password">비밀번호:</label> <input type="password" id="password" name="password" required/> <br/> <button type="submit">로그인</button> </form> </body> </html> 컨트롤러 package com.chatp.security.controller; import com.chatp.security.dto.SignDTO; import com.chatp.security.service.SignService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @Controller public class HomeController { @Autowired private SignService signService; @GetMapping("/") public String HomePage(){ return "/Home"; } // 로그인 @GetMapping("/login") public String LoginPage(){ return "/Login"; } // 회원가입 @GetMapping("/sign") public String signUpPage(){ return "/SignUp"; } // 회원가입 처리 @PostMapping("/signProc") public String signProc(SignDTO signDTO){ // username 얻기 + 회원가입 처리 진행 System.out.println(signDTO.getUsername()); signService.signProcess(signDTO); // 회원가입 성공 시 로그인 페이지로 리다이렉트 return "redirect:/login"; } }

밈닌 댓글 1 좋아요 0 조회수 958

인기 태그

인프런 TOP Writers

주간 인기글