Skip to content

Commit

Permalink
ETC : 온보딩을 위한 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
jiminChoi committed Dec 26, 2024
2 parents f13d3c2 + 2c580f1 commit 2e9a0d5
Show file tree
Hide file tree
Showing 862 changed files with 45,980 additions and 28,381 deletions.
46 changes: 46 additions & 0 deletions .github/ISSUE_TEMPLATE/ui_improvement.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: "UI 개선 건의"
description: UI 개선 건의 작성 기본 양식입니다.
labels: ["ui"]
body:
- type: markdown
attributes:
value: |
작성 예시 : "[FE] 지도-E/V 버튼 눌렀을때 나타나는 로고 색 다크모드 적용"
- type: textarea
id: ui-description
attributes:
label: UI 문제점 설명
description: 문제가 언제/어떻게 발생했는지 명확하게 적어주세요.
placeholder: 설명을 적어주세요.
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: 재현 방법
description: 문제가 재현되는 상황을 설명해주세요.
placeholder: 설명을 적어주세요.
validations:
required: true
- type: textarea
id: improvement
attributes:
label: 기대하는 UI
description: 기대하는 UI에 대해서 설명해주세요.
placeholder: 설명을 적어주세요.
validations:
required: true
- type: textarea
id: system-info
attributes:
label: 시스템 환경 (선택 사항)
description: 현재 버그가 발생한 시스템 환경을 적어주세요.
render: shell
placeholder: OS, 브라우저 등을 적어주세요.
validations:
required: false
- type: textarea
id: additional-context
attributes:
label: 추가 건의사항
description: Cabi에 바라시는 점이나, 하시고 싶은 말씀을 적어주세요.
40 changes: 40 additions & 0 deletions .github/workflows/branch-cleaner.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Cleaning Up Stale Branches

permissions:
contents: write

on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *" # Every day at 00:00 UTC (KST 09:00)

env:
DAYS_BEFORE_STALE: 30
DAYS_BEFORE_DELETE: 7

jobs:
cleanup-stale-branches:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cleaning up Stale Branches
uses: sichoi42/cleanup-stale-branch@v1
id: stale
with:
days-before-stale: ${{ env.DAYS_BEFORE_STALE }}
days-before-delete: ${{ env.DAYS_BEFORE_DELETE }}
ignoring-branches: "main,dev,onboard,nestJS"
ignore-branches-pattern: "release/*"
# FIXME: Set dry-run to false when you are ready to delete branches
dry-run: false
use-webhook: true
webhook-url: ${{ secrets.DISCORD_GITHUB_WEBHOOK_URL }}
webhook-type: "discord"
stale-branch-message: >
This branch is considered stale because ${{ env.DAYS_BEFORE_STALE }} days have passed since the last commit.
If you still need this branch, please push a new commit to keep it alive.
If not, this branch will be deleted in ${{ env.DAYS_BEFORE_DELETE }} days.
delete-branch-message: >
This branch was deleted because ${{ env.DAYS_BEFORE_DELETE }} days have passed since the last commit.
- name: Print outputs
run: echo ${{ format('{0},{1}', toJSON(steps.stale.outputs.staled-branches), toJSON(steps.stale.outputs.deleted-branches)) }}
12 changes: 8 additions & 4 deletions .github/workflows/front-cicd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,20 @@ jobs:
if: ${{ github.ref == 'refs/heads/dev' }}
run: |
cd frontend
mkdir -p dist/src/assets
cp -r src/assets/images dist/src/assets
mkdir -p dist/src/Cabinet/assets
mkdir -p dist/src/Presentation/assets
cp -r src/Cabinet/assets/images dist/src/Cabinet/assets
cp -r src/Presentation/assets/images dist/src/Presentation/assets
aws s3 sync ./dist s3://dev.cabi
aws cloudfront create-invalidation --distribution-id EWPTW52IH5L5C --paths '/*'
- name: Main S3에 배포 및 CloudFront 캐시 무효화
if: ${{ github.ref == 'refs/heads/main' }}
run: |
cd frontend
mkdir -p dist/src/assets
cp -r src/assets/images dist/src/assets
mkdir -p dist/src/Cabinet/assets
mkdir -p dist/src/Presentation/assets
cp -r src/Cabinet/assets/images dist/src/Cabinet/assets
cp -r src/Presentation/assets/images dist/src/Presentation/assets
aws s3 sync ./dist s3://42cabi
aws cloudfront create-invalidation --distribution-id E12WMB9HCNB1DT --paths '/*'
47 changes: 47 additions & 0 deletions .github/workflows/stale.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Close Stale Issues/PRs

