safe-development-practice.mdc 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. # 🛡️ 안전한 개발 실천 규칙 (Safe Development Practice)
  2. ## 핵심 원칙: "기존 기능 우선 보호"
  3. **모든 기능 수정, 추가, 버그 픽스 시 기존 정상 기능들이 영향받지 않도록 사전 체크 및 안전장치 적용이 최우선**
  4. ---
  5. ## 📋 필수 체크리스트
  6. ### Phase 1: 사전 영향도 분석 (Pre-Impact Analysis)
  7. - [ ] **기존 기능 매핑**: 수정할 영역과 연관된 모든 기존 기능 식별
  8. - [ ] **API 의존성 분석**: 기존 API 엔드포인트, 요청/응답 형식 확인
  9. - [ ] **데이터베이스 스키마 확인**: 테이블, 제약조건, 인덱스 영향도 분석
  10. - [ ] **프론트엔드 연동 확인**: 컴포넌트, 라우팅, 상태관리 영향도 분석
  11. ### Phase 2: 안전한 설계 (Safe Design)
  12. - [ ] **독립적 구조**: 새 기능은 기존 기능과 분리된 독립적 구조로 설계
  13. - [ ] **하위 호환성**: 기존 API 스펙, 데이터 형식 유지
  14. - [ ] **점진적 적용**: 한 번에 여러 영역 수정하지 않고 단계별 적용
  15. - [ ] **롤백 계획**: 문제 발생 시 즉시 이전 상태로 복구 가능한 계획 수립
  16. ### Phase 3: 구현 중 안전장치 (Implementation Safeguards)
  17. - [ ] **새로운 API 엔드포인트**: 기존 API 수정 대신 새 엔드포인트 생성
  18. - [ ] **별도 메서드/함수**: 기존 로직 수정 대신 새 메서드 생성
  19. - [ ] **데이터 아카이브**: 기존 데이터 삭제 대신 비활성화 또는 아카이브
  20. - [ ] **조건부 활성화**: 플래그나 설정을 통한 새 기능 조건부 활성화
  21. ### Phase 4: 테스트 및 검증 (Testing & Validation)
  22. - [ ] **기존 기능 회귀 테스트**: 모든 기존 기능 정상 작동 확인
  23. - [ ] **API 응답 검증**: 기존 API 응답 형식 및 데이터 정확성 확인
  24. - [ ] **데이터 무결성 검증**: 데이터베이스 제약조건, 관계 정상 확인
  25. - [ ] **UI/UX 검증**: 기존 화면 및 사용자 플로우 정상 작동 확인
  26. ---
  27. ## 🚫 금지사항 (Never Do)
  28. ### 기존 코드 직접 수정 금지
  29. ```javascript
  30. // ❌ 기존 함수 직접 수정
  31. function existingFunction() {
  32. // 기존 로직
  33. // 새로운 로직 추가 - 위험!
  34. }
  35. // ✅ 새로운 함수 생성
  36. function newFeatureFunction() {
  37. // 새로운 로직
  38. }
  39. ```
  40. ### 기존 API 스펙 변경 금지
  41. ```javascript
  42. // ❌ 기존 API 응답 형식 변경
  43. {
  44. "success": true,
  45. "data": [], // 기존 구조 변경 - 위험!
  46. "newField": "새 필드 추가" // 브레이킹 체인지
  47. }
  48. // ✅ 새로운 API 엔드포인트
  49. POST /api/new-feature
  50. {
  51. "success": true,
  52. "data": {
  53. "newStructure": "새 구조"
  54. }
  55. }
  56. ```
  57. ### 데이터베이스 파괴적 변경 금지
  58. ```sql
  59. -- ❌ 기존 테이블/컬럼 삭제
  60. DROP TABLE existing_table;
  61. ALTER TABLE users DROP COLUMN important_field;
  62. -- ✅ 새로운 테이블/컬럼 추가
  63. CREATE TABLE new_feature_table (...);
  64. ALTER TABLE users ADD COLUMN new_optional_field VARCHAR(255);
  65. ```
  66. ---
  67. ## 🔧 안전한 수정 패턴
  68. ### 1. 기능 확장 패턴
  69. ```javascript
  70. // 기존 기능 유지하면서 확장
  71. class OriginalService {
  72. existingMethod() {
  73. // 기존 로직 그대로 유지
  74. }
  75. newMethod() {
  76. // 새로운 기능 추가
  77. }
  78. }
  79. ```
  80. ### 2. 조건부 분기 패턴
  81. ```javascript
  82. function processRequest(type) {
  83. if (type === 'existing') {
  84. return existingLogic(); // 기존 로직
  85. } else if (type === 'new') {
  86. return newLogic(); // 새 로직
  87. }
  88. }
  89. ```
  90. ### 3. 데코레이터/래퍼 패턴
  91. ```javascript
  92. function enhancedFunction(originalFunction) {
  93. return function(...args) {
  94. // 새로운 전처리
  95. const result = originalFunction(...args); // 기존 로직
  96. // 새로운 후처리
  97. return result;
  98. };
  99. }
  100. ```
  101. ---
  102. ## 📊 영향도 매트릭스
  103. | 수정 영역 | 기존 기능 영향도 | 안전장치 |
  104. |-----------|------------------|----------|
  105. | 새 API 추가 | 🟢 낮음 | 독립적 엔드포인트 |
  106. | 기존 API 수정 | 🔴 높음 | 하위 호환성 보장 |
  107. | 새 DB 테이블 | 🟢 낮음 | 독립적 스키마 |
  108. | 기존 DB 수정 | 🟡 중간 | 비파괴적 변경만 |
  109. | 새 UI 컴포넌트 | 🟢 낮음 | 별도 컴포넌트 |
  110. | 기존 UI 수정 | 🟡 중간 | 조건부 렌더링 |
  111. ---
  112. ## 🚨 긴급 상황 대응
  113. ### 기존 기능 장애 발생 시
  114. 1. **즉시 롤백**: 새 기능 비활성화 또는 이전 버전 복구
  115. 2. **원인 분석**: 어떤 변경이 기존 기능에 영향을 주었는지 분석
  116. 3. **긴급 패치**: 기존 기능 복구를 최우선으로 처리
  117. 4. **재설계**: 안전한 방식으로 새 기능 재구현
  118. ### 롤백 절차
  119. ```bash
  120. # 1. 즉시 이전 상태로 복구
  121. git revert HEAD
  122. git push origin main
  123. # 2. 데이터베이스 복구 (필요시)
  124. mysql -u root -p < backup_before_change.sql
  125. # 3. 캐시 클리어
  126. redis-cli FLUSHALL
  127. ```
  128. ---
  129. ## 📝 체크리스트 템플릿
  130. ### 기능 수정 전 체크
  131. ```markdown
  132. ## 기능 수정 안전성 체크리스트
  133. **수정 날짜**: ___________
  134. **수정자**: ___________
  135. **수정 내용**: ___________
  136. ### Phase 1: 영향도 분석
  137. - [ ] 관련 기존 기능 목록 작성
  138. - [ ] API 의존성 확인
  139. - [ ] 데이터베이스 영향도 확인
  140. - [ ] 프론트엔드 영향도 확인
  141. ### Phase 2: 안전한 설계
  142. - [ ] 독립적 구조 설계
  143. - [ ] 하위 호환성 보장
  144. - [ ] 롤백 계획 수립
  145. ### Phase 3: 구현
  146. - [ ] 새로운 엔드포인트/메서드 사용
  147. - [ ] 기존 코드 직접 수정 없음
  148. - [ ] 조건부 활성화 적용
  149. ### Phase 4: 테스트
  150. - [ ] 기존 기능 회귀 테스트 완료
  151. - [ ] 새 기능 정상 작동 확인
  152. - [ ] 데이터 무결성 확인
  153. ```
  154. ---
  155. ## 💡 베스트 프랙티스
  156. 1. **"기존 기능 우선"** 마인드셋 유지
  157. 2. **점진적 개발**: 작은 단위로 나누어 안전하게 구현
  158. 3. **충분한 테스트**: 새 기능과 기존 기능 모두 테스트
  159. 4. **문서화**: 변경사항과 안전장치 상세 기록
  160. 5. **팀 공유**: 변경사항을 팀원들과 사전 공유 및 리뷰
  161. **"새로운 기능을 추가하되, 기존의 가치를 지켜라"**
  162. description:
  163. globs:
  164. alwaysApply: false
  165. ---