Skip to content

Latest commit

 

History

History
330 lines (260 loc) · 8.09 KB

File metadata and controls

330 lines (260 loc) · 8.09 KB

DuriAhnRian 개발 컨벤션

👥 팀 구성 및 역할 분담

🔵 진호 담당 영역

  • User Domain: 사용자 계정, 소셜 로그인, 프로필 관리
  • Emotion Domain: 감정 분석, 일기 기능, 감정 지수 산출
  • Auth: 인증/인가 시스템

🟢 형준 담당 영역

  • Pet Domain: 펫 아바타 생성, 커스터마이징, 상태 관리
  • Room Domain: 방 꾸미기, 아이템 배치, 테마 설정
  • Item Domain: 포인트 시스템, 아이템 상점, 경제 시스템

🟡 정현 담당 영역

  • Social Domain: 친구 관계, 방문, 댓글, 방명록
  • Community Domain: 이벤트, 그룹, 콘테스트
  • Privacy Domain: 권한 관리, 차단, 신고 시스템

📁 프로젝트 구조 및 패키지 네이밍

src/main/java/com/duriahnrian/
├── domain/           # 도메인 모델 (공통)
│   ├── user/         # 사용자 관련 (진호)
│   ├── pet/          # 펫 관련 (형준)  
│   ├── room/         # 방 관련 (형준)
│   ├── social/       # 소셜 기능 (정현)
│   ├── item/         # 아이템/포인트 (형준)
│   └── emotion/      # 감정 분석 (진호)
├── application/      # 애플리케이션 서비스
├── infrastructure/   # 인프라스트럭처
└── presentation/     # 컨트롤러

📝 코딩 컨벤션

클래스 네이밍

// Entity
@Entity
public class User { }
public class Pet { }
public class Room { }

// Repository  
public interface UserRepository extends JpaRepository<User, Long> { }

// Service
@Service
public class UserService { }

// Controller
@RestController
public class UserController { }

// DTO
public class UserCreateRequest { }
public class UserResponse { }

메서드 네이밍

// CRUD 기본 패턴
public User createUser(UserCreateRequest request) { }
public User getUserById(Long id) { }  
public User updateUser(Long id, UserUpdateRequest request) { }
public void deleteUser(Long id) { }

// 비즈니스 로직
public void addFriend(Long userId, Long friendId) { }
public EmotionAnalysis analyzeEmotion(String diaryContent) { }
public Pet customizePet(Long petId, PetCustomizeRequest request) { }

REST API 컨벤션

// 기본 CRUD
GET    /api/users/{id}
POST   /api/users  
PUT    /api/users/{id}
DELETE /api/users/{id}

// 도메인별 특화 API
POST   /api/users/{id}/friends/{friendId}     # 친구 추가
POST   /api/pets/{id}/customize               #  꾸미기  
POST   /api/rooms/{id}/items                  # 방에 아이템 배치
POST   /api/emotions/analyze                  # 감정 분석

🗄️ 데이터베이스 컨벤션

테이블명

  • 단수형 사용: user, pet, room, friendship
  • 스네이크 케이스: emotion_analysis, room_item

컬럼명

  • 스네이크 케이스: user_id, created_at, pet_name
  • Boolean: is_active, is_public

🛠️ 공통 개발 규칙

Exception Handling

// 공통 예외 클래스
public class DuriAhnRianException extends RuntimeException { }
public class UserNotFoundException extends DuriAhnRianException { }
public class PetNotFoundException extends DuriAhnRianException { }

Response 형식

@Getter
@AllArgsConstructor
public class ApiResponse<T> {
    private boolean success;
    private String message;
    private T data;
}

공통 필드

@MappedSuperclass
@Getter
public abstract class BaseEntity {
    @CreatedDate
    private LocalDateTime createdAt;
    
    @LastModifiedDate  
    private LocalDateTime updatedAt;
}

🧪 테스트 컨벤션

테스트 클래스명

public class UserServiceTest { }
public class PetControllerTest { }
public class EmotionAnalysisServiceTest { }

테스트 메서드명

@Test
void createUser_ValidRequest_ReturnsUser() { }

@Test  
void getUserById_NonExistentId_ThrowsUserNotFoundException() { }

🌿 Git 브랜치 전략

브랜치 네이밍

