클린코드(Clean Code) & 리팩토링(Refactoring) 시큐어코딩(Secure Coding)
클린코드
- 가독성이 높은 코드
- 코드를 작성하는 의도와 목적이 명확하며, 코드가 잘 읽히고, 정돈된 코드
- 네이밍 이 잘 되어 있고 오류, 중복 코드가 없음
- 의존성이 최소화되어있고, 클래스, 메소드가 한가지 일만 처리
- 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행해야 함
클린코드를 만드는 규칙
1. 네이밍(Naming)
변수, 클래스, 메소드에 의도가 분명한 이름을 사용
2. 주석(comment)
- 코드를 읽는 사람이 코드를 잘 이해할 수 있도록 작성
- 코드 내용을 빠르게 유추할 수 있는 내용에는 주석을 달지 않는다.
3. 꾸미기(aesthetics)
- 규칙적인 들여쓰기와 줄바꿈
- 불규칙한 중복 코드를 제거한다
4. 흐름제어(making control flow easy to read)
- 비교문 작성시 왼쪽에는 변수를, 오른쪽에는 상수를 둔다.
- 부정이 아닌 긍정을 다룬다
- 삼항 연산자는 매우 간단한 경우에만 사용한다
- do-while 루프는 피한다.
5. 함수(Function)
함수는 가급적 작게, 한번에 하나의 작업만 수행하도록 작성한다.
var vote_changed = function (old_vote, new_vote) {
var score = get_score();
if (new_vote !== old_vote) {
if (new_vote == 'Up') {
score += (old_vote === 'Down' ? 2 : 1);
} else if (new_vote == 'Down') {
score -= (old_vote === 'Up' ? 2 : 1);
} else if (new_vote == '') {
score += (old_vote === 'Up' ? -1 : 1);
}
}
set_score(score);
};
▼ 클린코드
var vote_value = function (vote) {
if(vote === 'Up') {
return +1;
}
if(vote === 'Down') {
return -1;
}
return 0;
};
var vote_changed = function (old_vote, new_vote) {
var score = get_score();
score -= vote_value(old_vote); // 이전 값 제거
score += vote_value(new_vote); // 새로운 값 더함
set_score(score);
};
리팩토링
- 코드리뷰를 통해 프로그램의 외부 동작은 그대로 두고 내부의 코드를 클린 코드로 개선하는 것
- 코드의 가독성을 높이고, 프로그램의 유지보수에 큰 도움이 된다.
- 리펙토링을 진행하며 의도치않은 기능 변경이나 버그가 발생할 것을 대비해 회귀테스트를 진행한다.
리팩토링 대상
- 메소드 정리
- 중복 코드
- 거대한 클래스
- 객체 간 기능에 따른 위치 변경, 클래스 구분
- 캡슐화를 이용한 데이터 구성
- 조건문 단순화
- 메소드 호출 단순화
- 클래스 및 메소드 일반화: 동일 기능 가진 메소드가 여러개일 경우 수퍼 클래스로 이동
코드리뷰 과정
- 계획 수립
- 교육과 역활 정의
- 코드 인스펙션(작성한 소스코드를 분석해서 개발 표준에 위배되었거나 잘못된 부분을 수정) 위한 인터뷰, 산출물, 도구 준비
- 검토 회의로 각자 역할을 맡아 임무 수행
- 발견된 결함을 수정하고 재검토 여부 결정
- 보고된 결함 및 이슈가 수정되었는지 확인하고 시정조치 이행
시큐어 코딩
- 안전한 소프트웨어를 개발하기 위해, 소스코드 등에 존재할 수 있는 잠재적인 보안약점을 제거하는 것
- 사례
- sql injection 취약점으로 개인정보 유출
- url 파라미터 조작해 개인정보 유출
- 무작위 대입공격으로 기프트카드 정보 유출
KISA에서 Python 시큐어코딩 가이드를 제공하고 있다.
일반적으로 리팩토링이 클린코드보다 더 큰 의미를 갖는다.
또한 클린코드는 프로그램 설계시부터 잘 이루어지는 것이 중요하고, 리팩토링은 결과물이 나온 이후의 수정, 추가작업 시 개선해 나가는 것이다.
정리하자면 클린코드는 다른사람이 이해하기 쉽게 잘 작성된 코드 형식, 리팩토링은 코드 작성을 완료한 뒤 클린 코드 형태로 기존 코드를 정리하는 것, 시큐어코딩은 보안을 생각한 코딩이라고 보면 될 것 같다.🧐
내용출처