본문 바로가기

Study/룰북

[코드 컨벤션] JAVA, SPRING, Thymeleaf, MSSQL 코드 개발 규칙

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_COUNTUSP_SELECT_TOTAL_MESSAGE_COUNT
 

2. 자바스크립트 작성 규칙 (3.2)

✅ 기본 원칙

  • HTML 최초 호출 기반 페이지 구조
  • 페이지마다 초기화 함수 생성 및 실행 (init())
  • 모든 데이터 조회는 비동기(fetch/ajax) 기반
  • 동기 처리는 async/await 우선, 보조적으로 .then() 사용 가능
  • 복잡한 이벤트 핸들러는 함수로 분리하여 가독성 확보

✅ 코드 구성 순서

  1. fetch: 데이터 조회 함수
  2. util: 데이터 핸들링 유틸 함수
  3. handler: 이벤트 처리 함수
  4. bind: 이벤트 바인딩
  5. 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