전체 글 40

[FastAPI] 경로 매개변수 & 쿼리 매개변수

이번에 소개할 내용은 경로 매개변수와 쿼리 매개변수입니다. 두 매개변수 모두 HTTP 요청을 통해서 데이터를 전달한다는 점과 URL을 통해 입력이 들어온다는 공통점이 있습니다.경로 매개변수경로 매개변수는 API 경로에서 동적으로 변할 수 있는 부분을 정의할 때 사용합니다. 정해진 경로에 변수를 넣고, FastAPI가 해당 위치의 값을 추출해서 사용합니다. 정해진 경로는 '{ }' 를 통해 설정해 줍니다.코드 예시)from fastapi import FastAPIapp = FastAPI()@app.get("/users/{user_id}")async def read_user(user_id: int): return {"user_id":user_id}위의 user_id 처럼 형식을 지정해서 사용할 수 있습니다...

Python/FastAPI 2024.09.06

[FastAPI] 설치 및 장점

오늘은 FastAPI를 설치하고 기초 개념을 설명하는 시간을 가져보겠습니다. 저는 아나콘다의 가상환경을 이용해서 설치했고 파이썬은 3.10 버전을 사용했습니다.FastAPI 설치$ pip install fastapi$ pip install uvicornfastapi 를 설치하고 추가로 서버 역할을 해주는 uvicorn 을 함께 설치해 줍니다. 추후 main.py 파일을 작성하고 나서 uvicorn 을 통해 실행하는 코드는 다음과 같습니다. 그러면 밑에 나오는 코드를 통해서 서버에 접속할 수 있습니다.$ uvicorn main:app --reloadINFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)INFO: Starte..

Python/FastAPI 2024.09.05

[FastAPI] 시작하기 + HTTP 메소드

우선 제가 프로젝트를 진행하며 처음으로 백엔드 공부를 했는데, 공식 문서를 참고하며 공부한 내용을 소개하려고 합니다. 가장 먼저 설명하는 내용은 FastAPI에서 사용하는 주요 메소드에 관한 내용입니다.FastAPI에 대해기본 형식main.pyfrom fastapi import FastAPIapp = FastAPI()@app.get("/")async def root(): return {"message": "Hello World"}위 코드는 가장 기본적인 FastAPI 코드 형식입니다. 라이브러리를 Import 하고 기본 주소에서 출력하는 메시지를 나타냅니다. 위 코드를 main.py에 저장하고 실행하는 방법은 아래 코드를 입력해 주면 됩니다.uvicorn main:app --reload HTTP 메..

Python/FastAPI 2024.09.04

[Python] requirements.txt 만들고 설치하기

1. requirements.txt 란?python 관련 프로젝트를 진행하다보면 환경 세팅이 다른 경우가 많은데, 이 경우 본인 환경에 설치된 라이브러리들을 파일로 저장하고 다른 환경에 공유하거나 서버에 올릴 때 유용하게 사용될 수 있는 파일입니다. 이 파일에는 각 라이브러리들의 버전들이 포함되어 저장됩니다. 2. 생성pip freeze > requirements.txt위 명령어를 통해 파일을 생성할 수 있습니다. 그러면 이런식으로 라이브러리들이 버전과 함께 저장됩니다. 3. 설치하기위 파일을 가지고 패키지들을 한번에 설치할 수 있습니다.pip install -r requirements.txt 4. Dockerfile 사용만약 Dockerfile 로 만들어서 패키지들을 설치해야할 경우 이렇게 작성해 볼 ..

Python 2024.08.21

[프로그래밍] JWT - Refresh Token 관리에 대해(DB저장)

이전 글에서 Refresh Token 관리에 대해 설명했는데, 우선 구현하기 쉽다고 생각되는 DB에 저장하는 방식에 대해 알아보았습니다. 방법은 여러 가지가 있었는데 2가지를 골라서 비교해 보았습니다.1. 별도의 Refresh Tokens 테이블 사용먼저 이 방법은 Refresh Tokens 라는 테이블을 만들어서 토큰을 관리하는 방식입니다. 테이블을 살펴보면idINTEGER (PK)테이블의 고유 iduser_idINTEGER (FK)유저의 idrefresh_tokenVARCHARrefresh token 값created_atTIMESTAMPToken이 만들어진 시간expires_atTIMESTAMPToken이 만료되는 시간위와 같은 구조의 테이블을 사용해서 토큰을 관리하는 방식입니다. 토큰 관리 순서에 ..

프로그래밍 2024.08.08

[프로그래밍] JWT - Refresh Token 관리에 대해

