개발 가이드 백엔드 패키지 구조
최종 수정:

패키지 구조

com.scraping.agent 패키지 구조 및 도메인 분리 규칙

패키지 구조

기본 패키지

com.scraping.agent

전체 구조

com.scraping.agent
├── domain/
│   ├── admin/
│   │   └── controller/
│   │       ├── AdminController.java
│   │       └── NotesAdminController.java
│   ├── code/
│   │   ├── repository/
│   │   ├── service/
│   │   ├── vo/
│   │   └── Code.java
│   ├── digest/                         # AI 다이제스트
│   │   ├── ai/                         # AI 에이전트
│   │   │   ├── HeadAgent.java
│   │   │   ├── SummaryAgent.java
│   │   │   └── VerificationAgent.java
│   │   ├── controller/
│   │   ├── repository/
│   │   ├── service/
│   │   │   ├── AiProcessingService.java
│   │   │   ├── DigestNewsService.java
│   │   │   ├── DigestOrchestrator.java
│   │   │   └── MailService.java
│   │   ├── vo/
│   │   └── DigestNews.java
│   ├── guide/                          # 개발 가이드 (마크다운)
│   │   ├── controller/
│   │   ├── model/                      # View Model (DB 없음)
│   │   ├── service/
│   │   └── vo/
│   ├── home/
│   │   └── controller/
│   ├── news/                           # 뉴스 수집
│   │   ├── collector/                  # 뉴스 수집기
│   │   │   ├── job/                    # 채용 공고 수집기
│   │   │   ├── AiNewsCollector.java
│   │   │   ├── DevNewsCollector.java
│   │   │   └── ...
│   │   ├── controller/
│   │   ├── repository/
│   │   ├── service/
│   │   ├── CollectedItem.java
│   │   ├── ContentType.java            # Enum
│   │   ├── NewsItem.java
│   │   └── VerificationStatus.java     # Enum
│   ├── notes/
│   │   ├── controller/
│   │   ├── repository/
│   │   ├── service/
│   │   ├── vo/
│   │   └── Post.java
│   └── resume/
│       ├── controller/
│       ├── service/
│       └── vo/
└── global/
    ├── batch/          # 스케줄러 (DigestScheduler)
    ├── common/         # 공통 클래스 (ApiResponse, BaseEntity)
    ├── config/         # 설정 (DataInitializer, DigestProperties)
    ├── constant/       # 상수 (CategoryConstant, CodeConstant 등)
    ├── exception/      # 전역 예외 처리 (GlobalExceptionHandler)
    ├── health/         # 헬스체크 컨트롤러
    ├── slack/          # Slack 알림 (SlackService, SlackEventListener)
    └── util/           # 유틸리티 (FingerprintUtils)

도메인별 역할

도메인설명
admin관리자 화면 (뉴스/노트 관리)
code공통 코드 관리 (카테고리 등)
digestClaude AI 기반 뉴스 다이제스트 생성 및 메일 발송
guide이 docs/ 디렉터리의 마크다운 파일을 읽어 화면 렌더링
home메인 페이지
news외부 소스에서 뉴스/기술 글 수집 및 표시
notes개인 노트/포스트 관리
resume이력서 페이지

파일 위치 규칙

Entity

  • 도메인 루트에 위치: domain/{도메인}/{Domain}.java
  • 예: domain/news/NewsItem.java, domain/notes/Post.java

Controller

  • domain/{도메인}/controller/ 아래 위치
  • 화면 반환: @Controller 사용
  • REST API: @RestController 사용

Service

  • domain/{도메인}/service/ 아래 위치
  • Interface 작성 안 함 (단일 구현체 기준)

Repository

  • domain/{도메인}/repository/ 아래 위치
  • JPA: JpaRepository<Entity, Long> 상속
  • MyBatis: @Mapper 인터페이스

VO (요청/응답)

  • domain/{도메인}/vo/ 아래 위치
  • 요청: {목적}Req.java (예: PostCreateReq)
  • 응답: {목적}Res.java (예: DigestNewsListRes)

Model (DB 없는 View Model)

  • domain/{도메인}/model/ 아래 위치
  • 예: domain/guide/model/GuideDoc.java

메서드 네이밍 접두사 표

동작접두사예시
등록/생성regregPost, regNews
수정uptuptPost, uptNews
삭제deldelPost, delNews
단건 조회getgetPost, getNews
목록 조회get + List/PagegetPostList, getNewsPage

global/ 패키지 사용 규칙

  • 도메인 간 공유 로직만 global/에 위치
  • 도메인 전용 로직을 global/에 넣는 것 금지
  • 상수는 global/constant/{도메인}Constant.java에 관리
  • 신규 유틸리티는 global/util/ 아래 추가
AI 문서 검색

현재 페이지 내용을 기반으로 질문하세요.