프로젝트 내내 덕을 많이 본 코딩 컨벤션이다. 하단 링크를 참고하여 간결하게 우리 프로젝트 만의 컨벤션을 정의했는데 기회가 된다면 이것보다도 더욱 정교하게 만들어 보고 싶다.
1. Basic
1-1. IDE 설정
캠퍼스 핵데이 가이드
에 따라 코딩할 수 있도록 IDE Formatter 적용이 가능함1-1-1. Eclipse
- 아래 링크 D.1.* 내용 참고 https://naver.github.io/hackday-conventions-java/#_eclipse
1-1-2. Intellij
- 아래 링크 D.2.* 내용 참고 https://naver.github.io/hackday-conventions-java/#_eclipse
2. Variable & Method
변수와 메서드 네이밍 규칙
2-1. Common
변수 및 메서드 공통 사항
2-1-1. Naming
- 가급적 이해할 수 있는 쉬운 단어 (축약X) → mod_date (❌), modify_date (👌🏻)
- camelCase 사용 → JAVA, Java Script
- snake_case 사용 → SQL, HTML Attribute
- kebob-case 사용 → CSS
DB 테이블 속성 : parent_noDTO 속성 : parentNoJS var : parentNoJS function : checkParentIdHTML element id : parent_noCSS : #parent_no { font-size : var(—font-base); }
2-2. Variable
변수 및 상수 관련
2-2-1. boolean
가급적 int 자료형 보다 boolean 자료형 사용→ sql result 가 int 형으로 반환 됨.
- boolean 자료형의 경우 'is~' 활용 → isCorrect, isNull
2-2-2. Const
- 상수는 대문자 및 언더바 사용 (JAVA, JS) → TEST_COUNT
2-3. Method
메서드 관련
2-3-1. check
- true or false 를 판별하는 메서드는 'check~' 표기 → checkId(user)
2-3-2. getter & setter
- getName(args), setName(args)
2-3-3. DAO & SQL mapper
- insert → insertBoard(board)
- update → updateBoard(board)
- select → boardDto selectBoard(board), List<board> selectBoardList(Board board)
- delete → deleteBoard(board)
3. Structure
프로젝트 구조
3-1. Folder & Package & File
3-1-1. Outline
- 아래 표를 기준으로 프로젝트 구조를 지정
- 이후 프로젝트 규모에 따라 controller, service, dao 패키지에
업무영역
으로 하위 패키지 리팩토링
3-1-2. Naming
- camelCase → java class
- snake_case → java package
- kebob-case → xml, js, css 등 기타 모든 파일명
3-2. JAVA Class
본연의 업무에 충실하고 유지보수에 용이하도록 구성
3-2-1. Controller
- 로직 구현 지양
- Service 호출 및 Exception 처리 전담
3-2-2. Service
- 도메인 서비스 지양 → 기능별 세분화 서비스 지향 UserService → UserRegisterService, UserEmailService ...
3-2-3. Dao
- interface 구현 없이 @Mapper 활용
4. Coding
코딩 스타일에 관련 된 규정
4-1. DTO 활용
프로젝트에서 Dto를 적극적으로 활용하여 유지보수 및 확장이 용이한 환경을 구성한다.
4-1-1. 가급적 DTO 를 사용하여 데이터 처리하기
- Dto attribute private String id → private UserDto userDto
- Service args userDto selectUser(int no) → userDto selectUser(userDto)
4-1-2. 객체 분리 사용
- request, response 객체 분리 사용 불필요한 정보 제거
4-2. 예외처리
- 예외는 무시하지 말고 처리할 것
4-3. 주석처리
- 각 단위별 기능 명시
- 모호한 부분 설명
4-4. 클래스 및 메서드 작게 나누기
세부 기능별 분리(모듈화)
- 재사용성 향상
- 가독성 향상
- 유지보수 향상
4-5. Unit Test
- Junit 4 사용
- 반드시 TDD를 고수할 필요는 없음
- FIRST 규칙 지향 Fast: 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 한다. Independent: 각각의 테스트는 독립적이며 서로 의존해서는 안된다. Repeatable: 어느 환경에서도 반복 가능해야 한다. Self-Validating: 테스트는 성공 또는 실패로 bool 값으로 결과를 내어 자체적으로 검증되어야 한다. Timely: 테스트는 적시에 즉, 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.
5. Etc
그 밖의 사항들
5-1. SQL
필수 사항은 아니지만 가독성 향상을 위함
5-1-1. 예약어
- 예약어는 대문자 사용 → select(❌), SELECT(👌🏻)
5-1-2. 속성(Column, Attribute) & 테이블(Table, Relation)
- Snake Case → modify_date
- 복수형 대신 단수형 사용 → users(❌), user(👌🏻)
- Query 에서 backquote(``) 감싸기
5-1-3. Query 예시
SELECT `user`.`modify_date` FROM `my_board`.`user`;
5-2. URI
URI는 대소문자에 따라 다른 페이지로 인식하기 때문에, 필수 사항은 아니지만 범용적으로 사용되는 방식 채택
- 소문자 사용 → Create(❌), CREATE(❌), create(👌🏻)
- Kebab Case 사용 → create_post(❌), createPost(❌), create-post(👌🏻)
https://example.com/blogs/new-post
5-3. CSS
프로젝트 진행 간 유지보수 용이성에 초점
5-3-1. 변수 활용
- 색상 리스트, 글자 크기 등 사이트 일관성을 유지시켜야할 항목은 변수로 지정하여 활용
5-3-2. 사이즈
- 요소 크기는 가급적 px 가 아닌 rem(root-em) 사용 → html 폰트 사이즈 변경 시 하위 요소 일괄 적용 가능 → em 과 비교해 고려사항이나 유지보수 측면에서 이점
5-3-3. 변수 및 rem 활용 예시
@media (min-width: 768.1px) { /* 가로 768px 초과시 1rem == 10px */ html { font-size: 62.5%; } } @media (max-width: 768px) { /* 가로 768px 이하 1rem == 8.75px */ html { font-size: 54.6875%; } } html{ /* 배경색 */ --bg-color-1: #715d74; --bg-color-2: #a08aa3; --bg-color-3: #d1bad4; --bg-color-4: #d1bad470; --bg-color-5: #ffffff; /* 글자색 */ --txt-color-1: black; --txt-color-2: rgb(59, 59, 59); --txt-color-3: grey; --txt-color-4: rgb(214, 212, 212); --txt-color-5: white; --txt-color-warn: rgb(215, 68, 68); /* 폰트 사이즈 */ --font-xs: 1.2rem; --font-sm: 1.4rem; --font-base: 1.6rem; --font-lg: 1.8rem; --font-xl: 2rem; } .article { font-size : var(--font-base); }
참고
- 팀 코딩 컨벤션 정립하기 https://log.hodol.dev/techcourse/coding-convention
- 캠퍼스 핵데이 Java 코딩 컨벤션 https://naver.github.io/hackday-conventions-java/
- Naver JavaScript Style Guide https://github.com/naver/eslint-config-naver/blob/master/STYLE_GUIDE.md
- 나만의 코딩컨벤션 작성하기 https://jobc.tistory.com/212
- 자바 코딩 가이드(파일명, 메소드, 코딩규칙) https://shlee0882.tistory.com/129
- 자바 코딩 규칙 https://myeonguni.tistory.com/1596
Loading Comments...