본문 바로가기

전체 글83

FastAPI 05. 반환 모델과 유사한 모델들 생성하기 반환 모델 작성하기 FastAPI는 기본적으로 사용하는 모델을 추정하여 입출력값을 나타내지만 자동적으로 표현해 주는 기능에만 의존할 수는 없다. 예를 들어 게시판의 글의 목록과 각각의 글을 불러오는 API가 있을 때, 다음과 같이 설계할 수 있다. 게시판 글 목록 : 글 번호, 글 제목, 조회 수, 댓글 수, 작성일 게시판 글 : 글 제목, 글 내용, 조회수, 댓글 수, 댓글 목록, 작성일 이러한 경우 각 API에 맞도록 반환모델을 기록하는것이 개발에 도움이 될 수 있다. FastAPI에서 반환 모델을 명시하는 방법은 크게 2가지이다. 첫 번째는 Python함수 반환값을 나타내듯이 ->를 사용하여 반환 타입을 입력하는 방법이고, 다른 방식은 response_model값을 지정하는 방식이다. @app.po.. 2023. 1. 18.
[Python] 백준 1053 팰린드롬 공장 문제 링크 : https://www.acmicpc.net/problem/1053 1053번: 팰린드롬 공장 팰린드롬이란, 앞에서부터 읽었을 때와, 뒤에서부터 읽었을 때가 같은 문자열이다. 모든 문자열이 팰린드롬이 아니기 때문에 다음과 같은 4가지 연산으로 보통 문자열을 팰린드롬으로 만든다. www.acmicpc.net 1. 접근 방법 어떤 문자열을 팰린드롬으로 만드는데, 사용할 수 있는 연산이 총 4가지가 있어 처음에는 일반적인 백트래킹으로 접근했다. 하지만 과정마다 팰린드롬임을 확인하는 것이 많은 시간이 필요하고, 각 연산을 문자열의 몇 번째 위치에서 적용할지도 고민해야 할 문제였다. 그래서 백트래킹이 아닌 재귀를 활용한 DP로 접근해 보았다. 2. 풀이 코드 🖥python 코드 링크 : https:/.. 2023. 1. 16.
FastAPI 04. 바디의 예시 만들기 OpenAPI를 지원하는 FastAPI를 더 잘 활용하는 방법은 스키마 활용이라고 생각한다. API를 작성하고, 간단하게 설명해 줄 수 있지만, API를 제대로 작성하고 또 제개도 활용학 위해서는 OpenAPI를 따라 스키마를 작성하는 것이 필요하다고 생각한다. 그렇게 한다면 입출력 예시뿐만 아니라 가능한 상태 코드 등을 쉽게 이해할 수 있다. 이는 API 개발뿐만 아니라 테스트나 유지 보수에도 도움 되는 작업이라고 생각한다. FastAPI에서는 이를 달성하기 위해 Pydantic을 사용하는 방법과 FatsAPI에서 제공하는 Body()함수를 사용하는 방법을 제공한다. Pydantic을 사용하는 방법 class Item(BaseModel): id: int name: str description: str .. 2023. 1. 16.
FastAPI 03. 리퀘스트 바디 API 서버에서 사용자 입력을 받기 위하여 경로 매개변수, 퀘리 매개변수도 사용하지만 일반적으로 리퀘스트 바디를 많이 사용할 것이다. 특히 많은 입력이 필요한 경우 매개변수를 활용하여 URL을 조작하는 것보다 JOSN을 활용하여 바디로 통신하는 것이 수월하다. 이전에 리퀘스트 바디는 Pydantic을 사용한다고 하였다. 이번에는 바디를 더욱 다양하게 활용하는 방법을 알아볼것이다. 여러 개의 매개변수, 바디 사용하기 @app.post("/items/{item_id}") async def get_item( *, item_id: int = Path(title="The ID of item to get", ge=0, le=10000), q: str | None = Query(default=None, max_len.. 2023. 1. 10.
FastAPI 02. 경로, 쿼리 매개변수 검증 API를 만들게 되면 경로 매개변수나 쿼리 매개변수 검증이 필요한 경우가 있다. 예를 들어 경로 매개변수가 0 이상 정수값이어야 한다거나, 쿼리 매개변수의 문자열의 길이를 제한하는 등 검증을 한다. FastAPI에서는 Query, Path라는 편리한 방법을 제공한다. 쿼리 파라미터 @app.get("/items/") async def read_item(q: str): return q 우선 다음과 같은 API에서 시작하자, 하나의 쿼리 파라미터 q를 입력받는 경우를 가정했을 때 상황을 구체화 해보자. from fastAPI import FastAPI, Query @app.get("/items/") async def read_item(q: str = Query(defalut=None)): return q 함.. 2023. 1. 6.
FastAPI 01. 첫걸음 FastAPI FastAPI는 다른 Python 웹 프레임워크에 비하여 비교적 최근에 공개되었지만, 많은 관심을 받고 있다. FastAPI의 주요 특징으로는 빠른 속도, 빠른 코드 작성과 적은 버그, 쉽고 간결하며 견고함 등이 있다. 웹과 관련된 부분은 Starlette을, 데이터와 관련된 부분은 Pydantic을 사용한다. 또한 대화형 API 문서로 Swagger UI, ReDoc을 제공한다. FastAPI 첫걸음 from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello, FastAPI"} 기본적인 FastAPI앱 구조는 다음과 같다. FastAPI 클래스를 불러와서 나의 앱 객.. 2023. 1. 4.
[Python] 백준 11689 GCD(n, k) = 1 문제 링크 : https://www.acmicpc.net/problem/ 1. 문제 설명 어떤 수가 주어지면, 그 수의 약수를 구하거나 찾거나 활용해야 한다. 대부분의 경우, 그리고 코딩 테스트에 등장하는 문제는 에라토스테네스의 체를 활용하는 정도인데, 백준에서는 그 이상의 지식이 필요한 문제가 종종 있다. 이 문제도 결론을 먼저 말하자면, 오일러 피 함수를 사용해야 한다. 2. 문제 풀이 풀이 코드 : Python 우선 오일러 피 함수를 알아보자. 오일러 피 함수는, 어떤 정수가 주어졌을 때, 그 정수보다 더 작은 수 중에서 서로소인 수의 개수를 알아낼 수 있는 함수이다. 함수는 다음과 같이 계산할 수 있고, 이 값을 계산하기 위해서는 n의 약수가되는 소수를 발견해야 한다. for i in range(.. 2022. 12. 2.
[Python] 백준 2629 양팔저울 문제 링크 : https://www.acmicpc.net/problem/2629 2629번: 양팔저울 첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무 www.acmicpc.net 1. 접근 방법 양팔 저울과 추를 활용하여 특정 무게를 확인할 수 있는지 묻는 문제인데, 추가 양쪽 모두 올라갈 수 있다. 그래서 추들을 한쪽에 올려서 가능한지 뿐만 아니라, 일부 추가 반대쪽에 올라가서 가능한 경우도 고려해야 한다. DP로 배낭문제 방식으로 접근했는데, 각 무게가 가능한지 저장, 이후 주어지는 무게 별로 확인하여 출력하는 방식으로 구성했다. 2. 풀이 코드 🖥pyth.. 2022. 10. 2.
22.09.24 라인, 카카오 코딩테스트 라인 코딩 테스트 1. 2의 거듭제곱을 활용한 단순 계산 - 단순 사칙연산으로 해결 가능함 2. 그래프 탐색 응용 - 그래프 탐색을 문자열에 응용 - 탐색에 트라이 활용 가능 3. 시뮬레이션 - 주어진 횟수만큼 시뮬레이션 실행 - 간단한 for, if문으로 해결 가능 - 조금 더 계산하여 for문의 수를 줄여서 구현할 수 있을 것 같음 4. 그래프 탐색 응용 - 조건이 복잡하게 주어지는데, if문을 잘 처리하는 방법 말고 다른 방법을 찾지 못했다. 5. constructive 한 문제 - 두 개의 변수와, 그 결과로 나온 값을 기준으로 두 변수를 예측하는 문제 - 시간이 조금 걸려서 접근 방법을 뒤늦게 찾았지만, 제대로 풀어내지 못했다. 카카오 코딩 테스트 1. 시간 계산 문제 - 확인해야 하는 조건은 .. 2022. 9. 25.