Skip to content

[Refactor] public 모듈 레이어 구조 정리 - #83

Merged
JangDongHo merged 1 commit into
devfrom
refactor/public-module-layer-structure
Jun 11, 2026
Merged

JangDongHo merged 1 commit into
devfrom
refactor/public-module-layer-structure

Conversation

@JangDongHo

Copy link
Copy Markdown
Member

📌 개요

  • public 도메인 모듈을 presentation, application, domain, infrastructure 레이어 구조로 재배치했습니다.

✨ 작업 내용

  • 식당, 캠퍼스, 단과대학, 학과, 공지사항, 학사일정, 셔틀, 사용자 모듈의 파일을 역할별 레이어 폴더로 이동했습니다.
  • 컨트롤러, 메시지 팩토리, 요청/응답 DTO는 presentation 계층으로 정리했습니다.
  • 서비스, 계산 로직, 결과 타입, 유틸은 application 계층으로 정리했습니다.
  • TypeORM 엔티티는 domain/entities, 리포지토리는 infrastructure 계층으로 분리했습니다.
  • 사용자 인증 가드, 현재 사용자 데코레이터, 인터셉터를 사용자 모듈의 presentation 계층으로 이동했습니다.
  • 공통 메시지 팩토리를 api/public/common/presentation으로 이동했습니다.
  • 레이어 이동 후 모든 모듈 wiring과 import 경로를 새 구조에 맞게 갱신했습니다.
  • DatabaseModule의 entity glob을 새 레이어 구조에서도 TypeORM 엔티티를 찾을 수 있도록 보정했습니다.

🔥 변경 이유

  • 도메인 모듈 내부에서 표현, 유스케이스, 도메인 모델, 영속성 책임을 명확히 구분하기 위함입니다.
  • 파일이 기능별로만 모여 있을 때보다 변경 지점을 더 빠르게 찾고, 이후 모듈 확장 시 구조를 일관되게 유지하기 위함입니다.
  • 엔티티 위치 변경으로 인해 TypeORM metadata 로딩이 누락되지 않도록 DB 설정의 entity 탐색 범위를 함께 조정했습니다.

🧪 테스트

  • 정상 동작 확인
  • 예외 케이스 확인
  • pnpm lint:check 통과
  • pnpm test 통과
  • pnpm build 통과

🔗 관련 이슈

  • 해당 없음

- presentation/application/domain/infrastructure 기준으로 파일 재배치
@JangDongHo JangDongHo self-assigned this Jun 11, 2026
@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@JangDongHo, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 20 minutes and 48 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more credits in the billing tab to continue.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8d790ced-b6af-4cd2-8ecf-1110192a8dde

📥 Commits

Reviewing files that changed from the base of the PR and between 495c2fe and 546add3.

