Skip to content

Commit a05541d

Browse files
authored
Merge pull request #480 from boostcampwm-2024/chore/copilot-instructions
📦 chore: copilot 코드리뷰 instruction 생성
2 parents 1415c27 + e9e082d commit a05541d

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed

.github/copilot-instructions.md

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
# Denamu Project - GitHub Copilot Instructions
2+
3+
## 프로젝트 개요
4+
5+
**데나무(Denamu)** - RSS 기반 기술 블로그 큐레이션 플랫폼
6+
7+
개발자들이 분산된 기술 블로그 콘텐츠를 한 곳에서 편리하게 구독하고, 실시간 트렌드를 확인하며, 커뮤니티를 통해 소통할 수 있는 서비스입니다.
8+
9+
## 프로젝트 구조
10+
11+
### `/server`
12+
13+
- **NestJS 기반 WAS(Web Application Server)**
14+
- TypeORM을 사용한 MySQL 데이터베이스 연동
15+
- Redis를 활용한 캐싱 및 세션 관리
16+
- Socket.IO 기반 실시간 채팅 기능
17+
- JWT 인증 및 OAuth(Google, GitHub) 소셜 로그인
18+
- Prometheus를 통한 모니터링
19+
- Winston을 활용한 구조화된 로깅
20+
21+
### `/feed-crawler`
22+
23+
- **RSS 피드 크롤러 서비스**
24+
- 등록된 RSS 피드를 주기적으로 수집
25+
- AI(Anthropic Claude) 기반 콘텐츠 분석 및 태그 생성
26+
- MySQL 데이터베이스에 수집 데이터 저장
27+
- 의존성 주입(tsyringe) 기반 아키텍처
28+
29+
### `/client`
30+
31+
- **React + TypeScript 기반 프론트엔드**
32+
- Vite 빌드 도구 사용
33+
- TanStack Query를 통한 서버 상태 관리
34+
- Zustand를 통한 클라이언트 상태 관리
35+
- Radix UI + Tailwind CSS 기반 컴포넌트 시스템
36+
- Socket.IO Client로 실시간 채팅 연동
37+
38+
### `/docker-compose`
39+
40+
- **인프라 구성 파일**
41+
- 로컬 개발 환경 (docker-compose.local.yml)
42+
- 개발 서버 환경 (docker-compose.dev.yml)
43+
- 프로덕션 환경 (docker-compose.prod.yml)
44+
- 인프라 서비스 (MySQL, Redis, Prometheus, Grafana)
45+
46+
---
47+
48+
## 코드 리뷰 가이드라인
49+
50+
### 리뷰 언어
51+
52+
코드 리뷰시에는 반드시 한국어를 사용하세요.
53+
54+
### 리뷰 우선순위 (Pn 룰 적용)
55+
56+
코드 리뷰 시 아래 우선순위를 반드시 명시하여 피드백을 제공하세요:
57+
58+
- **P1 (최우선)**: 즉각 수정이 필요한 중대한 문제 (보안 취약점, 크리티컬 버그, 비즈니스 로직 오류)
59+
- **P2 (매우 중요)**: 반드시 반영해야 하는 코드 품질/기능 이슈
60+
- **P3 (중요)**: 잠재적 버그 위험이나 중요한 개선 사항
61+
- **P4 (가벼운 제안)**: 가독성/유지보수성 개선 권장 사항
62+
- **P5 (질문 및 추천)**: 선택적 제안 및 질문
63+
64+
### 백엔드 코드 리뷰 중점 사항
65+
66+
#### 1. 보안 및 잠재 버그 위험 (P1-P2)
67+
68+
- **SQL Injection**: TypeORM 쿼리 빌더 사용 시 raw query 검증
69+
- **인증/인가**: JWT 토큰 검증, refresh token 갱신 로직 확인
70+
- **입력 검증**: class-validator DTO 검증 누락 여부
71+
- **XSS 방지**: 사용자 입력 sanitization 확인
72+
- **Race Condition**: Redis 동시성 제어 (락, 트랜잭션)
73+
- **에러 핸들링**: try-catch 누락, 적절한 HTTP 상태 코드 반환
74+
- **파일 업로드**: 파일 크기 제한, MIME 타입 검증
75+
- **리소스 누수**: DB 커넥션, 파일 핸들러 정리 확인
76+
77+
#### 2. 비즈니스 로직 검증 (P1-P3)
78+
79+
- **데이터 일관성**: 트랜잭션 범위 적절성
80+
- **상태 전이**: 엔티티 상태 변화 로직의 정합성
81+
- **엣지 케이스**: 경계값, null/undefined 처리
82+
- **중복 방지**: 조회수 증가, 좋아요 등 중복 방지 로직
83+
- **도메인 규칙**: 비즈니스 제약 조건 준수 여부
84+
85+
#### 3. 성능 최적화 (P2-P4)
86+
87+
- **N+1 쿼리**: TypeORM relations eager loading 확인
88+
- **인덱스 활용**: WHERE, JOIN 조건에 인덱스 사용
89+
- **캐싱 전략**: Redis 캐시 TTL 적정성, 캐시 무효화 로직
90+
- **페이지네이션**: offset 대신 cursor 기반 페이지네이션 고려
91+
- **불필요한 쿼리**: 중복 DB 호출 제거
92+
- **메모리 사용**: 대용량 데이터 스트리밍 처리
93+
94+
#### 4. 코드 품질 (P3-P5)
95+
96+
- **SOLID 원칙**: 단일 책임, 의존성 역전 준수
97+
- **중복 제거**: DRY 원칙, 공통 로직 추출
98+
- **명명 규칙**: 명확하고 일관된 변수/함수명
99+
- **타입 안정성**: any 타입 남용 방지, 적절한 타입 정의
100+
- **테스트 커버리지**: 주요 비즈니스 로직 단위 테스트
101+
102+
---
103+
104+
## 기술 스택별 권장 사항
105+
106+
### NestJS (Server)
107+
108+
- 모듈화된 구조 유지 (각 기능별 Module, Controller, Service 분리)
109+
- Dependency Injection 적극 활용
110+
- Global Exception Filter로 일관된 에러 응답
111+
- Pipe를 통한 입력 검증 및 변환
112+
- Interceptor로 로깅, 응답 변환 처리
113+
- Guard를 통한 인증/인가 구현
114+
115+
### TypeScript 공통
116+
117+
- strict 모드 활성화 유지
118+
- enum 대신 union type 사용 고려
119+
- 타입 추론 활용, 불필요한 타입 명시 지양
120+
- 유틸리티 타입 적극 활용 (Pick, Omit, Partial 등)
121+
122+
### React (Client)
123+
124+
- 컴포넌트 단일 책임 원칙 준수
125+
- Custom Hooks로 로직 재사용
126+
- useCallback, useMemo로 불필요한 리렌더링 방지
127+
- TanStack Query의 staleTime, cacheTime 적절히 설정
128+
- 접근성(a11y) 고려 (ARIA 레이블, 키보드 네비게이션)
129+
130+
---
131+
132+
## 리뷰 예시
133+
134+
### 좋은 리뷰 예시
135+
136+
```
137+
P1) [보안] JWT 토큰 검증 시 만료 시간(exp) 체크가 누락되었습니다.
138+
만료된 토큰으로도 인증이 통과될 수 있어 즉시 수정이 필요합니다.
139+
140+
P2) [성능] findAll() 메서드에서 전체 데이터를 가져온 후 필터링하고 있습니다.
141+
WHERE 절로 DB 레벨에서 필터링하는 것이 성능상 유리합니다.
142+
143+
P3) [버그 가능성] Redis 캐시 조회 실패 시 에러 핸들링이 없습니다.
144+
Redis 장애 시 서비스 전체가 중단될 수 있으니 fallback 로직을 추가하는 것이 좋겠습니다.
145+
146+
P4) [가독성] 중첩된 if문이 많아 로직 이해가 어렵습니다.
147+
Early return 패턴이나 Guard clause를 활용하면 더 명확해질 것 같습니다.
148+
149+
P5) [제안] lodash 대신 native array 메서드를 사용하면 번들 크기를 줄일 수 있습니다.
150+
성능 차이가 크지 않다면 고려해보시면 좋을 것 같아요.
151+
```
152+
153+
---
154+
155+
## 주의사항
156+
157+
- **배포 전 체크리스트**: 환경변수 설정, 마이그레이션 실행, 테스트 통과 확인
158+
- **로깅**: 민감 정보(비밀번호, 토큰) 로그 출력 금지
159+
- **에러 메시지**: 프로덕션에서는 상세 에러 스택 노출 방지
160+
- **API 버전 관리**: Breaking change 시 API 버전업 고려
161+
- **DB 마이그레이션**: 데이터 손실 방지를 위한 롤백 계획 수립

0 commit comments

Comments
 (0)