main                    # 메인 브랜치
develop                 # 개발 브랜치  
feature/user-auth       # 진호: 사용자 인증 기능
feature/pet-customize   # 형준: 펫 커스터마이징 기능
feature/social-friend   # 정현: 친구 기능

커밋 메시지

feat: 사용자 소셜 로그인 기능 추가
fix: 펫 상태값 업데이트 버그 수정  
refactor: 감정 분석 로직 리팩토링
docs: API 문서 업데이트

커밋 메시지 규칙

  • feat: 새로운 기능 추가
  • fix: 버그 수정
  • refactor: 코드 리팩토링
  • docs: 문서 수정
  • style: 코드 스타일 변경 (formatting 등)
  • test: 테스트 코드 추가/수정
  • chore: 빌드 프로세스나 도구 설정 변경

📋 개발 순서 가이드

1단계: 기본 도메인 모델 구현 (모든 팀원)

  • Entity 클래스 정의
  • Repository 인터페이스 생성
  • 기본 CRUD 서비스 구현

2단계: 각자 담당 도메인별 핵심 기능 구현

진호

  • 소셜 로그인 연동
  • 사용자 프로필 관리
  • 감정 분석 API 연동

형준

  • 펫 커스터마이징 시스템
  • 방 꾸미기 기능
  • 포인트 및 아이템 상점

정현

  • 친구 시스템
  • 커뮤니티 기능
  • 권한 관리 시스템

3단계: 도메인 간 연동 및 통합 테스트

  • 도메인 간 연동 테스트
  • 통합 테스트 작성
  • API 문서 작성

4단계: API 문서화 및 프론트엔드 연동

  • Swagger 문서 완성
  • 프론트엔드 API 연동
  • 최종 테스트

📖 문서화 규칙

API 문서

  • Swagger 사용: 모든 API에 대한 상세한 문서화
  • 예시 포함: 요청/응답 예시 필수 포함
  • 에러 케이스: 가능한 에러 상황과 응답 코드 명시

코드 주석

/**
 * 사용자의 펫을 커스터마이징합니다.
 * 
 * @param petId 펫 ID
 * @param request 커스터마이징 요청 정보
 * @return 업데이트된 펫 정보
 * @throws PetNotFoundException 펫을 찾을 수 없는 경우
 */
public Pet customizePet(Long petId, PetCustomizeRequest request) {
    // 구현 내용
}

🔍 코드 리뷰 가이드

리뷰 포인트

  1. 비즈니스 로직 검증: 도메인 규칙 준수 여부
  2. 성능: N+1 문제, 쿼리 최적화
  3. 보안: 인증/인가, 입력값 검증
  4. 테스트: 테스트 커버리지, 테스트 품질
  5. 코드 품질: 가독성, 유지보수성

리뷰 규칙

  • 24시간 내 리뷰: 모든 PR은 24시간 내에 리뷰 완료
  • 2명 승인: 최소 2명의 승인 후 머지
  • 자가 리뷰: PR 생성 전 본인이 먼저 코드 검토

🚀 배포 및 환경 설정

환경 분리

  • Local: 개발자 로컬 환경
  • Dev: 개발 서버 환경
  • Staging: 스테이징 환경
  • Production: 운영 환경

환경별 설정

# application-dev.yml
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    
# application-prod.yml  
spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/duriahnrian

📞 소통 규칙

일일 스탠드업

  • 시간: 매일 오전 10시
  • 형식: 어제 한 일 / 오늘 할 일 / 블로커
  • 시간 제한: 1인당 3분 이내

주간 회고

  • 시간: 매주 금요일 오후 5시
  • 형식: 잘한 점 / 개선할 점 / 다음 주 목표
  • 기록: 회고 내용은 문서로 기록

긴급 소통

  • Slack: 일반적인 소통
  • 전화: 긴급한 이슈 발생시
  • 이슈 트래킹: GitHub Issues 활용

✅ 체크리스트

PR 생성 전 체크리스트

  • 컨벤션 준수 확인
  • 테스트 코드 작성 완료
  • 로컬 테스트 통과
  • 문서 업데이트 완료
  • Self 리뷰 완료

배포 전 체크리스트

  • 모든 테스트 통과
  • 코드 리뷰 완료
  • API 문서 업데이트
  • 환경 설정 확인
  • 롤백 계획 수립

이 컨벤션을 통해 3명이 효율적으로 협업하며 일관성 있는 코드를 작성할 수 있습니다! 🎉