📒 Files selected for processing (97)
  • services/api/app/src/api/public/cafeterias/application/cafeterias.service.spec.ts
  • services/api/app/src/api/public/cafeterias/application/cafeterias.service.ts
  • services/api/app/src/api/public/cafeterias/application/dtos/results/cafeteria-diet-result.dto.ts
  • services/api/app/src/api/public/cafeterias/application/dtos/results/cafeteria-list-result.dto.ts
  • services/api/app/src/api/public/cafeterias/application/utils/time.spec.ts
  • services/api/app/src/api/public/cafeterias/application/utils/time.ts
  • services/api/app/src/api/public/cafeterias/cafeterias.module.ts
  • services/api/app/src/api/public/cafeterias/domain/entities/cafeteria-diet.entity.ts
  • services/api/app/src/api/public/cafeterias/domain/entities/cafeteria.entity.ts
  • services/api/app/src/api/public/cafeterias/infrastructure/cafeterias.repository.ts
  • services/api/app/src/api/public/cafeterias/presentation/cafeteria-message.factory.ts
  • services/api/app/src/api/public/cafeterias/presentation/cafeterias-native.controller.ts
  • services/api/app/src/api/public/cafeterias/presentation/cafeterias.controller.ts
  • services/api/app/src/api/public/cafeterias/presentation/dtos/requests/get-cafeteria-diet-query.dto.ts
  • services/api/app/src/api/public/cafeterias/presentation/dtos/requests/get-cafeterias-query.dto.ts
  • services/api/app/src/api/public/cafeterias/presentation/dtos/requests/list-cafeteria-diet-request.dto.ts
  • services/api/app/src/api/public/cafeterias/presentation/dtos/requests/list-cafeteria-request.dto.ts
  • services/api/app/src/api/public/cafeterias/presentation/dtos/responses/cafeteria-diet-response.dto.ts
  • services/api/app/src/api/public/cafeterias/presentation/dtos/responses/cafeteria-response.dto.ts
  • services/api/app/src/api/public/campuses/application/campuses.service.ts
  • services/api/app/src/api/public/campuses/application/dtos/results/campus-list-result.dto.ts
  • services/api/app/src/api/public/campuses/campuses.module.ts
  • services/api/app/src/api/public/campuses/domain/entities/campus.entity.ts
  • services/api/app/src/api/public/campuses/infrastructure/campuses.repository.ts
  • services/api/app/src/api/public/campuses/presentation/campus-message.factory.ts
  • services/api/app/src/api/public/campuses/presentation/campuses-native.controller.ts
  • services/api/app/src/api/public/campuses/presentation/dtos/campus-response.dto.ts
  • services/api/app/src/api/public/colleges/application/colleges.service.ts
  • services/api/app/src/api/public/colleges/application/dtos/results/college-list-result.dto.ts
  • services/api/app/src/api/public/colleges/colleges.module.ts
  • services/api/app/src/api/public/colleges/domain/entities/college.entity.ts
  • services/api/app/src/api/public/colleges/infrastructure/colleges.repository.ts
  • services/api/app/src/api/public/colleges/presentation/college-message.factory.ts
  • services/api/app/src/api/public/common/presentation/common-message.factory.ts
  • services/api/app/src/api/public/departments/application/departments.service.ts
  • services/api/app/src/api/public/departments/application/dtos/results/department-list-result.dto.ts
  • services/api/app/src/api/public/departments/departments.module.ts
  • services/api/app/src/api/public/departments/domain/entities/department.entity.ts
  • services/api/app/src/api/public/departments/infrastructure/departments.repository.ts
  • services/api/app/src/api/public/departments/presentation/department-message.factory.ts
  • services/api/app/src/api/public/notices/application/dtos/results/notice-list-result.dto.ts
  • services/api/app/src/api/public/notices/application/notices.service.spec.ts
  • services/api/app/src/api/public/notices/application/notices.service.ts
  • services/api/app/src/api/public/notices/domain/entities/notice-category.entity.ts
  • services/api/app/src/api/public/notices/domain/entities/notice.entity.ts
  • services/api/app/src/api/public/notices/infrastructure/notice-categories.repository.ts
  • services/api/app/src/api/public/notices/infrastructure/notices.repository.ts
  • services/api/app/src/api/public/notices/notices.module.ts
  • services/api/app/src/api/public/notices/presentation/dtos/requests/list-department-notice-request.dto.ts
  • services/api/app/src/api/public/notices/presentation/dtos/requests/list-university-notice-request.dto.ts
  • services/api/app/src/api/public/notices/presentation/notice-message.factory.spec.ts
  • services/api/app/src/api/public/notices/presentation/notice-message.factory.ts
  • services/api/app/src/api/public/notices/presentation/notices.controller.ts
  • services/api/app/src/api/public/schedules/application/dtos/results/academic-schedule-result.dto.ts
  • services/api/app/src/api/public/schedules/application/schedules.service.ts
  • services/api/app/src/api/public/schedules/domain/entities/academic-calendar.entity.ts
  • services/api/app/src/api/public/schedules/infrastructure/academic-calendars.repository.ts
  • services/api/app/src/api/public/schedules/presentation/dtos/requests/list-academic-schedule-request.dto.ts
  • services/api/app/src/api/public/schedules/presentation/schedule-message.factory.ts
  • services/api/app/src/api/public/schedules/presentation/schedules.controller.ts
  • services/api/app/src/api/public/schedules/schedules.module.ts
  • services/api/app/src/api/public/shuttles/application/dtos/results/shuttle-route-list-result.dto.ts
  • services/api/app/src/api/public/shuttles/application/dtos/results/shuttle-timetable-result.dto.ts
  • services/api/app/src/api/public/shuttles/application/shuttle-timetable.calculator.spec.ts
  • services/api/app/src/api/public/shuttles/application/shuttle-timetable.calculator.ts
  • services/api/app/src/api/public/shuttles/application/shuttles.service.ts
  • services/api/app/src/api/public/shuttles/domain/entities/shuttle-timetable.entity.ts
  • services/api/app/src/api/public/shuttles/infrastructure/shuttle-timetable.repository.ts
  • services/api/app/src/api/public/shuttles/presentation/dtos/request/get-shuttle-timetable-request.dto.ts
  • services/api/app/src/api/public/shuttles/presentation/dtos/responses/shuttle-route-response.dto.ts
  • services/api/app/src/api/public/shuttles/presentation/dtos/responses/shuttle-timetable-response.dto.ts
  • services/api/app/src/api/public/shuttles/presentation/shuttle-message.factory.ts
  • services/api/app/src/api/public/shuttles/presentation/shuttles-native.controller.ts
  • services/api/app/src/api/public/shuttles/presentation/shuttles.controller.ts
  • services/api/app/src/api/public/shuttles/shuttles.module.ts
  • services/api/app/src/api/public/users/application/dtos/results/upsert-department-result.dto.ts
  • services/api/app/src/api/public/users/application/dtos/results/user-profile-result.dto.ts
  • services/api/app/src/api/public/users/application/users.service.spec.ts
  • services/api/app/src/api/public/users/application/users.service.ts
  • services/api/app/src/api/public/users/domain/entities/users.entity.ts
  • services/api/app/src/api/public/users/infrastructure/users.repository.ts
  • services/api/app/src/api/public/users/presentation/decorators/current-user.decorator.ts
  • services/api/app/src/api/public/users/presentation/decorators/fetch-current-user.decorator.ts
  • services/api/app/src/api/public/users/presentation/dtos/requests/list-college-request.dto.ts
  • services/api/app/src/api/public/users/presentation/dtos/requests/list-department-request.dto.ts
  • services/api/app/src/api/public/users/presentation/dtos/requests/upsert-department-request.dto.ts
  • services/api/app/src/api/public/users/presentation/dtos/responses/profile-response.dto.ts
  • services/api/app/src/api/public/users/presentation/guards/jwt-auth.guard.ts
  • services/api/app/src/api/public/users/presentation/guards/kakao-auth.guard.ts
  • services/api/app/src/api/public/users/presentation/interceptors/current-user.interceptor.spec.ts
  • services/api/app/src/api/public/users/presentation/interceptors/current-user.interceptor.ts
  • services/api/app/src/api/public/users/presentation/user-message.factory.ts
  • services/api/app/src/api/public/users/presentation/users.controller.ts
  • services/api/app/src/api/public/users/users.module.ts
  • services/api/app/src/infrastructure/type-orm/database.module.ts
  • services/api/app/test/cafeterias.e2e-spec.ts
  • services/api/app/test/notices.e2e-spec.ts
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/public-module-layer-structure

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@JangDongHo
JangDongHo merged commit 44fb793 into dev Jun 11, 2026
2 checks passed
@JangDongHo
JangDongHo deleted the refactor/public-module-layer-structure branch June 11, 2026 09:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant