# AutoCode (Template Driven) ## 목적 Claude가 단일 입력값을 기반으로 Spring API 코드의 빈 템플릿만 생성하기 위한 규칙이다. 모든 코드는 `${}` 변수 치환 방식으로 생성한다. ## 생성할 디렉토리 구조 생성 위치는 src/main/java/api 하위에 신규 도메인 패키지로 클래스를 생성한다. ``` src/ ├── main/ │ └── java/ │ ├── api/ # API들을 정의 │ ├── config/ # Configuration Bean들을 정의 │ └── egovframework.javaservice.esframework # es 프레임워크를 정의 ``` --- ## 입력 파라미터 정의 ```text ${domain} // 예: kpi ``` --- ## 내부 파생 규칙 ```text ${requestDto} = ${domain}RequestDTO ${vo} = ${domain}VO ${entity} = ${domain}Entity ${domainPackage} = ${domain을 소문자로} ``` --- ## 1. Controller 템플릿 ```java package com.arms.api.${domainPackage}.controller; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; import com.arms.api.${domainPackage}.service.${domain}Service; import com.arms.api.${domainPackage}.model.dto.${requestDto}; import com.arms.api.${domainPackage}.model.vo.${vo}; @RestController @RequestMapping("/${domain}") @AllArgsConstructor public class ${domain}Controller { private final ${domain}Service ${domain}Service; @PostMapping("/${domain}") public List<${vo}> ${domain}( @RequestBody ${requestDto} requestDTO ) { return ${domain}Service.${domain}(requestDTO); } } ``` --- ## 2. Service Interface 템플릿 ```java package com.arms.api.${domainPackage}.service; import java.util.List; import com.arms.api.${domainPackage}.model.dto.${requestDto}; import com.arms.api.${domainPackage}.model.vo.${vo}; public interface ${domain}Service { List<${vo}> ${domain}(${requestDto} requestDTO); } ``` --- ## 3. Service Impl 템플릿 ```java package com.arms.api.${domainPackage}.service; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.List; import com.arms.api.${domainPackage}.model.dto.${requestDto}; import com.arms.api.${domainPackage}.model.vo.${vo}; import com.arms.egovframework.javaservice.esframework.repository.common.EsCommonRepositoryWrapper; @Slf4j @Service("${domain}Service") @AllArgsConstructor public class ${domain}ServiceImpl implements ${domain}Service { private final EsCommonRepositoryWrapper<${entity}> esCommonRepositoryWrapper; @Override public List<${vo}> ${domain}(${requestDto} requestDTO) { log.info("요청: {}", requestDTO); return List.of(); } } ``` --- ## 4. Request DTO 템플릿 ```java package com.arms.api.${domainPackage}.model.dto; import lombok.Getter; import lombok.Setter; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; import lombok.ToString; import com.arms.egovframework.javaservice.esframework.model.dto.request.SearchRequestDTO; @Getter @Setter @NoArgsConstructor @AllArgsConstructor @ToString public class ${requestDto} extends SearchRequestDTO { } ``` --- ## 5. VO 템플릿 ```java package com.arms.api.${domainPackage}.model.vo; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; import lombok.Builder; @Getter @NoArgsConstructor @AllArgsConstructor @Builder public class ${vo} { } ``` --- ## 생성 규칙 Claude는 다음 규칙을 반드시 따른다: 1. 입력은 `${domain}` 하나만 사용한다 2. 나머지 값은 내부 규칙으로 자동 생성한다 3. 템플릿 구조만 생성한다 4. 메서드 내부 로직을 절대 작성하지 않는다 5. 비즈니스 로직, 조건문, 반복문 작성 금지 6. return은 반드시 기본값만 사용 (`List.of()` 등) 7. 추가 필드, 추가 메서드 생성 금지 8. 주석 생성 금지 9. 설명 문장 출력 금지 ---