{"id":25122769,"url":"https://github.com/f-lab-edu/tiny-nginx","last_synced_at":"2025-04-23T01:12:11.932Z","repository":{"id":38380711,"uuid":"445113994","full_name":"f-lab-edu/tiny-nginx","owner":"f-lab-edu","description":"Nginx를 모티브로 한 캐싱과 로드밸런싱 기능을 포함한 리버스 프록시 서버입니다.","archived":false,"fork":false,"pushed_at":"2024-01-03T16:33:32.000Z","size":314,"stargazers_count":7,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-23T01:12:05.897Z","etag":null,"topics":["caching","java","load-balancer","lyan","reverse-proxy"],"latest_commit_sha":null,"homepage":"","language":"Java","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/f-lab-edu.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}},"created_at":"2022-01-06T09:32:35.000Z","updated_at":"2024-10-28T01:20:32.000Z","dependencies_parsed_at":"2022-07-12T14:30:49.902Z","dependency_job_id":null,"html_url":"https://github.com/f-lab-edu/tiny-nginx","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Ftiny-nginx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Ftiny-nginx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Ftiny-nginx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/f-lab-edu%2Ftiny-nginx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/f-lab-edu","download_url":"https://codeload.github.com/f-lab-edu/tiny-nginx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250349060,"owners_count":21415914,"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":["caching","java","load-balancer","lyan","reverse-proxy"],"created_at":"2025-02-08T07:15:15.019Z","updated_at":"2025-04-23T01:12:11.917Z","avatar_url":"https://github.com/f-lab-edu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tiny Nginx\n\n`Tiny Nginx` 는 [Nginx](https://www.nginx.com/) 를 모티브로 한 캐싱과 로드밸런싱 기능을 포함한 리버스 프록시 서버입니다.\n\n본 프로젝트는 대규모의 트래픽을 처리하기 위하여 개발자들이 직면한 문제는 무엇인지, 그 문제점을 Nginx 는 어떻게 해결했는지에 대한 궁금증으로부터 시작되었습니다.\n\n\u003cbr/\u003e\n\n## 프로젝트 목표\n\n- 대규모의 트래픽의 분산 처리와 캐싱을 통해 부하를 줄이는 기능을 구현하는 것이 목표입니다.\n- 단순한 기능 구현뿐만 아니라 직접 구현해보며 동작 원리를 이해하는 것이 목표입니다.\n- 객체 지향 원리를 적용하여 유지 보수가 용이한 코드를 작성하는 것이 목표입니다.\n- 효율적인 성능 테스트를 위한 CI/CD 파이프라인을 구축하여 자동화하는 것이 목표입니다.\n\n\u003cbr/\u003e\n\n## 시스템 구성도\n\n![Tiny Nginx Architecture](https://user-images.githubusercontent.com/51159167/176765439-af5f2257-30f6-4f52-92be-7b50245deb11.jpg)\n\n- 빌드와 테스트를 자동화하여 개발 효율성을 높이기 위해 [CircleCi](https://circleci.com/) 를 활용하였습니다.\n- 서버의 상태를 시각적으로 모니터링하기 위하여 [Prometheus](https://prometheus.io/) 와 [Grafana](https://grafana.com/) 를 활용였습니다.\n- 부하 테스트를 통해 서버의 성능을 체크하기 위해 [Gatling](https://gatling.io/) 을 활용하였습니다. 이 도구는 CircleCi 및 Prometheus, Grafana 와의 높은 호환성에\n  따라 [k6](https://k6.io/) 로 대체될 예정입니다.\n\n\u003cbr/\u003e\n\n## 사용 기술 및 개발 환경\n\n- Java11\n- Maven\n- Netty\n- Google Cloud Platform(GCP)\n- CircleCi\n- Prometheus\n- Grafana\n- Gatling (k6로 대체될 예정)\n- IntelliJ\n\n\u003cbr/\u003e\n\n## Git Branch 전략\n\nWorkflow는 `feature`, `main`, `release`, `hotfix` 4가지의 브랜치로 나누어 작업하고 있고, 모든 브랜치에 대해 Pull Request를 통한 코드 리뷰 완료 후 Merge를 하고\n있습니다.\n\n\u003e **Keyword**\n\u003e - `feature` : 기능의 구현을 담당하는 브랜치\n\u003e - `main` : 개발된 내용을 배포하기 위한 브랜치\n\u003e - `release` : 최종적으로 배포되는 브랜치\n\u003e - `hotfix` : 배포된 소스에서 버그가 발생하면 생성되는 브랜치\n\n\u003cbr/\u003e\n\n브랜치 전략은 다음과 같습니다.\n\n1. 구현할 기능을 Origin 레포지토리의 `feautre/{기능명}` 브랜치에서 개발을 하고 Commit log를 작성합니다.\n2. 작업이 완료되면 Upstream 레포지토리의 `main` 브랜치에 Pull Request를 합니다.\n3. 계획했던 기능이 모두 완성되고 이상이 없으면, `main` 브랜치에서 `release` 브랜치를 생성합니다.\n4. `release` 브랜치에서 버그가 발생하면 `hotfix` 브랜치를 생성하여 수정합니다. 오류 수정이 완료되면 `release` 브랜치와 `main` 브랜치에 각각 merge 합니다.\n\n\u003cbr/\u003e\n\n## Wiki\n\n`Tiny Nginx` 에 대한 상세한 설명과 기술적인 고민들을 확인하실 수 있습니다.\n\n- [Wiki Home](https://github.com/f-lab-edu/tiny-nginx/wiki)\n- [기능 정의](https://github.com/f-lab-edu/tiny-nginx/wiki/%EA%B8%B0%EB%8A%A5-%EC%A0%95%EC%9D%98)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff-lab-edu%2Ftiny-nginx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff-lab-edu%2Ftiny-nginx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff-lab-edu%2Ftiny-nginx/lists"}