https://github.com/geon0430/fastapi_restapi_server
https://github.com/geon0430/fastapi_restapi_server
fastapi loguru python restapi study
Last synced: 10 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/geon0430/fastapi_restapi_server
- Owner: geon0430
- Created: 2024-04-01T08:25:17.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-07-12T00:50:50.000Z (over 1 year ago)
- Last Synced: 2025-01-10T15:04:08.899Z (12 months ago)
- Topics: fastapi, loguru, python, restapi, study
- Language: Python
- Homepage:
- Size: 44.9 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# FastAPI-Restapi
----
### fastapi로 Restapi 구현
- post
- put
- get
- delete
### database
- redis server 설치 후 redis 사용
### 로거 관리
- logrus
### config
- ini
### Redis 장점
- 높은 성능
- **Redis는 메모리 내에서 작동**하므로 데이터베이스 쿼리를 빠르게 처리할 수 있습니다.
- **데이터를 디스크에 저장하지 않기 때문에** I/O 부하가 없습니다.
- 다양한 데이터 구조
- Redis는 **string, list, 해시, set 등 다양한 데이터 구조를 지원**합니다.
- 이러한 데이터 구조들은 고성능 캐시, 메시징 대기열, 세션 저장소 등으로 사용됩니다.
- 확장성
- Redis는 수평 확장에 용이합니다.
- **Redis 클러스터는 여러 대의 서버에 데이터를 분산하여 저장하며, 이를 통해 처리량을 높일 수 있음**
- 편리한 운영
- Redis는 대부분의 운영 체제와 호환되며, 편리한 모니터링 및 관리 도구가 제공됩니다.
### Redis 단점
- 메모리 한계
- Redis는 메모리에 데이터를 저장하기 때문에, 데이터의 크기가 메모리 용량보다 큰 경우 문제가 발생할 수 있습니다.
- 데이터 영속성
- Redis는 메모리에서 작동하므로, 서버가 종료될 때 데이터를 영속적으로 저장하지 않는 한 데이터가 손실될 수 있습니다.
- 하지만 Redis는 스냅샷, AOF 등의 방법으로 데이터를 디스크에 영속적으로 저장할 수 있습니다.
- 높은 부하
- Redis는 고성능을 보장하기 위해 매우 빠른 속도로 데이터를 처리하므로, 과도한 부하가 발생할 수 있습니다.
- 따라서 Redis 서버를 선정할 때 적절한 하드웨어 및 운영 체제를 선택해야 합니다.
- 설계한 목적에 따라서는 다른 솔루션을 선택해야 할 수도 있습니다.
- 예를 들어, 관계형 데이터베이스에서는 SQL 쿼리 기능을 제공하기 때문에 Redis보다 유연한 데이터 조작이 가능합니다.
---
## Python redis
- Python Redis를 사용하려면 먼저 Redis 서버가 설치되어 있어야 합니다.
- 그런 다음 Python Redis를 설치하고, Redis 서버와 연결하여 작업을 수행할 수 있습니다.
### redis-server install
```jsx
apt-get update
apt-get install redis-server -y
```
### conf add
```jsx
vim redis.conf
protected-mode no
bind 0.0.0.0
requirepass inbic
```
### conf (option)
- protected-mode : 보호 모드 no
- save : 디스크로의 주기적인 스냅샷 저장 기능
- save : Redis는 지정된 초(seconds) 동안 지정된 변경 수(changes)가 발생할 때마다 스냅샷을 디스크에 저장
- appendonly : AOF 모드를 활성화 기능
- stop-writes-on-bgsave-error : 백그라운드 저장이 실패 즉 스냅샷을 디스크에 쓰는 동안 오류가 발생하면 쓰기를 중지 기능
---
## redis 부가 설명
- Redis는 고성능 key-value 데이터베이스 시스템
- 다양한 데이터 구조와 함께 분산 캐시, 메시징 대기열, 세션 저장소 등으로 사용
- Redis는 클라이언트-서버 모델로 구성되어 있으며, 네트워크를 통해 클라이언트와 서버 간의 통신을 수행합니다.
- Redis 서버는 TCP 프로토콜을 사용하여 클라이언트와 연결하고, 클라이언트의 요청을 처리합니다.
- 클라이언트는 Redis 서버에 요청을 보내기 위해 Redis 클라이언트 라이브러리를 사용합니다.
- Redis 클라이언트 라이브러리는 Redis 프로토콜을 구현하여 Redis 서버와 통신합니다.
- Redis 명령어는 텍스트 형식으로 작성되며, Redis 클라이언트 라이브러리는 이 명령어를 Redis 프로토콜로 변환하여 Redis 서버에 보냅니다.
- Redis는 단일 스레드로 동작합니다.
- Redis 서버는 요청을 처리하기 위해 요청을 큐에 저장하고, 요청을 처리하는 스레드가 큐에서 요청을 꺼내 처리합니다. 이를 통해 Redis는 매우 빠른 응답 시간을 제공할 수 있습니다.
- Redis는 데이터를 메모리에 저장하며, Redis는 스냅샷과 로그 방식을 사용하여 데이터를 디스크에도 저장합니다.
- 스냅샷은 Redis의 메모리 상태를 디스크에 저장하는 방식입니다.
- 스냅샷은 주기적으로 수행되거나, 명령을 수행하는 등의 이벤트가 발생할 때 수행됩니다.
- 로그 방식은 Redis가 실행 중인 동안, 변경된 데이터를 디스크에 로그하는 방식입니다.
- 로그 방식은 스냅샷 방식에 비해 더 빠르게 데이터를 저장할 수 있습니다.
## redis 와 shared memory 의 차이점
- Redis
- **대규모 분산 시스템에서 데이터 처리를 위해 사용**
- Redis는 인메모리 데이터 저장소(In-memory Data Store)로, 데이터를 메모리에 저장하고 디스크에도 저장할 수 있습니다.
- 대량의 데이터를 빠르게 처리하는 데 적합
- Redis는 자체적으로 데이터의 영속성(Persistence)을 지원하며, 캐싱(Caching), 세션 관리(Session Management), 메시지 브로커(Message Broker) 등 다양한 용도로 사용됩니다.
- Redis는 오픈 소스로, 많은 기능을 제공하며 클러스터링(Clustering)을 지원합니다.
- 다수의 클라이언트가 동시에 접근하여 데이터를 읽고 쓰는 데 적합하며, 클러스터링(Clustering)을 지원하여 높은 가용성을 제공합니다.
- 따라서, 대규모 분산 시스템에서 데이터를 처리하는 데 많이 사용됩니다.
- Shared memory
- **IPC를 위한 프로세스 간 통신에서 사용됩니다.**
- 반면, shared memory는 여러 프로세스가 공유할 수 있는 메모리 영역을 제공하는 기술입니다.
- 각 프로세스가 데이터를 읽고 쓸 때, 커널이 복사 없이 메모리를 공유하여 빠른 처리 속도를 보장합니다.
- Shared memory는 IPC(Inter-Process Communication) 기술의 한 종류로, 프로세스 간 통신(IPC)에서 공유 메모리를 이용하여 데이터를 전달하거나, 여러 프로세스가 공통으로 사용해야 하는 데이터를 저장하는 데 사용됩니다.
- 대규모 분산 시스템에서는 Redis보다는 사용 빈도가 낮습니다.
- 다수의 클라이언트가 동시에 접근하는 경우에는 Redis보다는 부적합합니다.
- Shared memory는 프로세스 간 통신(IPC)을 위한 기술 중 하나이며, 따라서 클라이언트-서버 모델을 사용하여 데이터를 공유하는 Redis와는 차이가 있습니다.
- 따라서, Redis와 shared memory는 모두 데이터를 저장하는 기술이지만, 기본적인 동작 방식에서 차이가 있습니다.
- Redis는 인메모리 데이터 저장소로, 클라이언트-서버 모델을 사용하여 데이터를 공유합니다.
- 반면, shared memory는 여러 프로세스가 공유할 수 있는 메모리 영역을 제공하는 기술로, IPC 기술 중 하나입니다.
- Shared Memory는 프로세스 간의 통신을 위해 네트워크 통신을 사용하지 않으며, 동일한 컴퓨터에서 실행되는 프로세스 간에만 사용됩니다.
- Shared Memory는 운영체제에서 제공하는 시스템 콜(System Call)을 사용하여 공유 메모리 영역을 생성하고, 여러 프로세스가 이 영역을 참조할 수 있도록 합니다.
- 이 때, 프로세스는 일반적인 메모리 접근 방식으로 공유 메모리 영역을 읽거나 쓸 수 있습니다.
- 또한, Shared Memory는 메모리 영역을 물리적인 주소 공간에서 공유하기 때문에 빠른 속도를 제공합니다.
- 이는 Shared Memory가 프로세스 간 데이터 공유 시에 매우 효율적으로 동작하는 이유 중 하나입니다.
- 그러나 Shared Memory를 사용할 때는 데이터 동기화 문제에 대한 고려가 필요합니다.
- 여러 프로세스가 공유 메모리 영역에 접근하면서 동시에 데이터를 읽거나 쓸 때, 데이터 일관성을 유지하기 위해 동기화 작업이 필요합니다.
- 이를 위해 Locking 등의 동기화 기술을 사용할 수 있습니다.
- 또한, Shared Memory는 데이터 공유를 위해 물리적인 메모리 공간을 공유하기 때문에, 보안 이슈에 대한 고려가 필요합니다.
- Shared Memory를 사용할 때는 보안을 위해 권한 설정 등의 작업이 필요할 수 있습니다.
- 요약하면, Shared Memory는 IPC의 한 형태로, 여러 프로세스가 동시에 메모리 공간을 공유하여 데이터를 공유하는 기술입니다.
- 이는 네트워크 통신을 사용하지 않으며, 빠른 속도를 제공합니다.
- 그러나 데이터 동기화 문제와 보안 이슈에 대한 고려가 필요합니다.