Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions .claude/skills/review-pr/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ args: <PR 번호> (예: /review-pr 666)
```

**예제:**

```bash
/review-pr 666
```
Expand All @@ -34,6 +35,7 @@ gh pr checks <번호> -R solid-connection/solid-connect-server # CI/CD 상태
```

**수집할 정보:**

- PR 제목 및 설명
- 관련 이슈 번호
- 변경된 파일 목록
Expand All @@ -44,13 +46,13 @@ gh pr checks <번호> -R solid-connection/solid-connect-server # CI/CD 상태
**도구 우선순위:**

1. **Serena MCP** (Java 코드 분석에 최적화)
- `mcp__serena__get_symbols_overview <파일경로>` - 파일의 클래스/메서드 구조 파악
- `mcp__serena__find_symbol <심볼명>` - 특정 심볼 검색
- `mcp__serena__search_for_pattern <패턴>` - 컨벤션 위반 패턴 검색
- `mcp__serena__get_symbols_overview <파일경로>` - 파일의 클래스/메서드 구조 파악
- `mcp__serena__find_symbol <심볼명>` - 특정 심볼 검색
- `mcp__serena__search_for_pattern <패턴>` - 컨벤션 위반 패턴 검색

2. **Read/Grep** (보조 분석)
- `Read <파일경로>` - 파일 전체 읽기
- `Grep --pattern <패턴>` - 패턴 검색
- `Read <파일경로>` - 파일 전체 읽기
- `Grep --pattern <패턴>` - 패턴 검색

### 3단계: 체크리스트 검증

Expand All @@ -65,6 +67,7 @@ gh pr checks <번호> -R solid-connection/solid-connect-server # CI/CD 상태
### 1. 아키텍처 및 계층 구조

**검증 항목:**

- 계층형 아키텍처 준수 (Controller → Service → Repository)
- 역계층 참조 금지
- 순환 의존성 없음
Expand All @@ -76,6 +79,7 @@ gh pr checks <번호> -R solid-connection/solid-connect-server # CI/CD 상태
### 2. 네이밍 컨벤션

**검증 항목:**

- API 엔드포인트: kebab-case 사용 (예: `/user-profile`)
- DTO 변환 메서드: 단일 파라미터 `from()`, 다중 파라미터 `of()`
- Request/Response: `XXXRequest`, `XXXResponse` 형식
Expand All @@ -88,6 +92,7 @@ gh pr checks <번호> -R solid-connection/solid-connect-server # CI/CD 상태
### 3. 코드 스타일

**검증 항목:**

- 와일드카드(`*`) import 금지
- 클래스 선언 전 빈 줄 존재
- private 메서드는 호출하는 public 메서드 바로 아래 위치
Expand All @@ -96,6 +101,7 @@ gh pr checks <번호> -R solid-connection/solid-connect-server # CI/CD 상태
- 파일 끝 개행 문자

**패턴 검색 예제:**

```bash
mcp__serena__search_for_pattern "import.*\\*" # 와일드카드 import 검색
```
Expand All @@ -107,6 +113,7 @@ mcp__serena__search_for_pattern "import.*\\*" # 와일드카드 import 검색
### 4. Entity 및 JPA

**검증 항목:**

- 모든 필드에 `@Column` 어노테이션 존재
- `name` 속성으로 컬럼명 명시
- `nullable` 속성 명시
Expand All @@ -121,6 +128,7 @@ mcp__serena__search_for_pattern "import.*\\*" # 와일드카드 import 검색
### 5. 데이터베이스 마이그레이션

**검증 항목:**

- 스키마 변경 시 Flyway 마이그레이션 파일 추가
- 파일명 형식: `V{VERSION}__{DESCRIPTION}.sql`
- 위치: `src/main/resources/db/migration/`
Expand All @@ -134,6 +142,7 @@ mcp__serena__search_for_pattern "import.*\\*" # 와일드카드 import 검색
### 6. 테스트 코드

**검증 항목:**

- 새로운 Service/Repository 메서드에 대한 테스트 존재
- 예외 케이스 테스트 포함
- `@TestContainerSpringBootTest` 어노테이션 사용
Expand All @@ -149,6 +158,7 @@ mcp__serena__search_for_pattern "import.*\\*" # 와일드카드 import 검색
### 7. 커밋 메시지

**검증 항목:**

- `<type>: <description>` 형식
- Type: `feat`, `fix`, `refactor`, `test`, `chore`, `docs`, `perf`
- 간결하고 명확한 설명
Expand All @@ -160,6 +170,7 @@ mcp__serena__search_for_pattern "import.*\\*" # 와일드카드 import 검색
### 8. 코드 품질 및 잠재적 이슈

**검증 항목:**

