안녕하세요, 권철민 강사님. FastAPI로 실제 서비스를 운영 중인 주니어 개발자입니다. EmailStr 이나 max_length=40 같은 경우, 프론트엔드에서 입력을 제한하더라도 백엔드에서 예외 처리를 한다고 가정할 때, Pydantic의 검증 오류는 모두 422 에러로 반환됩니다. 이 경우, 클라이언트에서 특정 오류(예: 이메일 형식 오류, 최대 길이 초과 등)를 구분하기 어려운 문제가 있습니다. 클라이언트에서 특정 오류에 대해 모달을 띄우는 등의 처리가 필요할 때, Pydantic 검증 대신 비즈니스 로직에서 200 응답을 반환하고, 약속된 에러 코드를 통해 오류를 구분하는 방식이 적절할까요? 정답은 없지만 어떻게 처리하는게 맞을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요. - 먼저 유사한 질문이 있었는지 검색해보세요 - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님. 안녕하세요. 현재FAST_API를 구성하여 uvicorn app.main:app --reload --host 0.0.0.0 --port 8010 위와 같이 로컬서버를 열었습니다. 사내에서 프론트엔드쪽에서 제 서버로 접속을 시도하는데 공용 Wifi를 쓰고 있어서 IP주소만 192.168.0.x:8010으로 프론트엔드쪽에 전달을 했습니다. 하지만 프론트쪽에서는 제 로컬 서버로 접속이 안되고 계속 로딩만 되고 있습니다. 로컬에서 swagger를 열어서 서버테스트를 했을 때에는 전혀 문제가 없었는데 현재 문제는 공용 라우터 아래 무선 랜을 잡아서 쓰고 있는 두 컴퓨터간의 통신이 안되고 있습니다... 하지만 프론트에서 index.html을 5500포트로 열어서 공유한 것을 잘 열립니다. 정말 gpt, claude를 쪼아서 물어봤는데도 계속 똑같은 이야기, 방화벽 설정에서 인바운드 포트설정이야기만 합니다 혹시 어떤 문제인지 좀.. 도와주십시요. 내일 대표님 앞에서 프로젝트 시연을 해야하는데 지금 ...큰 문제입니다.
안녕하세요! 강사님! 처음으로 fastAPI를 접하는데 강사님 수업을 통해 배움을 얻어 가게되어 우선 감사 말씀드립니다. DB Connect 세팅 시 create_engine 함수를 이용하여 엔진 객체만 생성하여 DB에 연결을 하는데 다른 참고 자료들과 비교하면 모델 클래스 생성은 ORM을 사용하지 않으니 생성을 할필요가 없을테고, sessionmaker 함수를 통한 세션 클래스는 따로 생성하지 않더군요. 혹시 sessionmake를 통해 생성된 세션 클래스의 역할과 지금 강의에서는 사용하지 않은 이유를 알 수 있을까요?
안녕하세요 저희는 기존에 react + node를 사용해서 개발을 하고 있었는데요 python으로 변경하려는 상황입니다. 강의를 보면서 jinja라는 것을 알게 되었는데요. 찾아보니까 react를 사용하면 jinja를 사용하지 않는다고 하더라구요 react를 사용하는게 맞을까요 아니면 jinja를 사용하는게 맞을까요 보통 어떻게 많이 사용하나요?
- 강의 영상에 대한 질문이 있으시면, 상세히 문의를 작성해주시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 (이외의 문의는 평생 강의이므로 양해를 부탁드립니다.) - 강의 답변이 도움이 안되셨다면, dream@fun-coding.org 로 메일 주시면 재검토하겠습니다. - 괜찮으시면 질문전에 챗GPT 와 구글 검색을 꼭 활용해보세요~ - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요. 이전에 수업에 관한 코드는 pdf파일로 공유 받았는데 실전 프로젝트 코드는 어디서 받을수있나요????
학습을 하다보니 FastAPI 문서에서 autoflush=False을 권장한다는 것을 알게 되었습니다. 헌데 이번 프로젝트에서는 해당 설정을 사용하지 않은 것으로 알고 있습니다. 기본 설정이 autocommit=false, autoflush=true로 알고 있는데, 해당 옵션을 그대로 이번 강의 프로젝트에서 사용된 것으로 알고 있습니다. 혹시 autoflush=False를 적용해야 하는 경우가 있는 것인지, 다른 이유가 있는 것인지를 알고 싶어 질문을 드리게 되었습니다.
- 강의 영상에 대한 질문이 있으시면, 상세히 문의를 작성해주시면, 주말/휴일 제외, 2~3일 내에 답변드립니다 (이외의 문의는 평생 강의이므로 양해를 부탁드립니다.) - 강의 답변이 도움이 안되셨다면, dream@fun-coding.org 로 메일 주시면 재검토하겠습니다. - 괜찮으시면 질문전에 챗GPT 와 구글 검색을 꼭 활용해보세요~ - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 제공하신 강의자료는 다운받아서 코드로 있는데 섹션9 FastAPI 리퀘스트(Request) 와 예외처리 FastAPI 예외처리와 HTTPException 클래스 4초에 보시면 왼쪽 화면에 08_exceptionhandling.md 와 같이 설명하는 파일은 강의자료에 없는데 어떻게 보는건가요?
sqlalchemy 강의 내용에 보면 connection pool에 대한 이론과 실습 설명이 있었습니다. 헌데 비동기를 이용하여 하나의 connection pool만 사용하는 것으로 실습과 코드가 마무리 되더군요. 제가 생각할 때, connection pool을 제대로 사용하기 위해서는 사용 가능한 모든 pool 을 병렬로 처리해야 하지 않을까란 생각이 들었습니다. 하지만, 비동기 병렬 처리를 하게 되면 트랜잭션 락으로 인해 race condition 상태 등의 더 복잡한 문제가 발생할거 같은데, 사용하는게 맞는가란 생각도 들었습니다. 이에 아래와 같은 질문을 드리려 합니다. 1. 실무에서 사용시 connection pool로 할당한 수만큼 비동기 병렬로 처리를 하는게 맞는지요? 2. 만약 맞다면, 트랜잭션 락은 어떻게 구현하여 사용하는게 일반적인지요? 혹은, 예제와 달리, fastapi에서는 요청이 들어오는대로 각각의 connection pool에 할당을 하고 10개가 넘는 경우는 대기를 하다 반환된 pool에 배치되는건지요?
학습 중에 fastapi는 get과 post만 지원하기 때문에 별도로 미들웨어를 이용해 put, patch, delete를 구현해야 한다고 이해를 하게 되었습니다. 헌데 다른 학습 웹 문서나, gpt에게 여러 요청을 통해 확인을 하는 과정에서 app. 혹은 @router. 을 사용해 이미 지원되는 put, patch, delete를 사용할 수 있다고 설명을 하는 것을 확인할 수 있었습니다. 제가 학습 영상에 대해 이해를 잘못하고 있는 것인지 혹 놓친게 있는지 알고 싶어 질문을 드립니다.
(강의 색션 7_8 - 14:30) 안녕하세요 선생님. 좋은 강의 만들어 공유해 주셔서 진심으로 감사드립니다. Pydantic 모델 초기화 과정에서 아래의 코드처럼 Optional 이 설정하지 않으면 Swagger UI 에서 입력 값이 null 이여서 엔티티 타입 불일치로 422 에러가 발생합니다. 또한, parse_user_form에서 Optional 체크를 하고 Item에서는 별도로 설정하지 않으면 같은 에러가 발생하더군요. Q) FormData 부분은 Optional 체크를 하지 않아도 되고, pydantic model에서는 반드시 Optional 체크를 해야지만 문제 없이 정상 동작하는 이유에 대한 보충 설명 부탁드려도 될까요? 주석한 부분이 기존 코드입니다. 주석한 부분으로 코드를 변경하면 에러가 발생합니다. class Item(BaseModel): name: str = Field(..., min_length=2, max_length=50) # description: str = Field(None, max_length=500) description: Optional[str] = Field(None, max_length=500) price: float = Field(..., ge=0) # tax: float = None tax: Optional[float] = None @model_validator(mode='after') def tax_must_be_less_than_price(cls, values): price = values.price tax = values.tax # if tax > price: # tax가 NoneType이라 에러가 남. if tax is not None and tax > price: raise ValueError("Tax must be less then price") return values 감사합니다.
현재 "신규 Blog 글 생성하기 - 01" 강의를 수강 중입니다. 강의 중에, 쿼리의 commit() 실패시 rollback()이 자동으로 수행된다고 말씀 하셨는데, 코드상에 with를 사용한 것도 아니고, context_get_conn()의 에러 발생시 rollback() 호출도 하지 않는데 rollback()이 자동으로 수행되는게 맞는가요? close를 하면 자동으로 rollback() 된다고 하시는데 close는 성공시에도 호출하는 것으로 코드를 이해하고 있습니다. insert, update의 성공시에도 rollback()이 되는게 맞는지도 알고 싶습니다.
Path(), Query(), Form() 모두 Depends에 사용이 가능할까요? 물론 BaseModel에는 인자와 동일한 이름의 클래스 변수가 정의되어 있다는 가정에서 의미합니다. form의 일부 인자들만으로 구성되게 사용이 가능할까요? 함수의 입력 인자로 정의된 값이, Depends에서도 중복으로 사용이 가능한가요?