Files
madeu_petit_home/rules.md
2026-03-01 16:35:35 +09:00

5.1 KiB

프로젝트 코딩 가이드라인 (Java Backend)

AI 에디터(Agent)는 다음 규칙을 항상 준수하여 코드를 작성하고 수정해야 합니다.

0. 기본 소통 규칙 (Communication)

  • 언어: 사용자에 대한 모든 답변과 코드 설명은 항상 **한글(Korean)**로만 작성해야 합니다.

1. 패키지 구성 (Package Structure)

  • 베이스 패키지: com.madeuhome
  • 컨트롤러 (Controller): ctrl
  • 서비스 (Service): svc
  • DTO (Data Transfer Object): dto
  • 매퍼 (Mapper): mapper
  • 공통 서비스: com.madeuhome.common.service (LogHistoryService 등 시스템 공통 모듈)

2. 파일 명명 규칙 및 구성 (File Naming Conventions)

  • 컨트롤러 (Controller): [도메인명]Controller.java (예: ABCDController.java)
  • 서비스 (Service): [도메인명]Service.java (인터페이스와 구현체(impl)를 분리하지 않고 Service 클래스 파일 하나로만 구현, 예: ABCDService.java)
  • DTO: [도메인명]DTO.java (예: ABCDDTO.java)
  • 매퍼 (Mapper): [도메인명]Mapper.java (예: ABCDMapper.java)
  • XML Mapper: [도메인명]SqlMap.xml (namespace는 Mapper 인터페이스의 FQCN과 반드시 일치)

3. URL 및 메소드 명명 규칙 (RequestMapping & Method Naming)

1) RequestMapping (URL) 및 컨트롤러 메소드명

  • 페이지 이동하는 url : moveXXXX.do
  • 팝업 오픈하는 url : openXXXX.do
  • 조회 url : getXXXX.do
  • 저장 url : putXXXX.do
  • 수정 url : modXXXX.do
  • 삭제 url : delXXXX.do
  • 단, 컨트롤러 메소드명은 위 url에서 .do를 제외한 이름과 동일하게 명명합니다.

2) 서비스 메소드명

  • 서비스 메소드명은 컨트롤러 메소드명과 동일하게 명명합니다.
    • 조회: getXXXX / 목록 조회: getXXXXList
    • 저장: putXXXX
    • 수정: modXXXX
    • 삭제: delXXXX

3) Mapper 인터페이스 메소드명

  • 단일조회 : selectXXXX
  • 리스트조회 : selectListXXXX
  • insert : insertXXXX
  • update : updateXXXX
  • delete : deleteXXXX

4. 데이터베이스 연동 정보 (DB Connection)

  • application-local.yml의 설정을 기반으로 한 공통 접속 정보입니다.
  • Host: 183.98.184.84
  • Port: 3306
  • Database: madeu
  • User: madeu
  • Password: apdlemdb12#$

5. 아키텍처 및 코딩 원칙 (Architecture & Coding Principles)

5-1. 컨트롤러 원칙 (Skinny Controller)

  • 컨트롤러에는 비즈니스 로직이나 예외처리 로직을 넣지 않고, 서비스 메서드를 호출하는 1줄로만 작성합니다.
  • 컨트롤러 클래스는 @Controller 대신 **@RestController**를 사용하며, @ResponseBody는 생략합니다.
  • 데이터 입출력 메소드의 파라미터는 **단일 DTO 하나만 @RequestBody**로 받습니다.
  • 파일 업로드가 포함된 경우에만 @ModelAttribute + @RequestParam MultipartFile을 허용합니다.
  • 화면 이동(move~) 메소드는 ModelAndView를 리턴합니다. (@RestController에서 String 리턴 시 뷰 이름이 아닌 응답 바디로 해석되므로)
  • 화면 이동 메소드의 뷰 경로는 컨트롤러에서 직접 명시합니다. (서비스에 위임 금지)

5-2. 서비스 원칙 (Service Layer)

  • 에러 처리(try-catch), 응답 메시지(msgCode, msgDesc) 설정은 서비스 계층에서 전담합니다.
  • HttpServletRequest, HttpSession@Autowired로 직접 주입받아 사용합니다. (Spring이 Request-scope 프록시로 제공)
  • session.getAttribute("loginMemberId")를 통해 로그인 ID를 가져오고, DTO에 설정합니다.

5-3. DTO 원칙 (DTO Communication)

  • HashMap 사용 금지. 컨트롤러 ↔ 서비스 ↔ 매퍼 간 모든 데이터는 DTO 객체만 사용합니다.
  • DTO에는 @Data (Lombok)을 사용합니다.
  • DTO 필드 구성:
    • DB 컬럼 매핑 필드: muProcedureReviewId, title, content
    • 조회 결과 전용 필드: rowNum, writeDate, writeName
    • 검색/UI 변수: startDate, endDate, start, limit, sort, dir
    • 응답 매핑 변수: msgCode, msgDesc, success, totalCount, rows(Object 타입), tId

5-4. Mapper 원칙 (MyBatis Mapper)

  • Mapper는 @Mapper 어노테이션을 사용한 인터페이스로 작성합니다. (SqlSessionDaoSupport 상속 금지)
  • XML Mapper의 namespace는 Mapper 인터페이스의 **FQCN(Fully Qualified Class Name)**과 일치시킵니다.
  • XML의 resultTypehashmap 대신 DTO FQCN을 사용합니다.
    • 예외: 도메인 외부 테이블 조회(카테고리 등)는 hashmap 허용
  • XML alias는 **DTO 필드명(camelCase)**과 정확히 일치시킵니다.
  • 단건 조회는 List 대신 DTO 단일 객체를 리턴합니다.

6. 파일 업로드 규칙 (File Upload)

  • MultipartFile.transferTo() 사용 시 반드시 절대경로를 명시합니다:
    File dest = new File(outDir, savedName);
    file.transferTo(dest.toPath().toAbsolutePath());
    
  • 상대경로 사용 시 Tomcat 임시 디렉토리 기준으로 해석되어 오류가 발생합니다.