묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결AWS 배포 완벽가이드 (feat. Lightsail, Docker, ECS)
deploy.yml이 workflow에서 작동되지 않는 이유
섹션 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 "
-
미해결처음 만난 리액트(React)
내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다
기존 생성했던 npx create-react-app my-app 명령어로 생성했던 my-app 실제 경로로 들어가서 폴더 삭제하고npm uninstall -g create-react-appnpm install -g create-react-appnpx create-react-app my-app수행 시 C:\Program Files\nodejs>npx create-react-app my-appNeed to install the following packages:create-react-app@5.0.1Ok to proceed? (y) ynpm 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 에러가 발생합니다.어떻게 조치해야할까요 ??
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
에러 질문있습니다
이 부분 에러 어떻게 고치나요?export const firebaseApp = initializeApp(firebaseConfig, "appname") 하니까 위에 오류는 안뜨는데 이 방법이 맞나요?저 방법으로 수정하면이 오류가 뜹니다 ㅠ
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
H2 데이터 베이스 설치 오류
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발섹션 1. 프로젝트 환경설정H2 데이터 베이스설치 관련 질문사항 제가 원래 H2는 제대로 동작 됐고 다음 JPA와 DB 설정을 진행하다 오류가 생겨 고민하다 아예 전부 지우고 다시 시행하는 과정에서 이번에는 H2데이터 베이스를 설치하면서 해결이 되지 않아서 질문합니다. (아마 제 생각에는 여러 번 깔았다가 지웠다하면서 뭔가 오류가 생긴 것 같습니다.)1.cmd 창에 입력하면 창이 새롭게 뜨지 않습니다.2.cmd (관리자 권한)이어도 마찬가지로 h2창이 뜨지 않습니다.3.h2 console 을 누르면 아무런 반응이 없습니다. 어떻게 해야할까요? 아니면 흔적이 남지 않게 완전히 지우는 방법이라도 알려주세요...버전을 다르게 깔아봤는데도 마찬가지입니다.
-
해결됨실전! 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=? )
-
미해결스프링 핵심 원리 - 기본편
mysql 연동관련
안녕하세요 옛날에 했던 프로젝트 db를 mysql로 바꾸는 중에 에러가 났습니다.db connection까지도 완료 했는데 에러가 뜨네요무슨 문제일까요....
-
미해결스프링 핵심 원리 - 기본편
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"등으로 검색해봐도 원하는 정보가 나오지 않네요...또한, 저 내용들이 김영한님 강의에 있는 내용이라고 하고, 더 강의를 들으면 알 수 있는 내용이라고 한다면, 검색 키워드와 함께 김영한님 강의 어느부분에서 다루는지도 알려주셨으면 합니다. 일단 강의는 모두 구매한 상태라 들을 수 있습니다..
-
해결됨설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
[4장]Vitis 부분 질문
xsa파일을 올리고 next를 누르면 이 그림 처럼 안뜨고 빈파일로 보이는데 어떤 문제가 있는걸까요..?1장에서 시계 만들 때는 아무 문제 없었는데..
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
배열에 관한 질문입니다!
배열 구조개선 값 입력 코드에 관한 질문입니다!저 보라색 박스와 빨간색 박스 코드가 이중으로 두개가 겹치니까이렇게 코드를 쓰고 출력해도 똑같나요??
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
모든 Provider의 인스턴스가 앱이 실행되면 무조건 다 생기나요?
안녕하세요! provider적용하기 강의 듣고 있습니다. 궁금한게, 프로젝트를 진행할 수 록 여러개의 provider를 생성하게 되는데 그럼 이 모든 provider의 인스턴스가 사용하지 않아도 무조건 앱 실행시 다 인스턴스화 되어 메모리에 올라가게 되나요? 제가 객체지향관련 개념이 플러터하면서 처음이라 조금 헷갈립니다. 감사합니다.
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
Kotlin에서 필드 정의할때 질문드립니다.
안녕하세요. 강의 다시 보기 하다가 질문이 생겨서 글 남깁니다. @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 } 코틀린에서 필드를 기본생성자로 하는 방식과 클래스 본문으로 하는 방식으로의 차이가 궁금해서 질문드립니다! 감사합니다
-
미해결실무자를 위한 구글애널리틱스(GA4+GTM) 활용법(25년 Update)
GA4 태그 구성
안녕하세요~ 태그 관리자에서 태그 등록하려고 하는데 웹 속성 ID에 G-******* 코드 입력 시 '추적 ID는 UA-XXXXX-X 형식이어야 합니다.'라는 문구가 뜨며 저장 자체가 안되는데 어떻게 해야 될까욥?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
HandlerMethodArgumentResolver의 resolveArgument()의 호출 위치
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]RequestMappingHandlerAdapter에서 컨트롤러의 파라메터에서 필요로 하는 객체를 반환받아서 ArgumentResolver의 supportsParameter()를 통하여 반환받은 객체가 있는지 검증 후 있으면 ArgumentResolver의 resolveArgument()를 통하여 컨트롤러를 호출해준다고 이해했습니다. 그런데 핸들러 어댑터 로직을 살펴보니 supportsParameter()를 통해 검증해주는 로직은 있지만 resolveArgument()를 호출해주는 로직이 존재하지 않는데 어디서 resolveArgument()를 통하여 컨트롤러를 호출할 수 있는 건지 resolveArgument()의 호출 위치가 궁금합니다 !
-
미해결네트워크 패킷 분석 입문 및 악성코드 샘플 분석
EK07 암호
EK07 압축파일을 풀려고 하니 암호창이 뜨네요. 암호가 뭔가요?
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
중첩 라우트
그럼 중첩 라우트는 인클루드 개념 인거겠네요?
-
미해결그림으로 배우는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}
kui 설치
질문 답변을 제공하지만, 강의 비용에는 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")
-
미해결실전! FastAPI 입문
(실습) ORM 적용 - HTTP Response 처리
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 ToDoSchemafrom datagbase.orm import ToDoTraceback (most recent call last):File "C:\Program Files\JetBrains\PyCharm 2023.3.2\plugins\python\helpers\pydev\pydevconsole.py", line 364, in runcodecoro = 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_importmodule = self._system_import(name, args, *kwargs)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ModuleNotFoundError: No module named 'datagbase'from database.orm import ToDotodo = 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 runcodecoro = func()^^^^^^File "<input>", line 1, in <module>File "C:\Users\manag\pyProject\todos\Lib\site-packages\typing_extensions.py", line 2499, in wrapperreturn arg(*args, **kwargs)^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\pydantic\main.py", line 1126, in from_ormraise 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 OKINFO: 127.0.0.1:56312 - "GET /openapi.json HTTP/1.1" 200 OK2024-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_doneFROM todo2024-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 ROLLBACKINFO: 127.0.0.1:56312 - "GET /todos HTTP/1.1" 500 Internal Server ErrorERROR: Exception in ASGI applicationTraceback (most recent call last):File "C:\Users\manag\pyProject\todos\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 404, in run_asgiresult = await app( # type: ignore[func-returns-value]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in callreturn await self.app(scope, receive, send)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\applications.py", line 1054, in callawait super().__call__(scope, receive, send)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\applications.py", line 123, in callawait self.middleware_stack(scope, receive, send)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\errors.py", line 186, in callraise excFile "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\errors.py", line 164, in callawait self.app(scope, receive, _send)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\middleware\exceptions.py", line 62, in callawait 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_appraise excFile "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_appawait app(scope, receive, sender)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 762, in callawait self.middleware_stack(scope, receive, send)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 782, in appawait route.handle(scope, receive, send)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 297, in handleawait self.app(scope, receive, send)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 77, in appawait 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_appraise excFile "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\_exception_handler.py", line 53, in wrapped_appawait app(scope, receive, sender)File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\routing.py", line 72, in appresponse = await func(request)^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 299, in appraise eFile "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 294, in appraw_response = await run_endpoint_function(^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\fastapi\routing.py", line 193, in run_endpoint_functionreturn await run_in_threadpool(dependant.call, **values)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\starlette\concurrency.py", line 40, in run_in_threadpoolreturn 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_syncreturn 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_threadreturn await future^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\anyio\_backends\_asyncio.py", line 851, in runresult = context.run(func, *args)^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\src\main.py", line 48, in get_todos_handlertodos=[ToDoSchema.from_orm(todo) for todo in todos]^^^^^^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\typing_extensions.py", line 2499, in wrapperreturn arg(*args, **kwargs)^^^^^^^^^^^^^^^^^^^^File "C:\Users\manag\pyProject\todos\Lib\site-packages\pydantic\main.py", line 1126, in from_ormraise PydanticUserError(pydantic.errors.PydanticUserError: You must set the config attribute from_attributes=True to use from_orm
-
해결됨스프링 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); }이런식으로 메소드에서 리턴하는것이 아닌 모델을 받아 처리하도록 구현하셨더라구요.어떠한 장점이 있어서 이런식으로 구현하신건가요? 아니면 그냥 스타일의 차이일까요 ?
-
미해결
스프링 시큐리티6 커스텀 로그인 오류
스프링 시큐리티 커스텀 로그인 오류가 발생하는데 코드를 잘 작성한 것 같은데 로그인이 안되는 오류가 생겨 오류 해결에 어려움을 겪고 있습니다.... 도와주세요 의존성thymeleafmysql driverspring securityspring webjpa configpackage 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"; } }