프로젝트를 진행하면서 회원 관리에 JWT 토큰 방식을 사용하게 되었습니다. 이때 Refresh Token을 어떻게 관리해야 더 효율적이고 보안상 안전할까에 대해 고민해 보았습니다. Access Token과 Refresh Token 먼저 JWT 토큰 방식을 사용하게 되면 access token과 refresh token을 듣게 됩니다. Access Token은 사용자가 다른 페이지로 이동하거나 페이지에서 요청을 진행할 때 리소스에 접근하기 위해 사용되는 토큰입니다. 그래서 access token은 유효 기간이 refresh token에 비해 짧습니다. 여기서 refresh token의 기능은 access token이 만료되었을 때 access token을 재발급시켜주는 역할을 합니다. 이때 access t..

프로그래밍 2024.08.07

[프로그래밍] ERD 1 - Cardinality

프로젝트를 진행하면 API명세서를 작성하고 다음으로 ERD를 그리면서 공부한 내용 공유드립니다. ERD란?먼저 ERD(Entity-Relationship Diagram)은 데이터베이스의 구조를 시각적으로 표현한 다이어그램입니다. ERD는 데이터베이스의 테이블과 그들 간의 관계를 나타내며, 데이터 모델링을 통해 데이터베이스를 설계할 때 유용하게 사용됩니다.CardinalityOne하나의 엔티티를 가진다는 의미입니다. 일대일 관계를 나타낼 때 사용됩니다.Many여러개의 엔티티를 가진다는 의미입니다. 일대다 관계를 나타낼 때 사용됩니다.One(and only one)일대일 관계를 나타내는 기능입니다. 위의 One보다 더 강력한 관계를 의미하며 데이터 무결성을 더 엄격하게 보장할 때 사용됩니다.zero or o..

프로그래밍 2024.08.06

[프로그래밍] API 명세서 1 - 상태코드, 메서드

프로젝트를 진행할 때 중요한 API 명세서 관련 내용을 공부하면서 정리해보려고 합니다. API 명세서란?특정 소프트웨어 시스템에서 제공한느 기능과 그 기능을 사용하기 위한 규칙을 기술한 문서. 다른 소프트웨어 시스템이 이 시스템과 상호작용할 수 있도록 하는 중요한 도구로서 다음과 같은 정보를 포함함 1. API 엔드포인트: API가 제공하는 URL 경로로, 각 엔드포인트는 특정 기능을 수행합니다. 2. HTTP 메서드: 각 엔드포인트에 대해 사용할 수 있는 HTTP 메서드(GET, POST, PUT, DELETE 등)를 명시합니다. 3. 요청 파라미터: API 호출 시 필요한 입력 데이터(쿼리 파라미터, 경로 파라미터, 바디 파라미터 등)에 대한 설명을 제공합니다. 4. 응답 형식: API가 반환하는 데..

프로그래밍 2024.08.04

[CODE TREE] 이상한 진수 - python

문제링크 : https://www.codetree.ai/training-field/search/problems/awkward-digits/description?page=1&pageSize=5문제 요약숫자 N을 찾는 문제이고, N의 2진법에서 하나를 바꾼 a, N의 3진법에서 하나를 바꾼 b가 주어질 때 기존 숫자 N을 찾는 문제이다.입출력 형식첫 번째 줄 a (이진수)두 번째 줄 b (삼진수)출력 :0 ≤ N ≤ 1,000,000,000예상 풀이 방향먼저 a에서 나올 수 있는 모든 수를 저장하고 b에서 나올 수 있는 모든 수를 비교해서 N을 찾기풀이a = input()b = input()if a[0] == '0': print(int(a,2))else: numList = [] lengthA..

[백준] 미로 탐색(2178) - python

문제 링크 : http://boj.kr/2178문제 요약N x M 크기의 배열 미로에서 1은 이동 가능한 칸을 0은 이동 불가능한 칸을 나타냅니다.(1, 1) 에서 출발해서 (N, M) 까지 이동할 때 지나야 하는 최소 칸을 구하는 문제입니다.입력N, M (2 ≤ N, M ≤ 100)N개의 줄에 M개의 정수로 미로예시)2 3110011풀이현재 칸에서 이동할 수 있는 경로가 정해져 있기 때문에 그래프 구조라고 생각해서 접근해 보았습니다.각 칸에서는 지나오지 않은 4방향의 칸들 중 이동 가능한 칸으로 이동하는 방법을 생각해서 따라서 그래프 BFS 구조로 구현해 보겠습니다.import sysinput = sys.stdin.readlineN, M = map(int,input().split())maze = []f..