{"id":15567244,"url":"https://github.com/iml1111/imflask","last_synced_at":"2026-04-02T01:50:52.758Z","repository":{"id":40561110,"uuid":"487571253","full_name":"iml1111/IMFlask","owner":"iml1111","description":"Boilerplate for Large Scale Flask Web Backend Structure","archived":false,"fork":false,"pushed_at":"2024-02-09T11:59:12.000Z","size":20,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-24T00:03:14.503Z","etag":null,"topics":["boilterplate","flask","python","restful"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iml1111.png","metadata":{"files":{"readme":"README.ko.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2022-05-01T15:22:45.000Z","updated_at":"2024-05-15T14:53:21.000Z","dependencies_parsed_at":"2025-03-06T22:41:32.551Z","dependency_job_id":null,"html_url":"https://github.com/iml1111/IMFlask","commit_stats":null,"previous_names":[],"tags_count":0,"template":true,"template_full_name":"iml1111/IMFlask-Pymongo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iml1111%2FIMFlask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iml1111%2FIMFlask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iml1111%2FIMFlask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iml1111%2FIMFlask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iml1111","download_url":"https://codeload.github.com/iml1111/IMFlask/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250535088,"owners_count":21446507,"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":["boilterplate","flask","python","restful"],"created_at":"2024-10-02T17:10:28.518Z","updated_at":"2026-04-02T01:50:52.720Z","avatar_url":"https://github.com/iml1111.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg width=\"600\" alt=\"KakaoTalk_Photo_2022-05-02-23-21-00\" src=\"https://user-images.githubusercontent.com/29897277/166250424-81f61df5-b05a-428f-a4cc-68ee74cb6ac0.png\"\u003e\n\n# IMFlask\n\n**Boilerplate for Large Scale Flask Web Backend Structure (Edited 2022-05-03)**\n\nFlask를 사용하여 대규모 어플리케이션 서버를 구축한다고 가정했을 때의 Baseline 코드입니다.\n\n여러 오픈 소스를 읽어보고 제 몸에 와닿는 직관적인 부분만 반영한 것이라 부족한 점이 많습니다.\n\n피드백은 적극 환영합니다.\n\n## Dependency\n\n- python 3.6+\n\n- Flask==2.1.2\n- flask-validation-extended==0.1.7\n- python-dotenv==0.20.0\n\n## Environment variables\n\n어플리케이션을 실행하기 위해서는 아래와 같은 환경 변수 설정이 필요합니다.\n\ndotenv 라이브러리를 위해 config.py와 같은 경로에 .env 파일을 작성하셔도 되고, 직접 환경변수를 입력하셔도 상관없습니다.\n\n```shell\nFLASK_APP=manage:application\nFLASK_ENV=development\nFLASK_CONFIG=development\n```\n\n## Get Started\n\n운영체제마다 세부적인 실행방법이 다를 수 있습니다. \n\n```shell\n# Get Repository\n$ git clone https://github.com/iml1111/IMFlask\n$ cd IMFlask/\n\n# virtualenv\n$ python3 -m venv venv\n$ source ./venv/bin/activate\n\n# Install dependency\n$ pip install -r ./requirements/requirements.txt\n$ cd IMFlask/\n\n# App test\n$ flask test\ntest_app_exists (test_basics.BasicsTestCase)\nApplication 검증 테스트 ... ok\n...\n\n# App start\n$ flask run\n```\n\n## Flask Extended Example\n\napp/\\__init\\__.py에서 Flask Extend 라이브러리를 적용할 수 있습니다.\n\n```python\n...\nfrom flask_jwt_extended import JWTManager\nfrom flask_cors import CORS\n\njwt_manager = JWTManager()\ncors = CORS()\n...\n\ndef create_app(config):\n\t  ...\n\t  jwt_manager.init_app(app)\n    cors.init_app(app)\n    ...\n```\n\n# Concept\n\n### Application Factory\n\n어플리케이션은 개발(development), 테스팅(Testing), 상용(Production) Level에서 다르게 동작해야 한다.\n\n### Flask Extension을 지양하자\n\nFlask extension는 최대한 지양하고 Basic Python 기반으로 기능을 충실히 구현하자.\n\n하지만, [flask-validation-extended](https://github.com/iml1111/flask-validation-extended)는 좋은 라이브러리입니다. :)\n\n### 의존성 분리\n\nApi endpoint 단 함수를 제외한 **모든 Controller 및 Model들은 독립적으로 실행이 가능해야 한다.**\n\n\n### 저수준의 DB 드라이버를 사용하자\n\n모든 DB단 연동 코드에는 **ORM, ODM과 같은 Database Abstraction Module을 사용하지 말자.**\n\n### 할 수 있는 만큼 RESTful를 지향하자\n\n가능한한 RESTful스럽게 가져가되, 무리하지는 말자.\n\n# Directories\n\n```\nIMFlask\n├── app\n│   ├── __init__.py\n│   ├── api\n│   │   ├── __init__.py\n│   │   ├── decorator.py\n│   │   ├── error_handler.py\n│   │   ├── response.py\n│   │   ├── sample_api\n│   │   │   ├── __init__.py\n│   │   │   ├── api.py\n│   │   ├── template.py\n│   │   └── validation.py\n│   └── asset\n│       └── index.html\n├── config.py\n├── controller\n│   ├── __init__.py\n│   ├── calculator.py\n│   ├── log.py\n│   └── util.py\n├── manage.py\n├── model\n│   ├── __init__.py\n└── tests\n    ├── __init__.py\n    ├── mock.py\n    ├── test_basics.py\n\n```\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiml1111%2Fimflask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiml1111%2Fimflask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiml1111%2Fimflask/lists"}