diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2fa836d8..f30cbaa6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,101 +1,164 @@ # Contributing Guidelines +프로젝트에 기여해주셔서 감사합니다! -When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. +해당 Repository에 기여하려는 경우, 변경 사항을 적용하기 전에 먼저 이슈(Issue), 이메일 또는 기타 방법을 통해 저장소 소유자와 변경 내용에 대해 논의해 주세요. -Please note we have a code of conduct, please follow it in all your interactions with the project. +또한 프로젝트의 행동 강령을 확인하고, 모든 커뮤니케이션 과정에서 이를 준수해 주시기 바랍니다. + +
+ +## Table of Contents + +1. [Issue](#1-issue) +2. [Branch Strategy](#2-branch-strategy-issue-based-workflow) +3. [Commit Convention](#3-commit-convention) +4. [Pull Request Process](#4-pull-request-process) + +
--- + ## 1. Issue + 새로운 제안이나 버그 발견 시 이슈를 먼저 생성해주세요. -**Issue 탬플릿 사용:** -`.github/ISSUE_TEMPLATE`하위 템플릿과 연계하여 작성해주세요. - -| Issue Type | About | -|---------------|-------------------------------------------| -| bug | Internal bug report | -| chore | Maintenance or housekeeping task | -| documentation | Documentation update or request | -| enhancement | Improvement to an existing feature | -| feature | New feature request | -| incident | Production incident / service outage | -| postmortem | Incident postmortem / root cause analysis | -| question | Internal technical question | - -### **상세 기록** +### Issue 템플릿 사용 + +`.github/ISSUE_TEMPLATE` 하위 템플릿과 연계하여 작성해주세요. + +| Issue Type | About | +| --------------- | ----------------------------------------- | +| `bug` | Internal bug report | +| `chore` | Maintenance or housekeeping task | +| `documentation` | Documentation update or request | +| `enhancement` | Improvement to an existing feature | +| `feature` | New feature request | +| `incident` | Production incident / service outage | +| `postmortem` | Incident postmortem / root cause analysis | +| `question` | Internal technical question | + +### 상세 기록 + Summary를 작성하고, 이슈 유형에 맞게 필요한 내용을 추가로 작성해주세요. -- bug의 경우 재현 방법(Steps to Reproduce)과 기대 결과(Expected Result), 실제 결과(Actual Result)를 상세히 작성해주세요. + +> **bug** 의 경우 재현 방법(Steps to Reproduce)과 기대 결과(Expected Result), 실제 결과(Actual Result)를 상세히 작성해주세요. + +
--- + ## 2. Branch Strategy (Issue-based Workflow) + 모든 브랜치는 생성된 이슈를 기반으로 생성하며, `develop` 브랜치에서 분기합니다. -**브랜치 생성 규칙**: `prefix/(이슈 번호)-Summary` +### 브랜치 생성 규칙 -prefix는 Issue Type과 같습니다. +``` +prefix/{이슈 번호}-Summary +``` + +> `prefix`는 Issue Type과 동일합니다. + +**예시** + +``` +feature/42-add-login-api +fix/57-null-pointer-exception +documentation/8-api-guide +``` + +
--- ## 3. Commit Convention -커밋 메시지는 다음과 같은 형식을 사용합니다: -`Type(Scope): Summary (Issue No)` - -| Type | About | -|-----------------|-----------------------------------| -| **feat** | 새로운 기능 추가 | -| **fix** | 버그 수정 | -| **enhancement** | 기존 기능의 향상 및 개선 | -| **docs** | 문서 수정 (README, 가이드 등) | -| **chore** | 빌드 업무 수정, 패키지 매니저 설정 등 (코드 수정 없음) | -| **hotfix** | 긴급한 버그 수정 | -| **test** | 테스트 코드 추가 및 수정 | -| **refactor** | 코드 리팩토링 (기능 변화 없음) | - -| Scope | About | -|---------------|------------------| -| contracts | 컨트랙트 관련 작업 | -| documents | 일반 문서 관련 작업 | -| packages | 패키지 및 모듈 관련 작업 | -| admission | 입학 서비스 관련 작업 | -| analytics | 분석 서비스 관련 작업 | -| application | 지원서 서비스 관련 작업 | -| document | 특정 문서 파일 관련 작업 | -| evaluation | 평가 서비스 관련 작업 | -| gateway | 게이트웨이 관련 작업 | -| identity | 인증 및 신원 관리 관련 작업 | -| notification | 알림 서비스 관련 작업 | -| observability | 모니터링 및 관측성 관련 작업 | -| schedule | 스케줄 서비스 관련 작업 | -| infra | 인프라 관련 작업 | -| ci | CI/CD 파이프라인 관련 작업 | + +커밋 메시지는 다음과 같은 형식을 사용합니다. + +``` +Type(Scope): Summary (Issue No) +``` + +### Type + +| Type | About | +| --------------- | -------------------------------------------------- | +| `feat` | 새로운 기능 추가 | +| `fix` | 버그 수정 | +| `enhancement` | 기존 기능의 향상 및 개선 | +| `docs` | 문서 수정 (README, 가이드 등) | +| `chore` | 빌드 업무 수정, 패키지 매니저 설정 등 (코드 수정 없음) | +| `hotfix` | 긴급한 버그 수정 | +| `test` | 테스트 코드 추가 및 수정 | +| `refactor` | 코드 리팩토링 (기능 변화 없음) | + +### Scope + +| Scope | About | +| --------------- |-------------------| +| `contracts` | 컨트랙트 관련 작업 | +| `documents` | 일반 문서 관련 작업 | +| `packages` | 패키지 및 모듈 관련 작업 | +| `admission` | 관리자 서비스 관련 작업 | +| `analytics` | 통계 서비스 관련 작업 | +| `application` | 원서 서비스 관련 작업 | +| `document` | 파일 관련 작업 | +| `evaluation` | 성적 계산 관련 작업 | +| `gateway` | 게이트웨이 관련 작업 | +| `identity` | 인증 및 유저 관리 관련 작업 | +| `notification` | 공지 게시글 서비스 관련 작업 | +| `observability` | 모니터링 관련 작업 | +| `schedule` | 일정 서비스 관련 작업 | +| `infra` | 인프라 관련 작업 | +| `ci` | CI/CD 파이프라인 관련 작업 | + +
+ --- ## 4. Pull Request Process -* 모든 pull request는 전부 template을 통하여 작성되어야합니다. -* 다음과 같은 형식으로 작성합니다: `Type(Scope): Summary (이슈 번호)` +### PR 제목 형식 + +``` +Type(Scope): Summary #{이슈 번호} +``` + +### PR 템플릿 사용 + +`.github/PULL_REQUEST_TEMPLATE` 하위 템플릿과 연계하여 작성해주세요. + +멀티 템플릿의 경우, PR 생성 URL 뒤에 `&template={템플릿 파일 이름}`을 붙여줘야 합니다. + +``` +https://github.com/EntryDSM/entrydsm-platform/compare/main...documentation/branch-name?expand=1&template=documentation.md +``` + +### 이슈 연결 + +PR 설명란에 아래와 같이 작성하면 PR 머지 시 해당 이슈가 자동으로 닫힙니다. + +``` +Closes #이슈번호 +``` -* 멀티 템플릿의 경우, PR 생성했을 때의 URL 뒤에 `&template={템플릿 파일 이름}` 을 붙여줘야 합니다. - (ex. `https://github.com/EntryDSM/entrydsm-platform/compare/main...documentation/branch-name?expand=1&template=documentation.md`) +### 리뷰 프로세스 -* **PR 템플릿 사용:** -`.github/PULL_REQUEST_TEMPLATE.md`하위 템플릿과 연계하여 작성해주세요. +1. 하나 이상의 승인(Approve)이 필요합니다. +2. 리뷰어의 수정 요청이 있다면 반영 후 다시 알립니다. +3. 승인 완료 후 머지(Merge)를 진행합니다. -* **이슈 연결:** PR 설명란에 `Closes #이슈번호`를 적어 해당 이슈가 자동으로 닫히도록 설정합니다. +### PR 작성 시 주의사항 -* **리뷰 프로세스:** - 1. 하나 이상의 승인(Approve)이 필요합니다. - 2. 리뷰어의 수정 요청이 있다면 반영 후 다시 알립니다. - 3. 승인 완료 후 머지(Merge)를 진행합니다. +- 발생한 Conflict에 대해서는 PR 작성자가 해결합니다. +- 하나의 PR에는 하나의 중심 내용만 포함합니다. + - 기능 구현(feat), 리팩토링(refactor), 버그 수정(fix), 스타일 수정(chore) 등이 섞여있다면 반드시 분리합니다. +- PR 작성 시 GitHub 프로젝트를 선택하지 않습니다. +- 가능한 작은 크기의 PR을 제출하여 리뷰어가 쉽게 검토하도록 합니다. -* **PR 시 주의사항** - * 발생한 Conflict에 대해서는 PR 작성자가 해결합니다. - * 가능 한 작은 크기의 PR을 제출하여 리뷰어가 쉽게 검토하도록 합니다. - * 권장 PR의 크기는 다음과 같습니다: - * 변경된 코드 라인 수: 200 ~ 300라인 이내 - * 파일 개수: 10개 이내 - * 리뷰 소요 시간: 리뷰어가 15 ~ 30분 이내에 전체 내용을 파악하고 피드백을 줄 수 있는 정도 - * 하나의 PR에는 하나의 중심 내용만 넣어야 합니다. - * 기능 구현(feat), 리팩토링(refactor), 버그 수정(fix), 스타일 수정(chore) 등이 섞여있다면 무조건 분리합니다. - * PR 작성 시 github 프로젝트를 선택하지 않습니다. + | 항목 | 권장 기준 | + | ----------------- | ---------------------------- | + | 변경된 코드 라인 | 200 ~ 300 라인 이내 | + | 변경된 파일 수 | 10개 이내 | + | 리뷰 소요 시간 | 15 ~ 30분 이내 파악 및 피드백 가능 | diff --git a/documents/.keep b/documents/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/documents/CONVENTION.md b/documents/CONVENTION.md new file mode 100644 index 00000000..1a5d0de7 --- /dev/null +++ b/documents/CONVENTION.md @@ -0,0 +1,269 @@ +# Kotlin Convention + +이 문서는 EntryDSM Platform Kotlin 코드 작성 규칙을 정의합니다. + +## Index + +1. [기본 원칙](#1-기본-원칙) +2. [패키지 구조와 의존성 방향](#2-패키지-구조와-의존성-방향) +3. [Naming](#3-naming) +4. [DTO](#4-dto) +5. [Command / Result](#5-command--result) +6. [Domain](#6-domain) +7. [Exception](#7-exception) +8. [Spring](#8-spring) +9. [Nullability](#9-nullability) +10. [Formatting](#10-formatting) +11. [Test](#11-test) +12. [Bazel](#12-bazel) + +## 1. 기본 원칙 + +- Kotlin 공식 코딩 컨벤션을 기본으로 따릅니다. +- 기존 모듈의 패키지 구조, 네이밍, 의존성 방향을 우선합니다. +- 코드 스타일보다 아키텍처 경계를 먼저 지킵니다. +- 불필요한 추상화보다 명확한 도메인 표현을 우선합니다. + +## 2. 패키지 구조 & 의존성 방향 + +### Hexagonal Architecture + +서비스는 멀티모듈과 헥사고날 아키텍처를 기준으로 구성합니다. + +```text +systems/{service}/{service}-adapter-in +systems/{service}/{service}-adapter-out +systems/{service}/{service}-application +systems/{service}/{service}-domain +systems/{service}/{service}-bootstrap +``` + +#### 역할 + +| Module | 역할 | +| --- | --- | +| `adapter-in` | HTTP, gRPC 등 외부 요청 진입점 | +| `adapter-out` | DB, 외부 API, 메시징 등 외부 시스템 연동 | +| `application` | 유스케이스, 서비스, 포트 조합 | +| `domain` | 순수 도메인 모델, 도메인 규칙 | +| `bootstrap` | Spring Boot 실행 및 설정 조립 | + +#### 의존성 방향 + +```text +adapter-in -> application -> domain +adapter-out -> application/domain +bootstrap -> adapter-in, adapter-out, application, domain +``` + +- Controller는 Service 구현체가 아니라 Port 인터페이스에 의존합니다. +- domain 모듈은 Spring, JPA, Web 등 프레임워크에 의존하지 않습니다. +- application 모듈은 유스케이스 흐름을 담당하고 외부 시스템 구현 세부사항을 알지 않습니다. +- adapter-out은 application/domain의 outbound Port를 구현합니다. + +### Layered Architecture + +기본 아키텍처는 헥사고날 아키텍처입니다. 다만 일부 서비스는 복잡도나 기존 구현 방식에 따라 레이어드 아키텍처를 사용할 수 있습니다. + +레이어드 아키텍처를 사용하는 경우 다음 구조를 따릅니다. + +```text +controller -> service -> repository +``` + +#### 역할 + +| Layer | 역할 | +| --- | --- | +| `controller` | HTTP 요청/응답 처리, DTO 변환 | +| `service` | 유스케이스 흐름, 트랜잭션 경계, 도메인 규칙 조합 | +| `repository` | 데이터 저장소 접근 | +| `domain` | 엔티티, 값 객체, 도메인 상태 및 규칙 | + +#### 규칙 + +- Controller는 Repository에 직접 의존하지 않습니다. +- Controller는 Service만 호출합니다. +- Service는 트랜잭션 경계를 담당합니다. +- Repository는 데이터 접근만 담당하고 비즈니스 규칙을 포함하지 않습니다. +- DTO는 Controller 계층에 두고, Entity를 API 응답으로 직접 노출하지 않습니다. +- 서비스가 헥사고날인지 레이어드인지 모듈 구조와 기존 패턴을 먼저 확인한 뒤 동일한 방식을 따릅니다. + +## 3. Naming + +### Class + +| 대상 | 형식 | 예시 | +| --- | --- | --- | +| Controller | `{Domain}Controller` | `AuthController` | +| Service | `{UseCase}Service` | `EnvironmentVariableService` | +| Inbound Port | `{Action}{Domain}UseCase` 또는 `{Domain}Port` | `CreateAccountUseCase`, `AuthPort` | +| Outbound Port | `{Domain}Repository`, `{External}Port` | `AccountRepository` | +| Adapter | `{Domain}{Role}Adapter` | `AccountPersistenceAdapter` | +| Request DTO | `{Action}Request` | `LoginRequest` | +| Response DTO | `{Domain}Response` | `AccountResponse` | +| Command | `{Action}Command` | `SignupCommand` | +| Result | `{Domain}Result` | `UserSummaryResult` | +| Exception | `{Reason}Exception` | `UserNotFoundException` | + +### Function + +- 동사는 행위를 명확히 표현합니다. +- 조회는 `find`, `get`, `read` 중 의미에 맞게 사용합니다. +- 상태 변경은 `create`, `update`, `delete`, `cancel`, `submit` 등 도메인 행위로 표현합니다. + +```kotlin +fun login(command: LoginCommand): UserSummaryResult + +fun cancelApplication(command: CancelApplicationCommand): ApplicationStatusResult +``` + +## 4. DTO + +- DTO는 adapter 계층에 둡니다. +- API 요청/응답 형식과 application 내부 모델을 분리합니다. +- DTO에서 도메인 규칙을 처리하지 않습니다. +- DTO 변환 함수는 단순 매핑만 수행합니다. + +### 이름 형식 + +| 대상 | 형식 | 예시 | +| --- | --- | --- | +| 요청 DTO | `{Action}{Domain}Request` | `LoginRequest`, `SignupRequest`, `CancelApplicationRequest` | +| 응답 DTO | `{Domain}Response` 또는 `{Action}{Domain}Response` | `AccountResponse`, `ApplicationStatusResponse`, `LoginResponse` | +| 목록 응답 DTO | `{Domain}ListResponse` | `AccountListResponse` | +| 상세 응답 DTO | `{Domain}DetailResponse` | `AccountDetailResponse` | +| 공통 응답 DTO | `{Purpose}Response` | `ApiResponse`, `ErrorResponse` | + +단일 API에서만 사용하는 DTO는 API 행위가 드러나도록 작성합니다. + +```kotlin +data class LoginRequest( + val loginId: String, + val password: String, +) + +data class LoginResponse( + val userId: String, + val role: String, + val status: AccountStatus, +) +``` + +도메인 조회처럼 여러 API에서 재사용 가능한 응답은 도메인 중심으로 작성합니다. + +```kotlin +data class AccountResponse( + val userId: String, + val role: String, + val status: AccountStatus, +) + +data class ApplicationStatusResponse( + val applicantStatus: ApplicantStatus, + val submittedAt: Instant?, + val updatedAt: Instant, +) +``` + +응답은 공통 envelope을 사용합니다. + +```kotlin +data class ApiResponse( + val success: Boolean = true, + val data: T?, + val error: Any? = null, +) +``` + +## 5. Command / Result + +- Controller에서 받은 요청은 application Port 호출 전에 Command로 변환합니다. +- application 계층은 Request/Response DTO를 직접 알지 않습니다. +- 조회 결과는 Result 모델로 반환하고 adapter-in에서 Response DTO로 변환합니다. + +```kotlin +data class LoginCommand( + val loginId: String, + val password: String, +) +``` + +## 6. Domain + +- domain 모델은 프레임워크 의존성을 갖지 않습니다. +- 도메인 상태는 enum 또는 value object로 명확히 표현합니다. +- 생성/변경 규칙은 가능한 도메인 내부에 둡니다. +- 단순 데이터 전달만 필요한 경우에도 도메인 의미가 드러나는 이름을 사용합니다. + +## 7. Exception + +- 예외는 도메인 또는 application 의미를 드러내는 이름으로 작성합니다. +- API 에러 응답은 ErrorCode와 Exception Handler에서 일관되게 변환합니다. +- Controller에서 직접 에러 응답을 조립하지 않습니다. + +```kotlin +class UserNotFoundException( + userId: String, +) : RuntimeException("User not found: $userId") +``` + +## 8. Spring + +- `@RestController`, `@RequestMapping` 등 Web annotation은 adapter-in에서만 사용합니다. +- `@Component`, `@Service`, `@Transactional`은 application 또는 adapter 구현체에만 사용합니다. +- domain에는 Spring annotation을 사용하지 않습니다. +- 트랜잭션은 use case 경계에서 선언합니다. + +```kotlin +@Service +@Transactional(readOnly = true) +class AccountService( + private val accountRepository: AccountRepository, +) : ReadAccountUseCase +``` + +## 9. Nullability + +- nullable 타입은 실제로 값이 없을 수 있는 경우에만 사용합니다. +- nullable 값을 받은 직후 의미 있는 기본값 또는 예외로 처리합니다. +- `!!` 사용은 금지합니다. + +```kotlin +val authorization: String? +``` + +## 10. Formatting + +- 한 줄이 길어지면 trailing comma를 사용해 여러 줄로 나눕니다. +- 생성자 파라미터가 2개 이상이면 여러 줄로 작성합니다. +- import wildcard는 사용하지 않습니다. +- 의미 없는 주석은 작성하지 않습니다. + +```kotlin +data class AccountResult( + val userId: String, + val role: String, + val status: AccountStatus, +) +``` + +## 11. Test + +- Controller 테스트는 요청/응답 status, body, header를 검증합니다. +- Service 테스트는 유스케이스 흐름과 예외를 검증합니다. +- domain 테스트는 도메인 규칙이 생긴 시점에 추가합니다. +- 테스트 이름은 어떤 조건에서 어떤 결과가 나오는지 드러나게 작성합니다. + +## 12. Bazel + +- 새 Kotlin 파일을 추가할 때는 해당 모듈 `BUILD.bazel`의 `glob(["src/main/kotlin/**/*.kt"])` 범위에 들어가야 합니다. +- 외부 라이브러리를 사용하는 경우 해당 모듈의 `deps.bzl`에 직접 의존성을 추가합니다. +- transitive dependency에 기대어 컴파일하지 않습니다. + +```python +KOTLIN_DEPS = [ + "@maven//:org_springframework_spring_tx", + "//systems/configuration/configuration-domain:main", +] +``` diff --git a/documents/context/admin.md b/documents/context/admin.md new file mode 100644 index 00000000..2fcb41a3 --- /dev/null +++ b/documents/context/admin.md @@ -0,0 +1,46 @@ +# Admin Context + +## Purpose +> 원서, 일정, 최종 합격, 공지 등록 등의 관리자 관련 업무를 처리합니다. + +## Responsibilities +* 수험번호 자동 부여 +* 합격자 산출 + * 서류 합격 + * 최종 합격 + * 단체 메시지 전송 +* 원서 조회 + * 지원자 목록 조회 + * 엑셀로 내보내기 + * 지원자 상세 조회 + * 수험표 다운로드 + * 원서 조회 및 다운로드 +* 공지 등록 +* QnA 등록 +* 통계 조회(analytics) +* 성적 산출 방식 변경 +* notification.schedule 데이터 조회 +* 전형 일정 단계 +* 원서 제출 기간 +* 전형 마감일 / 일정에 따라 변화 +* application 데이터 조회 + * 신입생 지원률 + * 경쟁률 + * 전형별 접수 현황 + * 지원자 성비 + * 지역별 접수 현황 + +> [!NOTE] +> 아직 미확정된 부분이 일부 존재합니다. 참고해주세요. + +## Owns + +*no body* + +## Dependencies +* application +* notification +* configuration + +## Out of Scope +> 필요할 경우 이 Context가 책임지지 않는 기능을 작성합니다 diff --git a/documents/context/application.md b/documents/context/application.md new file mode 100644 index 00000000..450ffdfb --- /dev/null +++ b/documents/context/application.md @@ -0,0 +1,40 @@ +# Application Context + +## Purpose +> 사용자의 입학 원서를 저장 및 관리합니다. + +## Responsibilities + +* 입학 전형 선택 +* 인적 사항 입력 + * 증명사진, 이름, 생년월일, 보호자 성명 및, 관계, 본인 및, 부모님 연락처, 주소 +* 학교 정보 입력 + * 중학교 이름, 중학교 학번, 중학교 전화번호, 중학교 교사 성명, 중학교 교사 전화번호 + * 학교 검색 시 자동완성 지원 -> 외부 API 사용 +* 성적 입력 + * 학력에 따라서 입력받는 데이터가 다름 + * 출결, 봉사시간, 자격증 및 수상 경력(DSM 알고리즘 대회 입상여부, 정보처리기능사 자격증 취득 여부) +* 자기소개서 및 학업 계획서 입력 +* 입학 원서 임시 저장 +* 입학 전형 별 성적 계산(evaluation) +* 성적 수식 변경 ─ admin에 제공하는 API + +### 외부 서비스 관련 + +* 성적 산출 이벤트 발행 +* PDF 생성 이벤트 발행 +* 원서 최종 제출 (저장 및 상태 변경 불가) +* 관리자 서비스에 원서 정보 제공 + * 지원자 목록, 지원자 상세, 수험표 다운로드, 원서 조회 및 다운로드 +* 수험번호 부여 + +## Owns +> 이 Context가 소유하는 데이터/엔티티에 대해서 작성합니다. + +## Dependencies +* identity +* admin +* configuration + +## Out of Scope +* \ No newline at end of file diff --git a/documents/context/configuration.md b/documents/context/configuration.md new file mode 100644 index 00000000..dfa0dbe1 --- /dev/null +++ b/documents/context/configuration.md @@ -0,0 +1,25 @@ +# Configuration Context + +> 아래 기술한 내용은 Configuration 서비스 중 Document 도메인에 대한 내용입니다. + +## Purpose +> PDF, Excel, 이미지 파일을 저장하고, 다운로드 URL을 제공하기 위한 서비스입니다. + +## Responsibilities +* 원서 pdf/hwp 다운로드 +* 수험표 pdf/hwp 다운로드 +* 지원자 목록 excel 다운로드 +* 원서 내 증명사진 첨부 +* 공지사항 / QnA / 전형 요강 내 파일 첨부 + * `.pdf`, `.xlsx`, `.jpg`, `.png`, `.webp`, `.hwp`, `.docx` 지원 + +## Owns +* DB에 데이터를 저장하거나, 직접 데이터를 조회하지 않습니다. +* 스토리지 서비스(s3)에 파일을 저장하고, 제공합니다. + +## Dependencies +* 해당 서비스는 타 context에 의존하지 않습니다. +* AWS S3 외부 서비스를 이용합니다. + +## Out of Scope +> 필요할 경우 이 Context가 책임지지 않는 기능을 작성합니다 diff --git a/documents/context/notification.md b/documents/context/notification.md new file mode 100644 index 00000000..22cb11e7 --- /dev/null +++ b/documents/context/notification.md @@ -0,0 +1,25 @@ +# Notification Context + +## Purpose +> 공지사항, QnA, 전형요강 게시글을 관리합니다. +> +> 추가로 원서 일정도 함께 관리합니다. + +## Responsibilities +* 공지사항, QnA, 전형요강 게시글을 조회합니다. +* 공지사항, QnA, 전형요강 게시글을 관리합니다. + * 게시글 등록 + * 게시글 수정 + * 게시글 삭제 + * 파일 첨부 +* 원서 일정 조회 +* 원서 일정 수정 + +## Owns +> 이 Context가 소유하는 데이터/엔티티에 대해서 작성합니다. + +## Dependencies +* configuration (첨부된 파일이 있을 경우) + +## Out of Scope +> 필요할 경우 이 Context가 책임지지 않는 기능을 작성합니다 diff --git a/documents/context/observability.md b/documents/context/observability.md new file mode 100644 index 00000000..25e89ff3 --- /dev/null +++ b/documents/context/observability.md @@ -0,0 +1,17 @@ +# Observability Context + +## Purpose +> 서버 모니터링 서비스로, 실시간 데이터 전송 API를 제공합니다. + +## Responsibilities +* 서버 모니터링 +* 모니터링 데이터 실시간 전송 API (SSE) + +## Owns +> 이 Context가 소유하는 데이터/엔티티에 대해서 작성합니다. + +## Dependencies +> 이 Context가 의존하는 Context 또는 외부 시스템에 대해 작성합니다. + +## Out of Scope +> 필요할 경우 이 Context가 책임지지 않는 기능을 작성합니다 diff --git a/documents/glossary.md b/documents/glossary.md new file mode 100644 index 00000000..3cb63b6d --- /dev/null +++ b/documents/glossary.md @@ -0,0 +1,19 @@ +# 용어 사전 + +
+작성 규칙 + +1. 영문명과 한글명 2가지를 합께 작성합니다. +2. 혼동이 우려되는 용어가 있을 경우 추가합니다. + +
+ +| 영문명 | 한글명 | 설명 | +|--------------|---------------|---------------------------------------------------------------| +| application | 원서 | | +| schedule | 일정 | 원서 지원 일정, 합격 발표 일정을 다룹니다. | +| qna | 자주 묻는 질문, QnA | 자주 묻는 질문이지만 FAQ가 아닙니다. | +| notice | 공지사항 | notification 서비스와 헷갈리는 것을 방지하기 위해 notice를 사용합니다. | +| notification | 공지 게시글 | 공지사항이 아니라 공지사항, qna, 전형요강 전체를 다루는 서비스입니다. | +| documents | 개발 문서 | 프로젝트 개발, 설계에 대한 문서를 의미합니다. | +| document | 파일 | 단순 문서를 의미하는게 아닌 이미지, pdf, hwp 등 다른 서비스에서 필요한 파일을 제공하는 서비스입니다. | \ No newline at end of file diff --git a/documents/templates/entrydsm-context-xxx.template.md b/documents/templates/entrydsm-context-xxx.template.md new file mode 100644 index 00000000..9c23b7e7 --- /dev/null +++ b/documents/templates/entrydsm-context-xxx.template.md @@ -0,0 +1,16 @@ +# {Context Name} Context + +## Purpose +> 이 Context가 존재하는 이유를 한 문장으로 작성합니다. + +## Responsibilities +> 이 Context의 책임에 대해 작성합니다. + +## Owns +> 이 Context가 소유하는 데이터/엔티티에 대해서 작성합니다. + +## Dependencies +> 이 Context가 의존하는 Context 또는 외부 시스템에 대해 작성합니다. + +## Out of Scope +> 필요할 경우 이 Context가 책임지지 않는 기능을 작성합니다