Skip to content

[TEST #35]: arch unit test 적용 - #36

Merged
seoyeon2001 merged 7 commits into
developfrom
test/#35
Mar 2, 2026
Merged

[TEST #35]: arch unit test 적용#36
seoyeon2001 merged 7 commits into
developfrom
test/#35

Conversation

@seoyeon2001

Copy link
Copy Markdown
Collaborator

📌 개요

  • ArchUnit을 활용한 아키텍처 규칙 자동 검증 체계를 구축합니다.
  • 규칙 작성 과정에서 발견된 기존 패키지 구조 위반 사항을 함께 수정합니다.

🔧 작업 내용

아키텍처 테스트 추가 (archunit-junit5:1.4.1)

  • GlobalArchitectureTest — 계층 간 의존 방향성, global 패키지 독립성, DI 방식(생성자 주입 강제)
  • ControllerArchitectureTest@RestController, controller 패키지 위치, Service 의존 필수, Swagger Api 인터페이스 구현 강제
  • ServiceArchitectureTest@Service, service 패키지 위치, Controller 역참조 금지
  • RepositoryArchitectureTestrepository 패키지 위치, 상위 계층 참조 금지
  • EntityArchitectureTest@Entity 선언 강제, 계층 역참조 금지
  • DtoArchitectureTest — Request/Response 클래스의 dto 패키지 위치
  • SwaggerArchitectureTest — Api 인터페이스 타입·@Tag·controller 패키지 위치

패키지 구조 리팩토링 (아키텍처 규칙 위반 수정)

이전 위치 변경 후 위치
auth/AuthController.java auth/controller/AuthController.java
auth/AuthApi.java auth/controller/AuthApi.java
auth/AuthService.java auth/service/AuthService.java
auth/AuthException.java global/exception/AuthException.java
auth/jwt/RefreshTokenRepository.java auth/jwt/repository/RefreshTokenRepository.java
user/UserService.java user/service/UserService.java

문서화

  • ARCHITECTURE.md 추가 — 패키지 구조, 계층별 규칙, 허용 명명 패턴 명세

✅ 체크리스트

  • 테스트 코드 확인

📝 기타 참고 사항

  • domain.test 패키지의 개발용 컨트롤러(TestController, TestAuthController)는 아키텍처 규칙 대상에서 제외
  • Service, Repository 명명 규칙은 Impl 구현체나 커스텀 확장(PostServiceImpl, PostRepositoryCustom 등)을 허용하기 위해 강제하지 않음
  • @Transactional 클래스 레벨 선언도 동일한 이유로 강제하지 않음
  • 추후 도메인 관련 디렉토리는 domain 디렉토리로 감싸는 작업을 진행해야 합니다.

📎 관련 이슈

Close #35

@seoyeon2001 seoyeon2001 self-assigned this Feb 26, 2026
@seoyeon2001 seoyeon2001 added the 🧪 Test 테스트를 추가 및 수정하거나 관련 환경을 구성합니다. label Feb 26, 2026
@seoyeon2001 seoyeon2001 linked an issue Feb 26, 2026 that may be closed by this pull request
1 task
@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello @seoyeon2001, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 Pull Request는 프로젝트의 견고성과 유지보수성을 향상시키기 위해 아키텍처 규칙을 정의하고 이를 자동화된 테스트로 검증하는 시스템을 도입합니다. 기존 코드베이스에서 발견된 아키텍처 위반 사항을 수정하여 패키지 구조를 재정비하고, 향후 개발 과정에서 일관된 아키텍처를 유지할 수 있는 기반을 마련합니다.

Highlights

  • ArchUnit을 활용한 아키텍처 테스트 도입: ArchUnit 라이브러리를 사용하여 계층 간 의존성, 패키지 구조, DI 방식 등 핵심 아키텍처 규칙을 자동으로 검증하는 테스트 체계를 구축했습니다.
  • 패키지 구조 리팩토링: 새롭게 정의된 아키텍처 규칙에 따라 기존 패키지 구조의 위반 사항을 수정하고, controller, service, repository 등의 계층별 패키지로 파일을 이동했습니다.
  • 아키텍처 문서화: 프로젝트의 아키텍처 규칙, 패키지 구조, 계층별 가이드라인 등을 명확히 설명하는 ARCHITECTURE.md 문서를 추가했습니다.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • ARCHITECTURE.md
    • 서버 아키텍처 규칙, 패키지 구조, 계층별 가이드라인을 설명하는 문서를 추가했습니다.
  • build.gradle
    • 테스트 컴파일을 위한 Lombok 의존성을 추가했습니다.
    • ArchUnit JUnit 5 의존성을 추가했습니다.
  • src/main/java/com/payper/server/auth/controller/AuthApi.java
    • AuthApi.java 파일을 auth 패키지에서 auth/controller 패키지로 이동했습니다.
  • src/main/java/com/payper/server/auth/controller/AuthController.java
    • AuthController.java 파일을 auth 패키지에서 auth/controller 패키지로 이동하고 패키지 선언 및 임포트를 업데이트했습니다.
  • src/main/java/com/payper/server/auth/jwt/repository/RefreshTokenRepository.java
    • RefreshTokenRepository.java 파일을 auth/jwt 패키지에서 auth/jwt/repository 패키지로 이동했습니다.
  • src/main/java/com/payper/server/auth/jwt/util/JwtParseUtil.java
    • AuthException의 임포트 경로를 global.exception 패키지로 업데이트했습니다.
  • src/main/java/com/payper/server/auth/jwt/util/JwtRefreshTokenUtil.java
    • RefreshTokenRepository의 임포트 경로를 auth.jwt.repository 패키지로 업데이트했습니다.
  • src/main/java/com/payper/server/auth/service/AuthService.java
    • AuthService.java 파일을 auth 패키지에서 auth/service 패키지로 이동하고 패키지 선언 및 임포트를 업데이트했습니다.
  • src/main/java/com/payper/server/auth/util/AuthDummyInit.java
    • AuthService의 임포트 경로를 auth.service 패키지로 업데이트했습니다.
  • src/main/java/com/payper/server/global/exception/AuthException.java
    • AuthException.java 파일을 auth 패키지에서 global/exception 패키지로 이동했습니다.
  • src/main/java/com/payper/server/global/exception/GlobalExceptionHandler.java
    • AuthException의 이전 임포트 선언을 제거했습니다.
  • src/main/java/com/payper/server/security/CustomAuthenticationEntryPoint.java
    • AuthException의 임포트 경로를 global.exception 패키지로 업데이트했습니다.
  • src/main/java/com/payper/server/security/CustomUserDetailsService.java
    • AuthException의 임포트 경로를 global.exception 패키지로 업데이트했습니다.
  • src/main/java/com/payper/server/security/JwtAuthenticationProvider.java
    • AuthException의 임포트 경로를 global.exception 패키지로 업데이트했습니다.
  • src/main/java/com/payper/server/user/service/UserService.java
    • UserService.java 파일을 user 패키지에서 user/service 패키지로 이동하고 패키지 선언 및 임포트를 업데이트했습니다.
  • src/test/java/com/payper/server/ControllerArchitectureTest.java
    • 컨트롤러 계층의 아키텍처 규칙을 검증하는 ArchUnit 테스트를 추가했습니다.
  • src/test/java/com/payper/server/DtoArchitectureTest.java
    • DTO 패키지 위치 규칙을 검증하는 ArchUnit 테스트를 추가했습니다.
  • src/test/java/com/payper/server/EntityArchitectureTest.java
    • 엔티티 계층의 아키텍처 규칙을 검증하는 ArchUnit 테스트를 추가했습니다.
  • src/test/java/com/payper/server/GlobalArchitectureTest.java
    • 계층형 아키텍처, global 패키지 독립성, DI 방식 등 전역 아키텍처 규칙을 검증하는 ArchUnit 테스트를 추가했습니다.
  • src/test/java/com/payper/server/JwtModulesSpringBootIntegrationTest.java
    • AuthException 및 RefreshTokenRepository의 임포트 경로를 업데이트했습니다.
  • src/test/java/com/payper/server/RepositoryArchitectureTest.java
    • 리포지토리 계층의 아키텍처 규칙을 검증하는 ArchUnit 테스트를 추가했습니다.
  • src/test/java/com/payper/server/ServiceArchitectureTest.java
    • 서비스 계층의 아키텍처 규칙을 검증하는 ArchUnit 테스트를 추가했습니다.
  • src/test/java/com/payper/server/SwaggerArchitectureTest.java
    • Swagger API 인터페이스의 아키텍처 규칙을 검증하는 ArchUnit 테스트를 추가했습니다.
  • src/test/java/com/payper/server/UserAndRefreshTokenJpaTest.java
    • RefreshTokenRepository의 임포트 경로를 업데이트했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이 PR은 ArchUnit을 도입하여 아키텍처 규칙을 자동화하고, 기존 코드베이스를 새로운 규칙에 맞게 리팩토링하는 중요한 개선 작업을 담고 있습니다. 아키텍처 규칙을 ARCHITECTURE.md에 명확하게 문서화하고, 이를 테스트 코드로 구현한 점이 인상적입니다. 전반적으로 코드 품질과 유지보수성을 크게 향상시킬 것으로 기대됩니다. 몇 가지 아키텍처 테스트 코드의 일관성 및 가독성 개선을 위한 제안 사항을 리뷰에 남겼습니다.

Comment thread build.gradle Outdated
Comment thread src/test/java/com/payper/server/ControllerArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/ControllerArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/DtoArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/EntityArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/RepositoryArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/RepositoryArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/ServiceArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/ServiceArchitectureTest.java Outdated
Comment thread src/test/java/com/payper/server/SwaggerArchitectureTest.java Outdated
khyun9807
khyun9807 previously approved these changes Feb 27, 2026

@khyun9807 khyun9807 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!

@seoyeon2001
seoyeon2001 merged commit fc55b0e into develop Mar 2, 2026
2 checks passed
@seoyeon2001
seoyeon2001 deleted the test/#35 branch March 2, 2026 13:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🧪 Test 테스트를 추가 및 수정하거나 관련 환경을 구성합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[TEST]: arch unit test 적용

2 participants