Digital Garden 프로젝트
·
Projects
나만의 블로그를 만들어보자는 생각으로 새로운 프로젝트를 약 2개월가량 진행했다. 결과는 대실패 !!프로젝트를 진행하면서 스스로 고민하고 배운점도 많고, 앞으로의 프로젝트에 대해 개선할 부분도 많다고 생각하게 되었다.프로젝트를 진행했던 과정과 깨달은 점, 그리고 앞으로의 프로젝트는 어떻게 진행할지에 대한 생각을 기록하고자 한다.프로젝트 시작티스토리 블로그에는 오랜만에 작성하는 블로그 글이긴 하지만, 중간중간 다른 방식의 블로그를 탐험해보았다.노션과 같은 노트 앱을 사용한 방법도 고려해보았고, Github Pages나 다른 무료 호스팅 방법을 사용해보기도 했다. Obsidian에서 블로그를 포스팅하는 플러그인을 사용하는 시도도 해보았다.여러가지 방법을 시도하다 결국 내가 직접 만드는 블로그 프로젝트를 한 번..
FastAPI 05. 반환 모델과 유사한 모델들 생성하기
·
Python/Python Web Framework
반환 모델 작성하기 FastAPI는 기본적으로 사용하는 모델을 추정하여 입출력값을 나타내지만 자동적으로 표현해 주는 기능에만 의존할 수는 없다. 예를 들어 게시판의 글의 목록과 각각의 글을 불러오는 API가 있을 때, 다음과 같이 설계할 수 있다. 게시판 글 목록 : 글 번호, 글 제목, 조회 수, 댓글 수, 작성일 게시판 글 : 글 제목, 글 내용, 조회수, 댓글 수, 댓글 목록, 작성일 이러한 경우 각 API에 맞도록 반환모델을 기록하는것이 개발에 도움이 될 수 있다. FastAPI에서 반환 모델을 명시하는 방법은 크게 2가지이다. 첫 번째는 Python함수 반환값을 나타내듯이 ->를 사용하여 반환 타입을 입력하는 방법이고, 다른 방식은 response_model값을 지정하는 방식이다. @app.po..
[Python] 백준 1053 팰린드롬 공장
·
CS/알고리즘 & 문제풀이
문제 링크 : https://www.acmicpc.net/problem/1053 1053번: 팰린드롬 공장 팰린드롬이란, 앞에서부터 읽었을 때와, 뒤에서부터 읽었을 때가 같은 문자열이다. 모든 문자열이 팰린드롬이 아니기 때문에 다음과 같은 4가지 연산으로 보통 문자열을 팰린드롬으로 만든다. www.acmicpc.net 1. 접근 방법 어떤 문자열을 팰린드롬으로 만드는데, 사용할 수 있는 연산이 총 4가지가 있어 처음에는 일반적인 백트래킹으로 접근했다. 하지만 과정마다 팰린드롬임을 확인하는 것이 많은 시간이 필요하고, 각 연산을 문자열의 몇 번째 위치에서 적용할지도 고민해야 할 문제였다. 그래서 백트래킹이 아닌 재귀를 활용한 DP로 접근해 보았다. 2. 풀이 코드 🖥python 코드 링크 : https:/..
FastAPI 04. 바디의 예시 만들기
·
Python/Python Web Framework
OpenAPI를 지원하는 FastAPI를 더 잘 활용하는 방법은 스키마 활용이라고 생각한다. API를 작성하고, 간단하게 설명해 줄 수 있지만, API를 제대로 작성하고 또 제개도 활용학 위해서는 OpenAPI를 따라 스키마를 작성하는 것이 필요하다고 생각한다. 그렇게 한다면 입출력 예시뿐만 아니라 가능한 상태 코드 등을 쉽게 이해할 수 있다. 이는 API 개발뿐만 아니라 테스트나 유지 보수에도 도움 되는 작업이라고 생각한다. FastAPI에서는 이를 달성하기 위해 Pydantic을 사용하는 방법과 FatsAPI에서 제공하는 Body()함수를 사용하는 방법을 제공한다. Pydantic을 사용하는 방법 class Item(BaseModel): id: int name: str description: str ..
FastAPI 03. 리퀘스트 바디
·
Python/Python Web Framework
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..
FastAPI 02. 경로, 쿼리 매개변수 검증
·
Python/Python Web Framework
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 함..
FastAPI 01. 첫걸음
·
Python/Python Web Framework
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 클래스를 불러와서 나의 앱 객..
[Python] 백준 11689 GCD(n, k) = 1
·
CS/알고리즘 & 문제풀이
문제 링크 : https://www.acmicpc.net/problem/ 1. 문제 설명 어떤 수가 주어지면, 그 수의 약수를 구하거나 찾거나 활용해야 한다. 대부분의 경우, 그리고 코딩 테스트에 등장하는 문제는 에라토스테네스의 체를 활용하는 정도인데, 백준에서는 그 이상의 지식이 필요한 문제가 종종 있다. 이 문제도 결론을 먼저 말하자면, 오일러 피 함수를 사용해야 한다. 2. 문제 풀이 풀이 코드 : Python 우선 오일러 피 함수를 알아보자. 오일러 피 함수는, 어떤 정수가 주어졌을 때, 그 정수보다 더 작은 수 중에서 서로소인 수의 개수를 알아낼 수 있는 함수이다. 함수는 다음과 같이 계산할 수 있고, 이 값을 계산하기 위해서는 n의 약수가되는 소수를 발견해야 한다. for i in range(..
[Python] 백준 2629 양팔저울
·
CS/알고리즘 & 문제풀이
문제 링크 : https://www.acmicpc.net/problem/2629 2629번: 양팔저울 첫째 줄에는 추의 개수가 자연수로 주어진다. 추의 개수는 30 이하이다. 둘째 줄에는 추의 무게들이 자연수로 가벼운 것부터 차례로 주어진다. 같은 무게의 추가 여러 개 있을 수도 있다. 추의 무 www.acmicpc.net 1. 접근 방법 양팔 저울과 추를 활용하여 특정 무게를 확인할 수 있는지 묻는 문제인데, 추가 양쪽 모두 올라갈 수 있다. 그래서 추들을 한쪽에 올려서 가능한지 뿐만 아니라, 일부 추가 반대쪽에 올라가서 가능한 경우도 고려해야 한다. DP로 배낭문제 방식으로 접근했는데, 각 무게가 가능한지 저장, 이후 주어지는 무게 별로 확인하여 출력하는 방식으로 구성했다. 2. 풀이 코드 🖥pyth..