SDC 2023 - 리팩토링 데이

업데이트:

개요

본 문서는 2023.11.14 ~ 11.15 개최된 SDC2023 세션 중 하나인, 리팩토링 데이에 관해 소개합니다.

GPT 3줄 요약

  1. 2023년 SDC 세션에서 소개된 리팩토링 데이는 Samsung Account 팀이 기술적 부채를 해소하기 위해 소스 코드 리팩토링에 착수한 경험을 공유한다.

  2. 초기 시도는 실패했지만, 목요일에 진행되는 리팩토링 데이와 코드 품질 수치화 개선으로 배포 횟수가 감소하고 팀 내 균형 잡힌 성장을 이루었다.

  3. 이를 통해 개인은 리팩토링의 중요성을 깨닫게 되었으며, 팀은 효율적인 일 처리를 위해 인적 특성을 고려하는 중요성을 이해했다.

리팩토링의 필요성

Samsung Account 팀은 꾸준히 기술적 부채 해결을 위해 노력해왔다고 합니다. 작년까지는 인프라의 기술적 부채 위주로만 개선했기에, 그간 소스 코드의 부채는 늘어갔습니다.

소스 코드의 빚이 너무 늘어, 소스 3줄을 수정하기 위해 사이드, 사이드, 사이드가 터지는 바람에… 영향 파악과 수정에 무려 2주가 소요되었습니다.

발표자 임민승님은 이런 사례들을 계기로 ‘리팩토링’ 데이를 진행하고자 합니다.

리팩토링 데이가 뭐야?

리팩토링 데이는 모든 구성원이 참여하여 하루종일 리팩토링 업무에 몰입하는 날을 의미합니다.

Samsung Account는 300,000 라인 이상의 큰 규모의 시스템이었고, 하루에도 PR이 8건씩 요청되는 상황에서 개인의 노력만으로는 리팩토링을 달성할 수 없었기 때문에 내려진 결정이었습니다.

시행착오

시행 최초, 어카(account)팀은 ‘리팩토링 데이’를 다음과 같이 정의했습니다.

매주 금요일 09:00 ~ 18:00

  1. 아침 회의를 통한 목표 산정
  2. 리팩토링
  3. 얼굴을 마주보고 peer, pair review
  4. 오후 회의를 통해 진행 내용 공유 및 회고

하지만 최초의 리팩토링 데이는 실패했습니다. 그 이유로는..

  1. 금요일의 특성 상, 구성원들이 자율 출근, 휴가 등의 이유로 리팩토링에 잘 참여하지 못했습니다.

  2. 리팩토링에 대한 동기 부여의 부족으로, 구성원들이 열심히 참여하지 못했습니다.

삼성 어카팀은 이런 시행착오를 바탕으로, 리팩토링 데이를 다음처럼 보완합니다.

개선

1. 리팩토링 ‘day’ 변경

기존 매주 금요일 진행하던 리팩토링 데이를 ‘목요일’로 변경합니다.

2. 리팩토링 수준 수치화

소스 코드의 수준을 정적으로 분석하는 ‘Analysishub’ 툴을 활용해 수치화합니다. (삼성 내부적으로 사용되는 분석 툴인듯, 유사 오픈소스 툴로 sonarQube, source monitor 등이 있음)

수치화하는 항목은 다음과 같습니다.

name description
Cyclomatic Complexity 순환 복잡도가 낮은가?
Duplicate Code 중복되는 코드가 적은가?
God Module 마치 ‘신’처럼 전지전능한 기능을 하는 모듈이 적은가?
Coupling Between Objects 객체 간 디커플링이 잘 되어있는가?
DepEndency comPlexity 의존성이 적은가?
Lines Of Code 한 소스 파일에 라인 수가 적은가?
Module Circular Dependency 순환 참조(서로 의존을 가진) 모듈이 적은가?

어카팀은 이 중 CC, LOC, DC를 개선하면, 나머지 지표는 따라올 것이라 믿고, 리팩토링 목표를 CC, LOC, DC의 개선으로 선정했습니다.

3. PR Review Bot을 이용한 수치 알림

풀리퀘를 요청하면 Review Bot이 트리거되어, 해당 요청에서의 CC, LOC, DC 등의 분석 지표를 댓글로 알려줍니다. 이는 구성원들이 리팩토링을 게임처럼 임하게 하여 경쟁 심리로 불타게 하는 원동력이 되었습니다.

성과

이런 업무 프로세스의 개선을 리팩토링 데이에 반영하고, 1월부터 9월까지 진행한 결과…

1. CC, DC, LOC 수치 개선

CC 0.79 → 4.78
DC 3.01 → 4.01
LOC 0.92 → 4.03

2022년 대비 2023년에는 CC, DC, LOC 등의 여러 수치가 좋아졌습니다. 이런 수치의 개선이 어떤 효과를 불렀을까요?

2. 배포 횟수 급감

2021: 23회 2022: 24회 (+4%) 2023: 15회 (-38%)

배포는 피곤한 작업을 동반하고, 준비와 모니터링에 많은 심적, 인적 자원을 소요합니다. 리팩토링 과정을 통해 2022년 대비 배포 횟수가 38%가량 감소했고, 감소한 시간만큼 개발에 더 집중할 수 있어 좋았다고 합니다.

3. 구성원들의 균형 잡힌 성장

2022년 대비 Commit : Code Review 비율이 개선됩니다.
커밋 위주의 개발에서 함께 고민하고 성장하는 개발로 전환되었습니다.

sdc-git

팀원 간 서비스에 관한 소통이 강화되었고, 팀워크도 중복 코드를 작성하는 일도 자연스레 줄어들었습니다.

개인 후기

리팩토링이 중요하다 듣고는 있었지만, 여태 혼자나 둘, 셋이서 작은 서비스만 개발해본 저에게는 직접적으로 와닿지 않았습니다.
하지만 SDC가 들려준 사례에 기반한 소개는, 리팩토링의 중요성에 대해 저를 설득시켜주었습니다.

리팩토링에 대한 내용은 아니지만 인상 깊었던 내용은, 무엇인가의 일을 진행할 때 인적 특성을 중요히 고려해야 함 입니다.
집중 가능한 날과 일에 대한 동기부여 등, 일은 사람이 하는 것이기에 ‘사람’에 중점을 두어 일을 효율적으로 진행해야겠습니다.

각주

발표자 ‘임민승’님
sdc-2
sdc-1

댓글남기기