{"id":24099592,"url":"https://github.com/geon0430/fastapi_restapi_server","last_synced_at":"2026-05-11T21:39:29.665Z","repository":{"id":230870815,"uuid":"780325488","full_name":"geon0430/fastapi_RESTAPI_server","owner":"geon0430","description":null,"archived":false,"fork":false,"pushed_at":"2024-07-12T00:50:50.000Z","size":46,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-10T15:04:08.899Z","etag":null,"topics":["fastapi","loguru","python","restapi","study"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/geon0430.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-01T08:25:17.000Z","updated_at":"2024-11-13T02:00:51.000Z","dependencies_parsed_at":"2024-07-12T02:27:40.118Z","dependency_job_id":"7da48a6c-87a3-417b-943b-aad2e62c2a82","html_url":"https://github.com/geon0430/fastapi_RESTAPI_server","commit_stats":null,"previous_names":["geon0430/fastapi_restful_server","geon0430/fastapi_restapi_server"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geon0430%2Ffastapi_RESTAPI_server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geon0430%2Ffastapi_RESTAPI_server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geon0430%2Ffastapi_RESTAPI_server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geon0430%2Ffastapi_RESTAPI_server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geon0430","download_url":"https://codeload.github.com/geon0430/fastapi_RESTAPI_server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241035842,"owners_count":19898082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastapi","loguru","python","restapi","study"],"created_at":"2025-01-10T15:02:01.716Z","updated_at":"2026-05-11T21:39:24.627Z","avatar_url":"https://github.com/geon0430.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FastAPI-Restapi\n----\n### fastapi로 Restapi 구현\n- post\n- put\n- get\n- delete\n\n### database\n- redis server 설치 후 redis 사용\n### 로거 관리\n- logrus\n### config\n- ini\n\n### Redis 장점\n\n- 높은 성능\n    - **Redis는 메모리 내에서 작동**하므로 데이터베이스 쿼리를 빠르게 처리할 수 있습니다.\n    - **데이터를 디스크에 저장하지 않기 때문에** I/O 부하가 없습니다.\n- 다양한 데이터 구조\n    - Redis는 **string, list, 해시, set 등 다양한 데이터 구조를 지원**합니다.\n    - 이러한 데이터 구조들은 고성능 캐시, 메시징 대기열, 세션 저장소 등으로 사용됩니다.\n- 확장성\n    - Redis는 수평 확장에 용이합니다.\n    - **Redis 클러스터는 여러 대의 서버에 데이터를 분산하여 저장하며, 이를 통해 처리량을 높일 수 있음**\n- 편리한 운영\n    - Redis는 대부분의 운영 체제와 호환되며, 편리한 모니터링 및 관리 도구가 제공됩니다.\n\n### Redis 단점\n\n- 메모리 한계\n    - Redis는 메모리에 데이터를 저장하기 때문에, 데이터의 크기가 메모리 용량보다 큰 경우 문제가 발생할 수 있습니다.\n- 데이터 영속성\n    - Redis는 메모리에서 작동하므로, 서버가 종료될 때 데이터를 영속적으로 저장하지 않는 한 데이터가 손실될 수 있습니다.\n    - 하지만 Redis는 스냅샷, AOF 등의 방법으로 데이터를 디스크에 영속적으로 저장할 수 있습니다.\n- 높은 부하\n    - Redis는 고성능을 보장하기 위해 매우 빠른 속도로 데이터를 처리하므로, 과도한 부하가 발생할 수 있습니다.\n    - 따라서 Redis 서버를 선정할 때 적절한 하드웨어 및 운영 체제를 선택해야 합니다.\n- 설계한 목적에 따라서는 다른 솔루션을 선택해야 할 수도 있습니다.\n    - 예를 들어, 관계형 데이터베이스에서는 SQL 쿼리 기능을 제공하기 때문에 Redis보다 유연한 데이터 조작이 가능합니다.\n\n---\n\n## Python redis\n- Python Redis를 사용하려면 먼저 Redis 서버가 설치되어 있어야 합니다.\n- 그런 다음 Python Redis를 설치하고, Redis 서버와 연결하여 작업을 수행할 수 있습니다.\n### redis-server install \n```jsx\napt-get update\napt-get install redis-server -y\n```\n### conf add\n\n```jsx\nvim redis.conf\n\nprotected-mode no\nbind 0.0.0.0\nrequirepass inbic\n```\n\n### conf (option)\n- protected-mode : 보호 모드 no \n- save : 디스크로의 주기적인 스냅샷 저장 기능\n    - save \u003cseconds\u003e \u003cchanges\u003e: Redis는 지정된 초(seconds) 동안 지정된 변경 수(changes)가 발생할 때마다 스냅샷을 디스크에 저장\n- appendonly : AOF 모드를 활성화 기능\n- stop-writes-on-bgsave-error : 백그라운드 저장이 실패 즉 스냅샷을 디스크에 쓰는 동안 오류가 발생하면 쓰기를 중지 기능 \n\n---\n## redis 부가 설명\n\n- Redis는 고성능 key-value 데이터베이스 시스템\n- 다양한 데이터 구조와 함께 분산 캐시, 메시징 대기열, 세션 저장소 등으로 사용\n- Redis는 클라이언트-서버 모델로 구성되어 있으며, 네트워크를 통해 클라이언트와 서버 간의 통신을 수행합니다.\n- Redis 서버는 TCP 프로토콜을 사용하여 클라이언트와 연결하고, 클라이언트의 요청을 처리합니다.\n- 클라이언트는 Redis 서버에 요청을 보내기 위해 Redis 클라이언트 라이브러리를 사용합니다.\n- Redis 클라이언트 라이브러리는 Redis 프로토콜을 구현하여 Redis 서버와 통신합니다.\n- Redis 명령어는 텍스트 형식으로 작성되며, Redis 클라이언트 라이브러리는 이 명령어를 Redis 프로토콜로 변환하여 Redis 서버에 보냅니다.\n- Redis는 단일 스레드로 동작합니다.\n- Redis 서버는 요청을 처리하기 위해 요청을 큐에 저장하고, 요청을 처리하는 스레드가 큐에서 요청을 꺼내 처리합니다. 이를 통해 Redis는 매우 빠른 응답 시간을 제공할 수 있습니다.\n- Redis는 데이터를 메모리에 저장하며, Redis는 스냅샷과 로그 방식을 사용하여 데이터를 디스크에도 저장합니다.\n- 스냅샷은 Redis의 메모리 상태를 디스크에 저장하는 방식입니다.\n- 스냅샷은 주기적으로 수행되거나, 명령을 수행하는 등의 이벤트가 발생할 때 수행됩니다.\n- 로그 방식은 Redis가 실행 중인 동안, 변경된 데이터를 디스크에 로그하는 방식입니다.\n- 로그 방식은 스냅샷 방식에 비해 더 빠르게 데이터를 저장할 수 있습니다.\n\n## redis 와 shared memory 의 차이점\n\n- Redis\n    - **대규모 분산 시스템에서 데이터 처리를 위해 사용**\n    - Redis는 인메모리 데이터 저장소(In-memory Data Store)로, 데이터를 메모리에 저장하고 디스크에도 저장할 수 있습니다.\n    - 대량의 데이터를 빠르게 처리하는 데 적합\n    - Redis는 자체적으로 데이터의 영속성(Persistence)을 지원하며, 캐싱(Caching), 세션 관리(Session Management), 메시지 브로커(Message Broker) 등 다양한 용도로 사용됩니다.\n    - Redis는 오픈 소스로, 많은 기능을 제공하며 클러스터링(Clustering)을 지원합니다.\n    - 다수의 클라이언트가 동시에 접근하여 데이터를 읽고 쓰는 데 적합하며, 클러스터링(Clustering)을 지원하여 높은 가용성을 제공합니다.\n        - 따라서, 대규모 분산 시스템에서 데이터를 처리하는 데 많이 사용됩니다.\n- Shared memory\n    - **IPC를 위한 프로세스 간 통신에서 사용됩니다.**\n    - 반면, shared memory는 여러 프로세스가 공유할 수 있는 메모리 영역을 제공하는 기술입니다.\n    - 각 프로세스가 데이터를 읽고 쓸 때, 커널이 복사 없이 메모리를 공유하여 빠른 처리 속도를 보장합니다.\n    - Shared memory는 IPC(Inter-Process Communication) 기술의 한 종류로, 프로세스 간 통신(IPC)에서 공유 메모리를 이용하여 데이터를 전달하거나, 여러 프로세스가 공통으로 사용해야 하는 데이터를 저장하는 데 사용됩니다.\n    - 대규모 분산 시스템에서는 Redis보다는 사용 빈도가 낮습니다.\n    - 다수의 클라이언트가 동시에 접근하는 경우에는 Redis보다는 부적합합니다.\n    - Shared memory는 프로세스 간 통신(IPC)을 위한 기술 중 하나이며, 따라서 클라이언트-서버 모델을 사용하여 데이터를 공유하는 Redis와는 차이가 있습니다.\n- 따라서, Redis와 shared memory는 모두 데이터를 저장하는 기술이지만, 기본적인 동작 방식에서 차이가 있습니다.\n- Redis는 인메모리 데이터 저장소로, 클라이언트-서버 모델을 사용하여 데이터를 공유합니다.\n- 반면, shared memory는 여러 프로세스가 공유할 수 있는 메모리 영역을 제공하는 기술로, IPC 기술 중 하나입니다.\n- Shared Memory는 프로세스 간의 통신을 위해 네트워크 통신을 사용하지 않으며, 동일한 컴퓨터에서 실행되는 프로세스 간에만 사용됩니다.\n- Shared Memory는 운영체제에서 제공하는 시스템 콜(System Call)을 사용하여 공유 메모리 영역을 생성하고, 여러 프로세스가 이 영역을 참조할 수 있도록 합니다.\n- 이 때, 프로세스는 일반적인 메모리 접근 방식으로 공유 메모리 영역을 읽거나 쓸 수 있습니다.\n- 또한, Shared Memory는 메모리 영역을 물리적인 주소 공간에서 공유하기 때문에 빠른 속도를 제공합니다.\n- 이는 Shared Memory가 프로세스 간 데이터 공유 시에 매우 효율적으로 동작하는 이유 중 하나입니다.\n- 그러나 Shared Memory를 사용할 때는 데이터 동기화 문제에 대한 고려가 필요합니다.\n- 여러 프로세스가 공유 메모리 영역에 접근하면서 동시에 데이터를 읽거나 쓸 때, 데이터 일관성을 유지하기 위해 동기화 작업이 필요합니다.\n- 이를 위해 Locking 등의 동기화 기술을 사용할 수 있습니다.\n- 또한, Shared Memory는 데이터 공유를 위해 물리적인 메모리 공간을 공유하기 때문에, 보안 이슈에 대한 고려가 필요합니다.\n- Shared Memory를 사용할 때는 보안을 위해 권한 설정 등의 작업이 필요할 수 있습니다.\n- 요약하면, Shared Memory는 IPC의 한 형태로, 여러 프로세스가 동시에 메모리 공간을 공유하여 데이터를 공유하는 기술입니다.\n- 이는 네트워크 통신을 사용하지 않으며, 빠른 속도를 제공합니다.\n- 그러나 데이터 동기화 문제와 보안 이슈에 대한 고려가 필요합니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeon0430%2Ffastapi_restapi_server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeon0430%2Ffastapi_restapi_server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeon0430%2Ffastapi_restapi_server/lists"}