permissions:
issues: write
pull-requests: write

on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *" # Every day at 00:00 UTC (KST 09:00)

env:
OPERATIONS_PER_RUN: 128
DAYS_BEFORE_ISSUE_STALE: 30
DAYS_BEFORE_ISSUE_CLOSE: 3
DAYS_BEFORE_PR_STALE: 30
DAYS_BEFORE_PR_CLOSE: 3

jobs:
close-stale-issues-and-prs:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v8
with:
operations-per-run: ${{ env.OPERATIONS_PER_RUN }}
days-before-issue-stale: ${{ env.DAYS_BEFORE_ISSUE_STALE }}
days-before-issue-close: ${{ env.DAYS_BEFORE_ISSUE_CLOSE }}
exempt-issue-labels: "no stale"
stale-issue-label: "stale"
stale-issue-message: >
해당 이슈는 지난 ${{ env.DAYS_BEFORE_ISSUE_STALE }}일 동안 활동이 없어서 "stale" 상태로 표시되었어요.
${{ env.DAYS_BEFORE_ISSUE_CLOSE }}일 이내에 "no stale"으로 태그가 지정되거나 다른 활동이 발생하지 않으면 자동으로 닫힐 예정입니다.
close-issue-message: >
해당 이슈는 "stale" 상태로 표시된 후 ${{ env.DAYS_BEFORE_ISSUE_CLOSE }}일 동안 활동이 없어서 자동으로 닫혔어요.
remove-issue-stale-when-updated: true
days-before-pr-stale: ${{ env.DAYS_BEFORE_PR_STALE }}
days-before-pr-close: ${{ env.DAYS_BEFORE_PR_CLOSE }}
exempt-pr-labels: "no stale"
stale-pr-label: "stale"
stale-pr-message: >
해당 PR은 지난 ${{ env.DAYS_BEFORE_PR_STALE }}일 동안 활동이 없어서 "stale" 상태로 표시되었어요.
${{ env.DAYS_BEFORE_PR_CLOSE }}일 이내에 "no stale"으로 태그가 지정되거나 다른 활동이 발생하지 않으면 자동으로 닫힐 예정입니다.
해당 PR이 "stale" 상태로 표시되지 않기를 원하면 이 PR에 코멘트를 남겨주세요.
close-pr-message: >
해당 PR은 "stale" 상태로 표시된 후 ${{ env.DAYS_BEFORE_PR_CLOSE }}일 동안 활동이 없어서 자동으로 닫혔어요.
remove-pr-stale-when-updated: true
repo-token: ${{ secrets.GITHUB_TOKEN }}
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ lerna-debug.log*
*.launch
.settings/
*.sublime-workspace
*.imi
.idea/*

# IDE - VSCode
.vscode/*
Expand All @@ -37,6 +39,8 @@ lerna-debug.log*

# IDE - WebStrom
**/*.idea
**/*.iml
misc.xml

#env
.env
Expand All @@ -56,4 +60,9 @@ ibdata*
ibtmp*
*nohup.out
/backend/src/main/resources/test/resources/
.idea/modules.xml
.idea/workspace.xml

redis/data/*
/idea workspace.xml misc.xml
/d382cf00936882c2/
10 changes: 10 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

57 changes: 33 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<a href="https://cabi.oopy.io/">
<img src="https://github-production-user-asset-6210df.s3.amazonaws.com/13278955/278554161-83bfed83-e148-44e5-8389-b49598725ce4.png" width="400px" alt="Cabi" />
</a>

[![GitHub Stars](https://img.shields.io/github/stars/innovationacademy-kr/42cabi?style=for-the-badge)](https://github.com/innovationacademy-kr/42cabi/stargazers) [![GitHub Stars](https://img.shields.io/github/issues/innovationacademy-kr/42cabi?style=for-the-badge)](https://github.com/innovationacademy-kr/42cabi/issues) [![Current Version](https://img.shields.io/badge/version-4.0.0-black?style=for-the-badge)](https://github.com/IgorAntun/node-chat) [![GitHub License](https://img.shields.io/github/license/innovationacademy-kr/42cabi?style=for-the-badge)](https://github.com/IgorAntun/node-chat/issues)

</div>
Expand All @@ -12,6 +12,7 @@
- [💬 프로젝트 소개](#-프로젝트-소개)
- [🛠 기술 스택](#-기술-스택)
- [🧑‍💻 프로젝트 멤버](#-프로젝트-멤버)

<!-- - [🗂 위키](#-위키) -->

<br/>
Expand All @@ -35,12 +36,23 @@
- 캐비닛마다 `READ` / `UPDATE` 가능한 메모장을 제공합니다.
- 공유 캐비닛의 경우, 캐비닛 사용자들끼리만 공유 가능한 메모장을 제공합니다.

### 서비스 이용안내

- https://cabi.oopy.io/d208e0c9-1022-4c88-be6d-94f191899111

### 수상 내역 🏆

- 이노베이션아카데미 성과 공유 컨퍼런스 2024 **과학기술정보통신부 장관상(🥇대상)** 수상 (2024)
- 이노베이션아카데미 성과 공유 컨퍼런스 2023 **정보통신기획평가원 원장상(🥈최우수상)** 수상 (2023)
- 이노베이션아카데미 성과 공유 컨퍼런스 2022 **이노베이션 아카데미 학장상(🥉우수상)** 수상 (2022)

### 기술적 도전

- 지속할 수 있고, 확장할 수 있는 서비스를 지향하고, 한정된 자원으로 **증가하는 사용자**들에게 양질의 서비스를 제공하기 위해 **Cabi 팀**은 다음과 같이 노력했습니다:

#### [Common](https://github.com/innovationacademy-kr/42cabi/)

- 코드 리뷰를 통해 팀원들의 코드 품질을 향상시키고, 팀원들 간의 지식 공유를 통해 개발자들의 역량을 향상시켰습니다.
- 유지/보수와 기능 추가가 용이하도록 코딩 컨벤션을 정하고, 문서화 작업 및 이슈 관리를 체계화했습니다.
- Notion, Slack 등의 협업 툴들을 이용하여 팀원 간 정보 시차와 격차를 줄였습니다.
- 주기적이지만 유동적인 회의를 통해 목표와 분업을 명확히 하여 효과적인 협업을 진행했습니다.
Expand All @@ -57,18 +69,25 @@
#### [BackEnd](https://github.com/innovationacademy-kr/42cabi/tree/dev/backend)

- 사용자가 층별로 캐비닛 정보를 조회할 때 빠른 응답속도를 위해 쿼리 최적화로 성능을 향상했습니다.
- 공유 캐비닛 서비스를 구현하며 캐비닛 대여/반납 시 발생할 수 있는 여러 경우를 원활하게 제어하기 위해 캐비닛 상태에 따라 처리하게끔 DFA 알고리즘을 적용했습니다.
- 동시에 들어오는 요청에 대해 특정 요청이 실패할 경우, 무결성을 위해 대여/반납의 과정을 트랜잭션으로 관리하였으며 격리 수준 구별로 데드락을 방지했습니다.
- 블랙홀에 빠진 사용자(퇴학 처리된 사용자)를 적절하게 처리하도록 42API를 사용하였고 블랙홀 스케줄링을 고안, 적용했습니다.
- 기존 버전에서 Express.js로 작성된 코드를 IoC, DI, AOP를 이용, 유지보수에 유리한 Nest.js로 포팅했습니다.
- 불필요한 정보를 저장하는 컬럼을 제거, 트랜잭션의 로직을 재구성하는 등 DB 구조를 개선했습니다.
- 공유 캐비닛에서 발생하는 동시성 문제를 해결하기 위해 적절한 락 전략을 구성하고, 데드락을 방지하는 로직을 구현했습니다.
- 블랙홀에 빠진 사용자(퇴학 처리된 사용자)를 적절하게 처리하기 위해 스케줄러를 구성하여 자동으로 해당 사용자의 접근 및 권한을 정리하고 시스템에서 안전하게 제거하도록 했습니다.
- 연체/대여/반납 등 중요한 이벤트에 대해 사용자에게 알림을 제공함으로써 사용자가 서비스를 더욱 편리하게 이용할 수 있도록 했습니다.
- 로깅, 인증과 같은 횡단 관심사에 대해 AOP를 적용하여 중복되는 코드를 줄이고, 유지보수성을 높였습니다.
- CI 워크플로우를 구축하여 빌드, 테스트를 자동화하여 개발자들의 생산성을 높였습니다.
- CD 워크플로우를 구축하여 배포과정을 자동화하여 안정적인 서비스를 제공했습니다.
- 효율적인 인프라 구조를 설계하여 보다 효율적이고 확장가능성을 가지며, 안정적인 서비스를 제공했습니다.
- Prometheus/Grafana + 핀포인트를 활용한 모니터링 시스템을 구축하여, 문제 발생시, 빠르게 대응하여 문제의 원인을 파악하고 해결할 수 있도록 기반을 마련했습니다.

<br/>

## 🕸️ 인프라 구조도

![Untitled](https://github.com/innovationacademy-kr/Cabi/assets/83565255/165c1529-6164-4988-9495-6bc2ba3ef0ab)

## 🛠 기술 스택

<div>

<table border="1">
<th align="center">분야</th>
<th align="center">기술스택</th>
Expand All @@ -79,9 +98,6 @@
<td>컴파일 타임에 에러를 검출하여 서비스 과정에서 발생할 수 있는 오류를 최소화했습니다.</td>
</tr>
<tr>
<td><img src="https://eslint.org/icon-512.png" width="15px" alt="_icon" /> ESLint</td>
<td>코딩 컨벤션에 위배되거나 안티 패턴을 미리 검출하여 에러 발생 요소를 줄였습니다.</td>
</tr>
<tr>
<td><img src="https://creazilla-store.fra1.digitaloceanspaces.com/icons/3256745/file-type-light-prettier-icon-md.png" width="15px" alt="_icon" /> Prettier</td>
<td>기본적인 코딩룰 적용으로 가독성 향상 및 코드 양식을 통일했습니다.</td>
Expand All @@ -105,24 +121,17 @@
</tr>
<tr>
<td rowspan="5" align="center">Back-End</td>
<td><img src="https://docs.nestjs.com/assets/logo-small.svg" width="15px" alt="_icon" /> NestJS</td>
<td>Express.js 대비 낮은 자유도로 협업에 적합한 프레임워크로 판단했고, IoC, DI, AOP를 통해 유지보수성을 높였습니다.</td>
<td><img src="https://cdn.simpleicons.org/spring/#6DB33F.svg" width="15px" alt="_icon" /> Spring Framework</td>
<td>Spring Framework 기반의 프로젝트로, 다양한 레퍼런스와 라이브러리를 활용하여 안정적인 서비스를 구축했습니다.</td>
</tr>
<tr>
<td><img src="https://static-00.iconduck.com/assets.00/mariadb-icon-512x340-txozryr2.png" width="18px" alt="_icon" /> MariaDB</td>
<td>활성화된 커뮤니티를 통해 여러 레퍼런스를 이용, 개발 중 발생하는 여러 문제들을 해결했습니다.</td>
</tr>
<tr>
<td><img src="https://seeklogo.com/images/T/typeorm-logo-F243B34DEE-seeklogo.com.png" width="15px" alt="_icon" /> TypeORM</td>
<td>Raw query로 작성하는 것보다 용이하고 추후 다른 DBMS로 쉽게 전환 가능한 라이브러리로, 이를 이용해 유지보수성을 높였습니다.</td>
</tr>
<tr>
<td><img src="https://static-00.iconduck.com/assets.00/swagger-icon-512x512-halz44im.png" width="15px" alt="_icon" /> Swagger</td>
<td>명확한 HTTP API 명세를 통해 프론트엔드/백엔드의 원활한 협업을 이뤘습니다.</td>
</tr>
<tr>
<td><img src="http://www.passportjs.org/images/logo.svg" width="15px" alt="_icon" /> Passport</td>
<td>OAuth2 인증 방식 적용에 용이한 라이브러리로, 서버 자체 토큰 및 42 인트라 인증에 사용했습니다.</td>
</tr>
<tr>
<td rowspan="5" align="center">Infra</td>
Expand All @@ -133,18 +142,18 @@
<td><img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/AWS_Simple_Icons_AWS_Cloud.svg/2560px-AWS_Simple_Icons_AWS_Cloud.svg.png" width="15px" alt="_icon" /> AWS</td>
<td>비용효율적이고 신뢰도가 높은 웹서비스로 판단, EC2/RDS/S3/CloudFront 등의 솔루션들을 사용하여 신속하고 안정적인 서비스 환경을 구성했습니다.</td>
</tr>
<tr>
<td><img src="https://raw.githubusercontent.com/unitech/pm2/master/pres/pm2.20d3ef.png" width="40px" alt="_icon" />PM2</td>
<td>서버 앱 프로세스의 명확한 관리와 무중단 서비스에 사용했습니다.</td>
</tr>
<tr>
<td><img src="https://www.docker.com/wp-content/uploads/2022/03/Moby-logo.png" width="15px" alt="_icon" /> Docker</td>
<td>컨테이너를 통해 통일된 로컬 개발환경을 설정하여 개발의 호환성을 높였습니다.</td>
<td>컨테이너를 통해 프러덕션과 로컬 환경의 동일성을 유지하고, 배포과정을 자동화하여 개발환경의 일관성을 유지했습니다.</td>
</tr>
<tr>
<td><img src="https://avatars.githubusercontent.com/u/44036562?s=280&v=4" width="15px" alt="_icon" /> Github Actions</td>
<td>CI/CD를 통해 테스트, 배포를 자동화하여 무중단 서비스를 지원, 효율성과 효과성을 높였습니다.</td>
</tr>
<tr>
<td><img src="https://cdn.simpleicons.org/prometheus/#E6522C.svg" width="15px" alt="_icon" /> <img src="https://cdn.simpleicons.org/grafana/##F46800.svg" width="15px" alt="_icon" />Prometheus/Grafana</td>
<td>애플리케이션 서버의 상태를 모니터링하여 이상 징후를 빠르게 파악하고 대응하여 서비스의 안정성을 높였습니다.</td>
</tr>
</table>

</div>
Expand Down
2 changes: 1 addition & 1 deletion backend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,4 @@ application*.yml
**/static/docs

### Firebase ###
*firebase*.json
*firebase*.json
Loading

0 comments on commit 2e9a0d5

Please sign in to comment.