5.1 KiB
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
- DB 컬럼 매핑 필드:
5-4. Mapper 원칙 (MyBatis Mapper)
- Mapper는
@Mapper어노테이션을 사용한 인터페이스로 작성합니다. (SqlSessionDaoSupport상속 금지) - XML Mapper의
namespace는 Mapper 인터페이스의 **FQCN(Fully Qualified Class Name)**과 일치시킵니다. - XML의
resultType은hashmap대신 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 임시 디렉토리 기준으로 해석되어 오류가 발생합니다.