클린코드 & 리팩토링 & 시큐어코딩



클린코드 (Clean Code)

이해하기 쉽고, 변경하기 쉬운 코드

  • 사람이 읽고 이해하기 쉬워야 함
  • 네이밍이 잘 되어야 함
  • 중복이 없어야 함
  • 의존성을 최대한 줄여야 함
  • 클래스 혹은 메소드가 한가지 일만 처리해야 함
  • 테스트 코드가 있어야 함

필요성

클린코드의 필요성 - 비용 그래프

  • SW는 한 번 신규 개발되고 오랜 기간 유지보수됨
  • 기존 코드에 추가 작업하는 시간이 압도적으로 많음
  • 대부분의 시간을 기존 코드를 읽고, 이해하는 데 사용됨 ⇒ 클린코드는 코드리뷰, 디버깅 시간을 단축시킴 (효율 up)



리팩토링 (Refactoring)

결과의 변경 없이 코드 구조 재조정

  • 가독성 높이고 유지보수를 편하게 함
  • 버그를 없애거나 기능을 추가하는 행위 아님
  • 외부 동작을 바꾸지 않고 내부 논리/구조를 개선함

개선이 필요한 코드

이해하기 어려운 코드

수정하기 어려운 코드

확장하기 어려운 코드


필요성

  • 소프트웨어의 유지보수를 하는 과정이 간단해짐
  • 협업 시 코드를 공유하는 과정에서 어려움이 줄어듦
  • 코드 중복을 제거하고, 수정 용이성을 높이므로 작업시간이 줄어듦
  • 버그를 발견하기 쉽게 만들어 줌
  • 코드의 품질을 좋게 만들어 줌 ⇒ 개발 속도 증가 (효율 up)



시큐어코딩 (Secure Coding)

→ 개발 단계에서 보안 취약점을 제거하고 안전한 코드 작성

종류 내용 예시
입력 데이터 검증 및 표현 입력 값에 대한 검증 누락, 부적절한 검증, 잘못된 형식 지정으로 인해 발생하는 보안 약점 XXS, SQL Injection, 자원 삽입 등
보안 기능 보안 기능(인증, 접근제어, 기밀성, 암호화 등)을 적절하지 않게 구현 시 발생하는 보안 약점 부적절한 인가, 중요 정보 평문 저장 등
시간 및 상태 병렬 프로세스/스레드 환경에서 시간 및 상태를 부적절하게 관리하여 발생하는 보안 약점 경쟁조건, 제어문을
사용하지 않는 재귀함수 등
에러 처리 에러를 처리하지 않거나 불충분 처리한 에러 제거로 인해 에러 정보에 중요 정보가 포함될 때 발생하는 보안 약점 약한 패스워드 요구조건, 오류메시지를 통한 정보노출 등
코드 품질 개발자가 범한 코딩 오류로 인해 발생하는 보안 약점 Null 포인터 역참조, 부적절한 자원 해제 등
캡슐화 중요 데이터의 불충분한 캡슐화로 인한 비인가자 접근 허용으로 데이터가 노출되는 보안 약점 제거되지 않고 남은 디버그 코드, 시스템 데이터 정보노출 등
API 오용 의도된 용도에 맞지 않는 API 사용 및 보안에 취약한 API 사용으로 인해 발생하는 보안 약점 DNS Lookup에 의존한 보안결정, Null 매개변수 미조사 등

필요성

시큐어코딩의 필요성 - SW 개발 단계 별 결함 수정 비용 분석 표

개발 초기에 결함 발견 시 비용 절감



클린코드 / 리팩토링 / 시큐어코딩

Clean Code Refactoring Secure Coding
중점 코드 가독성 및 유지 관리 가능성 외부 동작을 변경하지 않고 코드 품질 개선 보안 취약점 및 위협으로부터 보호
목표 코드 베이스를 이해하고 협업하기 쉽게 만드는 것 코드 품질 및 유지 관리 가능성을 개선하는 것 보안 위협으로부터 애플리케이션, 데이터, 사용자를 보호호나는 것
필요성 유지 관리 용이성, 협업 간소화 코드 품질 개선, 재작업 비용 절감 보안 위협 및 데이터 누출 방지, 무결성 유지




references
👉 https://velog.io/@rlrhs11/Code-Refactoring코드-리펙토링-이란
👉 https://isc9511.tistory.com/31