{"id":27426421,"url":"https://github.com/tianea2160/archunittest","last_synced_at":"2025-04-14T12:39:53.270Z","repository":{"id":280219266,"uuid":"941330373","full_name":"Tianea2160/ArchUnitTest","owner":"Tianea2160","description":"ArchUnit 의존성에 대해서 테스트 및 실 사용예시가 정리되어 있습니다","archived":false,"fork":false,"pushed_at":"2025-03-02T03:16:45.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-02T04:19:51.526Z","etag":null,"topics":["archunit","archunit-junit5"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tianea2160.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-02T03:05:08.000Z","updated_at":"2025-03-02T03:26:28.000Z","dependencies_parsed_at":"2025-03-02T04:30:08.815Z","dependency_job_id":null,"html_url":"https://github.com/Tianea2160/ArchUnitTest","commit_stats":null,"previous_names":["tianea2160/archunittest"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tianea2160%2FArchUnitTest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tianea2160%2FArchUnitTest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tianea2160%2FArchUnitTest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tianea2160%2FArchUnitTest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tianea2160","download_url":"https://codeload.github.com/Tianea2160/ArchUnitTest/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248882933,"owners_count":21177125,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["archunit","archunit-junit5"],"created_at":"2025-04-14T12:39:52.771Z","updated_at":"2025-04-14T12:39:53.257Z","avatar_url":"https://github.com/Tianea2160.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ArchUnit Test Guide\n\n이 문서는 ArchUnit을 사용하여 특정 아키텍처 규칙을 검증하는 방법을 설명합니다.  \n테스트 대상은 다음과 같습니다.\n\n- `@AuditTable` 어노테이션이 적용된 클래스의 테이블 네이밍 규칙 검증\n- Request 및 Response DTO 클래스의 필드에 `@Schema` 어노테이션 적용 여부 검증\n\n---\n\n## 사용 예시\n\n### 1. `@AuditTable` 어노테이션 검사\n- `@AuditTable`이 적용된 클래스의 테이블 이름이 `_log`로 끝나는지 확인합니다.\n- 네이밍 규칙을 준수하지 않을 경우 테스트가 실패합니다.\n\n#### 예제 코드\n```java\n@AuditTable(value = \"user_log\") // 올바른 네이밍\npublic class UserEntity { }\n```\n```java\n@AuditTable(value = \"user_history\") // 테스트 실패\npublic class UserEntity { }\n```\n\n#### 실행 결과\n```\nClass org.example.entity.UserEntity has @AuditTable with name 'user_history', but it should end with '_log'\n```\n\n---\n\n### 2. DTO 필드에 `@Schema` 어노테이션 적용 검사\n- Request 및 Response DTO 클래스를 대상으로 모든 필드가 `@Schema` 어노테이션을 포함하는지 확인합니다.\n- `@Schema`가 적용되지 않은 필드가 있을 경우 테스트가 실패합니다.\n\n#### 예제 코드\n```java\npublic class LoginRequestDto {\n    @Schema(description = \"사용자 아이디\") // 적용됨\n    private String username;\n\n    @Schema(description = \"비밀번호\") // 적용됨\n    private String password;\n}\n```\n```java\npublic class UserResponseDto {\n    @Schema(description = \"사용자 ID\") // 적용됨\n    private Long id;\n\n    private String username; // @Schema 없음 → 테스트 실패\n}\n```\n\n#### 실행 결과\n```\nField 'username' in class org.example.dto.UserResponseDto does not have @Schema annotation\n```\n\n---\n\n## 실행 방법\n### 1. Gradle을 사용하여 테스트 실행\n```sh\n./gradlew test\n```\n\n### 2. Maven을 사용하여 테스트 실행\n```sh\nmvn test\n```\n\n### 3. 특정 ArchUnit 테스트만 실행\n```sh\n./gradlew test --tests \"org.example.com.archunitjavatest.AuditTableNamingTest\"\n./gradlew test --tests \"org.example.com.archunitjavatest.SchemaAnnotationTest\"\n```\n\n---\n\n## 프로젝트 파일 구조\n```\n/src/test/java/org/example/com/archunitjavatest/\n ├── AuditTableNamingTest.java  // `@AuditTable` 네이밍 규칙 검사\n ├── SchemaAnnotationTest.java  // DTO 필드에 `@Schema` 어노테이션 적용 검사\n ├── ArchUnitTestConfig.java    // ArchUnit 설정 파일 (필요시)\n```\n\n---\n\n## 요구사항\n- Java 17 이상\n- Gradle 또는 Maven 빌드 시스템\n- ArchUnit 라이브러리\n  ```groovy\n  dependencies {\n      testImplementation 'com.tngtech.archunit:archunit-junit5:1.1.0'\n      testImplementation 'org.hibernate:hibernate-envers:6.2.0.Final' // `@AuditTable` 검사용\n  }\n  ```\n\n---\n\n## 참고 자료\n- ArchUnit 공식 문서: [https://www.archunit.org/](https://www.archunit.org/)\n- Swagger `@Schema` 어노테이션 문서: [https://swagger.io/specification/](https://swagger.io/specification/)\n\n---\n\n## 결론\n이 프로젝트는 아키텍처 규칙을 자동으로 검증하기 위한 테스트를 포함하고 있습니다.\n- `@AuditTable` 어노테이션이 적용된 테이블의 네이밍 규칙을 강제할 수 있습니다.\n- DTO 클래스의 모든 필드에 `@Schema` 어노테이션이 적용되었는지 확인할 수 있습니다.\n\n테스트를 실행하면 Swagger 문서화를 강제하고, 테이블 네이밍 규칙을 자동으로 검증할 수 있습니다.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftianea2160%2Farchunittest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftianea2160%2Farchunittest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftianea2160%2Farchunittest/lists"}