{"id":17727645,"url":"https://github.com/pastjung/project-template","last_synced_at":"2026-01-22T13:49:35.863Z","repository":{"id":258155356,"uuid":"870957640","full_name":"pastjung/Project-Template","owner":"pastjung","description":"앞으로의 프로젝트 간편화를 위한 템플릿 - MSA \u0026 DDD 설계 ( 2024.10.10 ~ 2024.10.15 )","archived":false,"fork":false,"pushed_at":"2024-10-16T05:24:26.000Z","size":105,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-08T00:48:35.138Z","etag":null,"topics":["docker","docker-compose","h2-database","mariadb","mongodb","mysql","react","springboot","vite"],"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/pastjung.png","metadata":{"files":{"readme":"docs/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-10-11T01:41:20.000Z","updated_at":"2024-10-16T05:26:30.000Z","dependencies_parsed_at":"2024-10-17T21:32:22.582Z","dependency_job_id":"b8a9769c-a6f4-4657-b439-4b5e80fc7736","html_url":"https://github.com/pastjung/Project-Template","commit_stats":null,"previous_names":["pastjung/project-template"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastjung%2FProject-Template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastjung%2FProject-Template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastjung%2FProject-Template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pastjung%2FProject-Template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pastjung","download_url":"https://codeload.github.com/pastjung/Project-Template/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252978685,"owners_count":21834913,"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":["docker","docker-compose","h2-database","mariadb","mongodb","mysql","react","springboot","vite"],"created_at":"2024-10-25T18:07:07.175Z","updated_at":"2026-01-22T13:49:35.818Z","avatar_url":"https://github.com/pastjung.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project-Template\n\n\u003e Initial written at october 10, 2024 \u003cbr/\u003e\n\u003e last updated at: october 16, 2024\n\n\n## Current: ver. 1.0.3\u003cbr/\u003e\n\u003e* ver 1.0.0.\n\u003e   * Init: 프로젝트 세팅 ( React + Spring Boot )\n\u003e   * CORS 설정\n\u003e* ver 1.0.1.\n\u003e   * 설정 변경: .gitignore파일에 IntelliJ IDLE 서정 파일 .idea \u0026 DB Volume 파일 db-data 추가\n\u003e   * Spring Boot: build.gradle 파일에 설명 주석 추가\n\u003e   * Spring Boot: application.properties -\u003e application.yml 변경\n\u003e   * DB 연결: MySQL, MariaDB, MongoDB\n\u003e   * Spring Boot: RDBMS \u0026 NOSQL 데이터베이스 사용법 예시 코드 추가\n\u003e* ver 1.0.2.\n\u003e   * RDBMDS의 QueryDSL 추가 ( MongoDB는 QueryDSL을 자주 사용하지 않아서 RDBMS만 추가함 )\n\u003e* ver 1.0.3.\n\u003e   * Init: 프로젝트 세팅 ( FastAPI )\n\u003e   * FastAPI: CORS 설정\n\u003e   * FastAPI: DB 연결 -\u003e MySQL, MariaDB, MongoDB\n\u003e   * FastAPI: RDBMS \u0026 NOSQL 데이터베이스 사용법 예시 코드 추가 -\u003e 로그인/회원가입 \u0026 쿠키 \u0026 JWT ( AccessToken, RefreshToken ) 사용\n\n# 1. 프로그램 (프로젝트) 설명\n\n- 본 프로젝트의 운영체제는 Linux OS를 기반으로 작성되었습니다.\n- 본 프로젝트는 Spring Security와 JWT를 고려하지 않은 프로젝트 입니다. ( 추후에 Spring Security를 도입할 경우 Filter와 연결해서 고려할 예정입니다. )\n- 본 프로젝트는 CORS 설정의 경우 Backend에서 설정하는 것이 바람직하다고 생각하여 Spring Boot 프로젝트에서 설정을 했습니다.\n- 본 프로젝트는 MSA \u0026 DDD 방식으로 프로젝트를 설계하였으며, 이후 AWS와 Docker를 사용한 배포를 통해 MSA 배포 환경을 고려할 예정입니다.\n\n# 2. Prerequisite\n\n- 본 프로젝트는 Docker를 사용하므로 `.env.template` 파일을 참고하여 `.env` 파일에 환경 변수값을 작성해주세요.\n    - root, react-app, springboot-app 총 3가지 파일을 모두 작성해주세요.\n    - MySQL, MariaDB, MongoDB 중 사용하려는 DB만 작성해주세요. ( RDBMS의 경우 하나만 작성해주세요. )\n    - `HOST_PORT` : 외부에서 컨테이너의 애플리케이션에 접근하는데 사용하는 포트 ( 노출되도 괜찮은 포트 )\n    - `SERVER_PORT` : 애플리케이션이 컨테이너 내에서 통신하는 포트 ( 노출되면 안되는 포트 )\n    - Vite에서는 보안이 필요한 환경변수의 유출을 막기 위해서 `VITE_`으로 시작하지 않는 환경변수는 무시되기 때문에 `VITE_SPRINGBOOT_HOST_PORT`가 필요합니다.\n    - `root/.env` : 로컬 환경에서 docker-compose.yml 파일을 실행시키기 위해 필요한 환경 변수 파일입니다.\n        ```\n        # 예시\n        SPRINGBOOT_HOST_PORT=8081\n        SPRINGBOOT_SERVER_PORT=8080\n\n        REACT_HOST_PORT=5174\n        REACT_SERVER_PORT=5173\n\n        FASTAPI_HOST_PORT=8001\n        FASTAPI_SERVER_PORT=8000\n\n        # MySQL\n        MYSQL_ROOT_PASSWORD=12345678\n        MYSQL_HOST_PORT=3306\n        MYSQL_SERVER_PORT=3306\n        MYSQL_DATABASE=mydatabase\n        MYSQL_USER=my_user\n        MYSQL_PASSWORD=1234\n\n        # MariaDB\n        MARIADB_ROOT_PASSWORD=12345678\n        MARIADB_HOST_PORT=3306\n        MARIADB_SERVER_PORT=3306\n        MARIADB_DATABASE=mydatabase\n        MARIADB_USER=my_user\n        MARIADB_PASSWORD=1234\n\n        # MongoDB\n        MONGO_INITDB_ROOT_USERNAME=root\n        MONGO_INITDB_ROOT_PASSWORD=12345678\n        MONGO_INITDB_DATABASE=mydatabase\n        MONGODB_HOST_PORT=27017\n        MONGODB_SERVER_PORT=27017\n        ```\n    - `react-app/.env` : React 애플리케이션 환경을 실행시키기 위해 필요한 환경 변수 파일입니다.\n        ```\n        # 예시\n        VITE_REACT_SERVER_PORT=5173\n        VITE_SPRINGBOOT_HOST_PORT=8081\n        VITE_FASTAPI_HOST_PORT=8001\n        ```\n    - `springboot-app/.env` : Springboot 애플리케이션 환경을 실행시키기 위해 필요한 환경 변수 파일입니다.\n        ```\n        # 예시\n        REACT_HOST_PORT=5174\n        SPRINGBOOT_SERVER_PORT=8080\n\n        # MYSQL 설정\n        MYSQL_HOST=mysql-container\n        MYSQL_PORT=3306\n        MYSQL_DATABASE=mydatabase\n        MYSQL_USER=my_user\n        MYSQL_PASSWORD=1234\n\n        # MariaDB 설정\n        MARIADB_HOST=mariadb-container\n        MARIADB_PORT=3306\n        MARIADB_DATABASE=mydatabase\n        MARIADB_USER=my_user\n        MARIADB_PASSWORD=1234\n\n        # MongoDB 설정\n        MONGODB_HOST=mongodb-container\n        MONGODB_PORT=27017\n        MONGODB_DATABASE=mydatabase\n        MONGODB_USER=root\n        MONGODB_PASSWORD=12345678\n        MONGO_INITDB_AUTHDB=admin\n        ```\n    - `fastapi-app/.env` : FastAPI 애플리케이션 환경을 실행시키기 위해 필요한 환경 변수 파일입니다.\n        ```\n        # 예시\n        SERVER_PORT=8000\n\n        # JWT\n        SECRET_KEY=fske256d3433kf2@er454ddd!35435rd!!!dkzfefdsdfjldkjf!dxfd5dsfx2432dszdfdsfsfs12xdfds2sa\n        ALGORITHM=HS256\n        ACCESS_TOKEN_EXPIRE_MINUTES=60\n        REFRESH_TOKEN_EXPIRE_DAYS=7\n\n        # RDBMS: MariaDB or MySQL\n        RDBMS_ID=root\n        RDBMS_ROOT_PASSWORD=12345678\n        RDBMS_IP_ADDRESS=mysql-container\n        RDBMS_SERVER_PORT=3306\n        RDBMS_DATABASE=mydatabase\n\n        # MongoDB ( NoSQL )\n        MONGODB_IP_ADDRESS=mongodb-container\n        MONGODB_SERVER_PORT=27017\n        MONGODB_DB_NAME=mydatabase\n        MONGODB_COLLECTION_NAME=mycollection\n        MONGODB_ID=root\n        MONGODB_ROOT_PASSWORD=12345678\n        ```\n- 본 프로젝트는 Spring Boot를 사용하므로 `springboot-app/src/main/resources/application.yml.template` 파일을 사용하여 `application.yml` 파일을 생성해주세요. ( 그대로 생성하면 됩니다. )\n\n# 3. 구동 방법\n\n## 3.1. 프로젝트 실행\n\n본 프로젝트는 Docker Compose를 사용하므로 이를 실행시켜주세요.\n\n```shell\n(sudo) docker compose up (--build)\n```\n\n## 3.2 프로젝트 종료\n\n본 프로젝트는 Docker Compose를 사용하므로 이를 실행시켜주세요.\n\n```shell\n(sudo) docker compose down (-v)\n```\n\n# 4. 디렉토리 및 파일 설명\n```\n    /Project-Template\n    ├── docs/\n    │   ├── PULL_REQUEST_TEMPLATE.md\n    │   ├── README.md\n    │   └── secrets.png\n    │\n    ├── fastapi-app/\n    │   ├── venv/\n    │   ├── core/\n    │   │   ├── docs.py\n    │   │   ├── mongoDB.py\n    │   │   └── rdbms.py\n    │   ├── model/\n    │   │   ├── item_model.py\n    │   │   ├── jwt_model.py\n    │   │   └── user_model.py\n    │   ├── repository/\n    │   │   ├── item_repository.py\n    │   │   ├── jwt_repository.py\n    │   │   └── user_repository.py\n    │   ├── router/\n    │   │   ├── item_router.py\n    │   │   ├── jwt_router.py\n    │   │   └── user_router.py\n    │   ├── schema/\n    │   │   ├── item_schema.py\n    │   │   ├── jwt_schema.py\n    │   │   └── user_schema.py\n    │   ├── service/\n    │   │   ├── item_service.py\n    │   │   ├── jwt_service.py\n    │   │   └── user_service.py\n    │   │\n    │   ├── .env\n    │   ├── .env.template\n    │   ├── .gitignore\n    │   ├── dockerfile\n    │   ├── dockerfile.dev\n    │   ├── entrypoint.sh\n    │   ├── main.py\n    │   ├── requirements.txt\n    │   └── setup.txt\n    │\n    ├── react-app/\n    │   ├── public/\n    │   │   └── vite.svg\n    │   ├── src/\n    │   │   ├── assets/\n    │   │   │   └── vite.svg\n    │   │   ├── App.css\n    │   │   ├── App.jsx\n    │   │   ├── index.css\n    │   │   └── main.jsx\n    │   │\n    │   ├── .env\n    │   ├── .env.template\n    │   ├── .gitignore\n    │   ├── dockerfile\n    │   ├── eslint.config.js\n    │   ├── index.html\n    │   ├── package-lock.json\n    │   ├── package.json\n    │   ├── README.md\n    │   └── vite.config.js\n    │\n    ├── springboot-app/\n    │   ├── gradle/\n    │   │   └── wrapper/\n    │   │       ├── gradle-wrapper.jar\n    │   │       └── gradle-wrapper.properties\n    │   ├── src/\n    │   │   ├── main/\n    │   │   │   ├── java/com/inha/springbootapp/\n    │   │   │   │   ├── domain/\n    │   │   │   │   │   ├── common/\n    │   │   │   │   │   │   ├── controller/\n    │   │   │   │   │   │   │   └── HelloController.java\n    │   │   │   │   │   │   ├── dto/\n    │   │   │   │   │   │   │   ├── CommonResponse.java\n    │   │   │   │   │   │   │   └── ExceptionResponse.java\n    │   │   │   │   │   │   └── entity/\n    │   │   │   │   │   │       └── Timestamped.java\n    │   │   │   │   │   └── user/\n    │   │   │   │   │       ├── controller/\n    │   │   │   │   │       │   └── UserController.java\n    │   │   │   │   │       ├── dto/\n    │   │   │   │   │       │   ├── requestDto/\n    │   │   │   │   │       │   │   └── SignUpRequest.java\n    │   │   │   │   │       │   ├── responseDto/\n    │   │   │   │   │       │   │   └── SignUpResponse.java\n    │   │   │   │   │       │   └── vo/\n    │   │   │   │   │       │       └── RDBMSUserVo.java\n    │   │   │   │   │       ├── entity/\n    │   │   │   │   │       │   ├── MongoDBUser.java\n    │   │   │   │   │       │   └── RDBMSUser.java\n    │   │   │   │   │       ├── repository/\n    │   │   │   │   │       │   ├── noSql/\n    │   │   │   │   │       │   │   └── UserRepositoryWithMongoDB.java\n    │   │   │   │   │       │   └── rdbms/\n    |   │   │   │   │       │       ├── queryDsl/\n    |   |   │   │   │       │       │   ├── UserQueryRepository.java\n    |   │   │   │   │       │       │   └── UserQueryRepositoryImpl.java\n    │   │   │   │   │       │       └── UserRepositoryWithRDBMS.java\n    │   │   │   │   │       └── service/\n    │   │   │   │   │           └── UserService.java\n    │   │   │   │   ├── global\n    │   │   │   │   │   ├── config/\n    │   │   │   │   │   │   ├── GlobalCorsConfig.java\n        │   │   │   │   │   ├── JpaConfig.java\n    │   │   │   │   │   │   └── QueryDSLConfig.java\n    │   │   │   │   │   └── exception/\n    │   │   │   │   │       └── GlobalExceptionHandler.java\n    │   │   │   │   └── springbootAppApplication.java\n    │   │   │   └── resources/\n    │   │   │       ├── application.yml\n    │   │   │       ├── application.yml.template\n    │   │   │       └── application.properties.template\n    │   │   └── test/\n    │   │       └── java/com/inha/springbootapp/\n    │   │           └── springbootAppApplicationTest.java\n    │   │\n    │   ├── .env\n    │   ├── .env.template\n    │   ├── .gitignore\n    │   ├── build.gradle\n    │   ├── dockerfile\n    │   ├── gradlew\n    │   ├── gradlew.bat\n    │   └── settings.gradle\n    │\n    ├── .env\n    ├── .env.template\n    ├── .gitattributes\n    ├── .gitignore\n    └── docker-compose.yml\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpastjung%2Fproject-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpastjung%2Fproject-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpastjung%2Fproject-template/lists"}