클린코드 & 리팩토링 & 시큐어코딩
클린코드 (Clean Code)
→ 이해하기 쉽고, 변경하기 쉬운 코드
- 사람이 읽고 이해하기 쉬워야 함
- 네이밍이 잘 되어야 함
- 중복이 없어야 함
- 의존성을 최대한 줄여야 함
- 클래스 혹은 메소드가 한가지 일만 처리해야 함
- 테스트 코드가 있어야 함
필요성
- SW는 한 번 신규 개발되고 오랜 기간 유지보수됨
- 기존 코드에 추가 작업하는 시간이 압도적으로 많음
- 대부분의 시간을 기존 코드를 읽고, 이해하는 데 사용됨 ⇒ 클린코드는 코드리뷰, 디버깅 시간을 단축시킴 (효율 up)
리팩토링 (Refactoring)
→ 결과의 변경 없이 코드 구조 재조정
- 가독성 높이고 유지보수를 편하게 함
- 버그를 없애거나 기능을 추가하는 행위 아님
- 외부 동작을 바꾸지 않고 내부 논리/구조를 개선함
개선이 필요한 코드
이해하기 어려운 코드
수정하기 어려운 코드
확장하기 어려운 코드
필요성
- 소프트웨어의 유지보수를 하는 과정이 간단해짐
- 협업 시 코드를 공유하는 과정에서 어려움이 줄어듦
- 코드 중복을 제거하고, 수정 용이성을 높이므로 작업시간이 줄어듦
- 버그를 발견하기 쉽게 만들어 줌
- 코드의 품질을 좋게 만들어 줌 ⇒ 개발 속도 증가 (효율 up)
시큐어코딩 (Secure Coding)
→ 개발 단계에서 보안 취약점을 제거하고 안전한 코드 작성
종류 | 내용 | 예시 |
---|---|---|
입력 데이터 검증 및 표현 | 입력 값에 대한 검증 누락, 부적절한 검증, 잘못된 형식 지정으로 인해 발생하는 보안 약점 | XXS, SQL Injection, 자원 삽입 등 |
보안 기능 | 보안 기능(인증, 접근제어, 기밀성, 암호화 등)을 적절하지 않게 구현 시 발생하는 보안 약점 | 부적절한 인가, 중요 정보 평문 저장 등 |
시간 및 상태 | 병렬 프로세스/스레드 환경에서 시간 및 상태를 부적절하게 관리하여 발생하는 보안 약점 | 경쟁조건, 제어문을 |
사용하지 않는 재귀함수 등 | ||
에러 처리 | 에러를 처리하지 않거나 불충분 처리한 에러 제거로 인해 에러 정보에 중요 정보가 포함될 때 발생하는 보안 약점 | 약한 패스워드 요구조건, 오류메시지를 통한 정보노출 등 |
코드 품질 | 개발자가 범한 코딩 오류로 인해 발생하는 보안 약점 | Null 포인터 역참조, 부적절한 자원 해제 등 |
캡슐화 | 중요 데이터의 불충분한 캡슐화로 인한 비인가자 접근 허용으로 데이터가 노출되는 보안 약점 | 제거되지 않고 남은 디버그 코드, 시스템 데이터 정보노출 등 |
API 오용 | 의도된 용도에 맞지 않는 API 사용 및 보안에 취약한 API 사용으로 인해 발생하는 보안 약점 | DNS Lookup에 의존한 보안결정, Null 매개변수 미조사 등 |
필요성
⇒ 개발 초기에 결함 발견 시 비용 절감
클린코드 / 리팩토링 / 시큐어코딩
Clean Code | Refactoring | Secure Coding | |
---|---|---|---|
중점 | 코드 가독성 및 유지 관리 가능성 | 외부 동작을 변경하지 않고 코드 품질 개선 | 보안 취약점 및 위협으로부터 보호 |
목표 | 코드 베이스를 이해하고 협업하기 쉽게 만드는 것 | 코드 품질 및 유지 관리 가능성을 개선하는 것 | 보안 위협으로부터 애플리케이션, 데이터, 사용자를 보호호나는 것 |
필요성 | 유지 관리 용이성, 협업 간소화 | 코드 품질 개선, 재작업 비용 절감 | 보안 위협 및 데이터 누출 방지, 무결성 유지 |
references
👉 https://velog.io/@rlrhs11/Code-Refactoring코드-리펙토링-이란
👉 https://isc9511.tistory.com/31