본문 바로가기

전체 글277

[Restful API] JWT 토큰 유효시간 만료 방법 JWT_SECRET_KEY = 'Hi' JWT_ACCESS_TOKEN_EXPIRES = True # False = 만료 없이 설정 PROPAGATE_EXCEPTIONS = True # 에러가 나면 보여줄 것 -> JWT 관련 변수 세팅에서 JWT_ACCESS_TOKEN_EXPRIES를 True로 하면 토큰 유효시간 설정을 할 수 있다. access_token = create_access_token(result_list[0]["id"], expires_delta=datetime.timedelta(minutes=2)) -> create_access_token(expires_delta= datetime.timedelta(minutes=2))에서 인자 expires_delta는 토큰 만료 시간이다. 2023. 12. 7.
[Restful API] flask에서 JWT 사용하는 방법 pip install flask-jwt-extended -> 먼저, 인증 토큰 발급을 위한 라이브러리를 설치한다. class Config : JWT_SECRET_KEY = 'Hi' JWT_ACCESS_TOKEN_EXPIRES = False PROPAGATE_EXCEPTIONS = True -> git에 올라가지 않게 보안을 위해 만든 Config 클래스 안에 JWT 관련 변수를 세팅한다. from flask import Flask from flask_jwt_extended import JWTManager from flask_restful import Api from config import Config # 환경변수 세팅 app.config.from_object(Config) # JWT 매니저를 초기화 J.. 2023. 12. 7.
[Restful API] 회원가입할 때 비밀번호 암호화 하는 법 pbkdf2_sha256 암호화 -> 비밀번호 원문(1234)를 보내면 서버는 이 원문을 받아서 암호화 한다. 양방향 암호화 = 암호화를 하고 다시 복구가 가능 단방향 암호화 = 암호화를 하면 복구가 불가 보안때문에 단방향 암호화를 사용한다 = hash 라고 한다. pip install psycopg2-binary passlib -> 암호화 하기 위한 라이브러리 설치 from passlib.hash import pbkdf2_sha256 from config import Config # 원문 비밀번호를 단방향 암호화 하는 함수 def hash_password(original_password) : original_password = original_password + Config.PASSWORD_SALT password = pbkd.. 2023. 12. 7.
데이터베이스에서 Index(인덱스) 개념 정리 Index(인덱스) 데이터베이스 인덱스(index)는 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블에 저장된 데이터의 검색 속도를 향상시키기 위한 자료구조이다. 인덱스는 데이터베이스 내의 특정 컬럼(열)이나 컬럼들의 조합에 대한 값과 해당 값이 저장된 레코드(행)의 위치를 매핑하여 데이터베이스 쿼리의 성능을 최적화하는 데 중요한 역할을 한다. 예를 들어, 책에서 원하는 내용을 찾는다고 가정하면, 책의 모든 페이지를 넘기면서 원하는 내용이 나올 때까지 찾는 것보다 목차 또는 저자가 남긴 색인(index)을 통해 찾는 것이 더욱 빠를 것이다. 데이터베이스의 인덱스가 책의 목차와 색인과 같은 역할을 한다. 이처럼 데이터베이스에서 인덱스를 사용하면, 데이터를 검색할 때 전체 테이블을 스캔하는 것.. 2023. 12. 6.
HTTP Method와 status Code(상태 코드) 설명 HTTP Method GET 용도: 서버에서 리소스를 가져옴. 안전(Safe): 요청이 서버의 상태를 변경하지 않음. 캐시 가능(Cachable): 응답을 캐시에 저장할 수 있음. POST 용도: 서버에 데이터를 제출하고, 주로 새로운 리소스를 생성할 때 사용. 안전하지 않음(Unsafe): 요청이 서버의 상태를 변경할 수 있음. 캐시 불가능(Non-Cachable): 응답은 캐시에 저장되지 않음. PUT 용도: 지정된 리소스를 업데이트함. 안전하지 않음(Unsafe): 서버의 상태를 변경함. 캐시 불가능(Non-Cachable): 응답은 캐시에 저장되지 않음. DELETE 용도: 지정된 리소스를 삭제함. 안전하지 않음(Unsafe): 서버의 상태를 변경함. 캐시 불가능(Non-Cachable): 응답은.. 2023. 12. 6.
RDB(Relational Database)와 NoSQL(Not Only SQL)의 특징과 차이점 RDB(관계형 데이터베이스) 1. 데이터 모델 테이블: 데이터는 정해진 스키마에 따라 행과 열로 구성된 테이블에 저장됩니다. 관계: 여러 테이블 간의 관계를 통해 데이터가 연결됩니다. 2. 스키마 고정된 스키마: 데이터베이스 스키마는 미리 정의되고 고정되어 있어야 합니다. 즉, 데이터의 구조가 변경되면 전체 시스템을 업데이트해야 합니다. 3. 트랜잭션 ACID 속성: 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)과 같은 ACID 속성을 보장합니다. 4. 용도 복잡한 쿼리 및 조인: 대부분의 관계형 데이터베이스는 복잡한 쿼리와 다양한 연산을 지원하여 복잡한 데이터 구조를 다루기에 적합합니다. 트랜잭션 처리: 금융, 주문, 회.. 2023. 12. 6.
Restful API(Rest API)란? RESTful API, REST API는 Representational State Transfer(표현 상태 전이)라는 아키텍처 스타일을 따르는 API로, 네트워크 상에서 데이터를 주고받기 위한 표준적인 방법이다. RESTful API는 클라이언트와 서버 간의 통신을 위해 HTTP 프로토콜을 사용 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 리소스를 요청하고, JSON, XML 등의 형식으로 응답을 받는다 RESTful API의 가장 큰 특징은 URI(Uniform Resource Identifier)를 통해 자원을 표현하고, HTTP 메서드를 통해 해당 자원에 대한 행위를 나타낸다는 것, 이를 통해 자원에 대한 식별과 관리가 용이하며, URI가 독립적이므로 서버와 클라이언트.. 2023. 12. 6.
[Restful API] Config 파일 만들기 github에서 repository에서 코드를 public으로 해놓는 경우에, DB의 로그인 정보나 AWS의 키와 같은 보안관련 정보는 노출하면 안되기 때문에 Config 파일을 만든다. 그 후 .gitignore 파일에서 Config 파일을 제외하고 소스 코드를 올린다. class Config : HOST = "AWS RDS의 엔드포인트' DATABASE = '해당 데이터베이스' DB_USER = '유저 이름' DB_PASSWORD = '유저 비밀번호' -> config.py 파일을 만든 후 Config 라는 클래스를 만들어 따로 보관한 상태 import mysql.connector from config import Config # 파이썬으로 MySQL에 접속할 수 있는 함수 def get_connec.. 2023. 12. 6.
[Restful API] Restful API 개발 할 때, MySQL 접속을 위한 유저를 따로 만들기 Restful API 개발 할 때, 새로운 스키마(데이터베이스)를 만들고 새로운 유저 계정을 만들어 이 유저만 접속 가능하게 하려고 한다. 방법) create database recipe_db; create user 'username'@'%' identified by 'password'; grant all privileges on recipe_db.* to 'username'@'%'; recipe_db 라는 스키마를 만든다. 새로운 유저의 이름과 비밀번호를 쓴 후 만들어준다. recipe_db의 모든 테이블에 대한 권한을 새로 만든 유저에게 부여한다. -> 그 후 홈으로 돌아와서 MySQL Connections 옆 + 버튼 클릭 Connection Name엔 원하는 이름을 쓰고 Username엔 위에서 .. 2023. 12. 6.
[Restful API] Python MySQL Connector를 이용해 delete 하는 방법 -> Postman에서 http method는 DELETE로, 어떤 데이터를 삭제할 지는 경로 recipes/해당 테이블의 id값, 요청할 데이터는 없으니 Body는 none으로 세팅한다. def delete(self, recipe_id) : connection = get_connection() try : query = ''' delete from recipe where id = %s; ''' record = (recipe_id, ) cursor = connection.cursor() cursor.execute(query, record) connection.commit() cursor.close() connection.close() except Error as e : print(e) cursor.clos.. 2023. 12. 6.