1. 프로시저 작성 규칙 (3.1)
✅ 기본 규칙
- 프로시저 명은 USP_ 접두사를 고정 사용
- 목적에 따라 SELECT, UPDATE, INSERT, DELETE를 조합하여 사용
- 서비스 목적, 업무 도메인 (예: EVENT, MESSAGE 등)을 명시
- 부분 업데이트 시 목적 명확히 표현 (예: CANCEL, DELETE 등)
✅ 예외 및 예외처리
- 필수 파라미터 누락 시 THROW 99999, N'{오류내용}', 1; 처리
- TRY-CATCH 블록으로 예외를 감싸고 RAISERROR로 로깅 가능
IF @eventSeq IS NULL THROW 99999, N'[이벤트 고유번호] 누락되었습니다.',1;
BEGIN TRY
-- 작업 수행
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000), @ErrorSeverity INT, @ErrorState INT;
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR(@ErrorMessage, @ErrorSeverity, @ErrorState);
END CATCH
✅ 네이밍 개선 제안
- 단순 숫자 구분보단 역할이 드러나는 이름 사용 권장
- 예: USP_SELECT_MESSAGE_LIST_COUNT → USP_SELECT_TOTAL_MESSAGE_COUNT
2. 자바스크립트 작성 규칙 (3.2)
✅ 기본 원칙
- HTML 최초 호출 기반 페이지 구조
- 페이지마다 초기화 함수 생성 및 실행 (init())
- 모든 데이터 조회는 비동기(fetch/ajax) 기반
- 동기 처리는 async/await 우선, 보조적으로 .then() 사용 가능
- 복잡한 이벤트 핸들러는 함수로 분리하여 가독성 확보
✅ 코드 구성 순서
- fetch: 데이터 조회 함수
- util: 데이터 핸들링 유틸 함수
- handler: 이벤트 처리 함수
- bind: 이벤트 바인딩
- init: 페이지 초기화 함수
✅ 예시 구조
const getSomething = (params) => fetch.get("/blah/blah", params);
const dataTransform = (data) => ({ data, addSomething: 1 });
const handleClickButton = ({ target }) => {
// 처리 로직
};
$("button").on("click", handleClickButton);
const pageInitialize = async () => {
try {
const data = await getSomething({ test: 1 });
// 처리 로직
} catch (e) {
console.error("초기화 오류", e);
}
};
pageInitialize();
✅ 기타 제안
- JS 폴더 구조화: js/fetch, js/util, js/handler 등으로 모듈화
- ES6 모듈(import/export) 도입 검토 (향후 확장성 고려)
- fragments는 독립적으로 동작해야 하며, 상호 참조 피함
3. 자바 작성 규칙 (3.3)
✅ 단일 책임 원칙 (SRP)
- 메서드는 하나의 책임만 가지도록 설계
- if 분기로 기능 추가보다 새로운 메서드로 역할 분리
✅ Interface 활용
- 기능별 추상화로 공통화 및 테스트 용이성 확보
✅ Layer 구분
- Controller, Service, Mapper 명확히 구분
- Controller 외부 영역에서 Http 관련 객체 사용 지양
- 연산/가공 로직은 Controller가 아닌 Service에서 처리
✅ Controller 작성
- RESTful URL 명명
- 예: /item/list → @GetMapping("/item/list")
- View 조회는 **/page 형태로 경로 지정
- 등록/수정은 각각 @PostMapping, @PatchMapping
- 요청 데이터는 @RequestBody를 통해 받기
✅ Service 작성
- 리스트 + 페이지네이션은 ListServiceTemplate 또는 BaseListService를 상속 구현
- 책임 분리, 접근 제한자 철저히 준수
- Dto / Entity / ViewModel 등 계층 구분 명확히
✅ Mapper 작성
- SQL 쿼리 네이밍은 "동사 + 목적어" 형식 유지
- 예: selectItemById, updateEventStatus
📌 참고 사항
- 외부 톰캣(8.5)을 사용하므로 내장 설정보다는 WAS 공통 설정도 함께 고려 필요
- JS, DB, Java 각각 컨벤션이 연동되도록 프레임워크-언어-WAS 흐름을 고려해 설계 유지
728x90
'Study > 룰북' 카테고리의 다른 글
[spring프로젝트] 협업 룰에 대한 고찰 (0) | 2023.08.04 |
---|