- 비즈니스 로직은 Service 계층에만
- Controller는 요청/응답 처리만
- `@Transactional` 적절하게 사용 (읽기 전용: `readOnly = true`)
Expand Down
1 change: 1 addition & 0 deletions .claude/skills/test/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class ChatServiceTest {
```

**제공 기능:**

- MySQL, Redis 자동 실행
- Spring Boot 컨텍스트 로드
- 테스트 후 자동 DB 초기화
Expand Down
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ assignees: ''
> 문제가 되는 부분에 대해 설명해주세요

## 재현 방법(선택)

버그를 재현할 수 있는 과정을 설명해주세요(필요하다면 사진을 첨부해주세요)

1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
Expand Down
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/refactor_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ assignees: ''
> 리팩터링하려는 부분에 대해 간결하게 설명해주세요

### AS-IS

- as-is
- as-is

### TO-BE

- to-be
- to-be

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/prod-cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: "[PROD] Build Gradle and Deploy"

on:
release:
types: [published]
types: [ published ]

workflow_dispatch:
inputs:
Expand Down
10 changes: 5 additions & 5 deletions .serena/project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ project_name: "solid-connect-server"
# The first language is the default language and the respective language server will be used as a fallback.
# Note that when using the JetBrains backend, language servers are not used and this list is correspondingly ignored.
languages:
- java
- java

# the encoding used by text files in the project
# For a list of possible encodings, see https://docs.python.org/3.11/library/codecs.html#standard-encodings
Expand All @@ -37,7 +37,7 @@ ignore_all_files_in_gitignore: true

# list of additional paths to ignore in all projects
# same syntax as gitignore, so you can use * and **
ignored_paths: []
ignored_paths: [ ]

# whether the project is in read-only mode
# If set to true, all editing tools will be disabled and attempts to use them will result in an error
Expand Down Expand Up @@ -83,14 +83,14 @@ read_only: false
# * `think_about_task_adherence`: Thinking tool for determining whether the agent is still on track with the current task.
# * `think_about_whether_you_are_done`: Thinking tool for determining whether the task is truly completed.
# * `write_memory`: Writes a named memory (for future reference) to Serena's project-specific memory store.
excluded_tools: []
excluded_tools: [ ]

# list of tools to include that would otherwise be disabled (particularly optional tools that are disabled by default)
included_optional_tools: []
included_optional_tools: [ ]

# fixed set of tools to use as the base tool set (if non-empty), replacing Serena's default set of tools.
# This cannot be combined with non-empty excluded_tools or included_optional_tools.
fixed_tools: []
fixed_tools: [ ]

# list of mode names to that are always to be included in the set of active modes
# The full set of modes to be activated is base_modes + default_modes.
Expand Down
34 changes: 20 additions & 14 deletions claude.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

# CLAUDE.md

이 파일은 Claude Code가 solid-connect-server 저장소에서 작업할 때 참고하는 가이드입니다.
Expand Down Expand Up @@ -145,15 +144,18 @@ Controller → Service → Repository/Domain
```java
// DTO 변환
// 다중 파라미터: of() 메서드
public static UserDto of(User user, Profile profile) { ... }
public static UserDto of(User user, Profile profile) { ...}

// 단일 파라미터: from() 메서드
public static UserDto from(User user) { ... }
public static UserDto from(User user) { ...}

// API 요청/응답
// XXXRequest, XXXResponse 형식
public class UserCreateRequest { ... }
public class UserCreateResponse { ... }
public class UserCreateRequest { ...
}

public class UserCreateResponse { ...
}

// REST API 엔드포인트
// kebab-case 사용
Expand Down Expand Up @@ -278,6 +280,7 @@ V3__add_user_role_column.sql
### JPA Entity

```java

@Entity
@Table(name = "chat_room")
public class ChatRoom {
Expand All @@ -296,6 +299,7 @@ public class ChatRoom {
```

**규칙:**

- `@Column` 필수 (모든 필드)
- 필드명과 DB 컬럼명 일치
- nullable 명시
Expand All @@ -304,7 +308,9 @@ public class ChatRoom {

```java
public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {

Optional<ChatRoom> findByMentoringId(Long mentoringId);

List<ChatRoom> findByIsGroup(boolean isGroup);
}
```
Expand All @@ -313,18 +319,19 @@ public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {

## 주요 파일 위치

| 파일/폴더 | 설명 |
|----------|------|
| `src/main/java/com/example/solidconnection/` | 메인 소스 코드 |
| `src/test/java/com/example/solidconnection/` | 테스트 코드 |
| `src/main/resources/db/migration/` | Flyway 마이그레이션 |
| `src/main/resources/application.yml` | 공통 설정 |
| `docker-compose.*.yml` | 환경별 도커 설정 |
| `build.gradle` | Gradle 빌드 설정 |
| 파일/폴더 | 설명 |
|----------------------------------------------|---------------|
| `src/main/java/com/example/solidconnection/` | 메인 소스 코드 |
| `src/test/java/com/example/solidconnection/` | 테스트 코드 |
| `src/main/resources/db/migration/` | Flyway 마이그레이션 |
| `src/main/resources/application.yml` | 공통 설정 |
| `docker-compose.*.yml` | 환경별 도커 설정 |
| `build.gradle` | Gradle 빌드 설정 |

---

### 프로필

- **local**: Development with embedded Tomcat
- **dev**: Development server (stage.solid-connection.com)
- **prod**: Production server (solid-connection.com)
Expand Down Expand Up @@ -372,7 +379,6 @@ public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {

---


## 주의사항

1. **Flyway 마이그레이션은 되돌릴 수 없음** - 신중하게 작성
Expand Down
Loading
Loading