본문 바로가기

Spring

클린 스프링: 스프링 개발자를 위한 클린 코드 전략 - 이일민(토비)

2024 인프콘 다시보기 - 클린 코드에 대한 이일민(토비)님의 강의를 들으며 내용을 정리해 보았습니다.

 

[참고]

영상은 아래 링크에서 보실 수 있습니다.

https://youtu.be/d3krJ4el8Hg?si=4gK7MB1HM5Kt5uob 

 

 

  • 개발자에게 기술 성장과 관련된 책을 추천하면?
    • 첫 번째 - 클린 코드

향로님의 클린 코드에 대한 말

클린코드를 지향할수록 점점 구현 능력이 떨어진다 이런 생각 해보신 적 없으세요?

  • 클린 코드에 집중할 수록 좋은 코드, 구조, 설계에 대해 집착하게 되어 구현 속도가 느려지고 구현 능력이 떨어진다.
  • 클린 코드라는 말이 처음 쓰인 곳 : 켄트 벡의 테스트 주도 개발
  • Clean Code That Works (작동하는 클린 코드)
  • 그러나 클린 코드에 대한 다음과 같은 오해가 존재한다.
    • 클린 코드 추구 - 주석 작성 X
    • 코드가 클린하면 리팩터링할 이유 X
    • 클린 코드는 테스트 코드가 필요 없다?
  • 클린 코드의 특성
    • 읽기 좋은 코드
    • 이해하기 좋은 코드
    • 확장하기 좋은 코드
    • 유지보수하기 좋은 코드 → 핵심! <유지보수성>
  • 그럼 클린 아키텍처는?
    • 품질에 관한 요구사항(비기능적 요구사항)에서 유지보수성은 특별하다.
    • 유지보수하기 좋은 코드는 확장하기 좋고, 안전하고, 신뢰할 수 있고, 좋은 성능으로 발전시킬 수 있고, 상호 호환성이 뛰어나서 변경하기 쉽다.
    • 유지보수성은 코드의 변경가능성과 동의어
  • 생산성
    • 개발 생산성, 유지보수성은 대치하는 개념이 아님
    • 유지보수성 ← 코드 → 생산성
      • 생산성, 유지보수성은 서로 영향을 주는 관계
      • 둘 사이의 균형이 중요함.
  • 부채
    • 부채 은유 : Ward Cunningham이 만든 개념
    • 개발하는 소프트웨어에 대한 “현재 이해”를 반영하는 코드를 작성하고 빠르게 출시
      • 좋다는 것 다 때려넣지 않고, 현재 적용 가능한 기술 위주로
    • 소프트웨어에 대해서 배우게 된 것을 “리팩터링”을 통해서 코드에 반영
      • 부채를 상환하는 것과 같은 의미를 가짐
    • 그러지 않으면 이자가 쌓여서 점점 큰 부담
  • 부채에 대한 오해
    • 코드를 대충 작성하라는 게 아님
    • 부채는 나쁜 코드에 대한 변명이 될 수 없음
    • 처음부터 리팩터링하기 좋은 코드를 만들어야 함
  • 부채가 지속적으로 효과를 발휘하려면 리팩터링(부채상환)이 동력이 되어야 한다.
  • 클린 코드 선순환
    • 유지보수성이 좋은 코드는 변경가능성이 좋다.
    • → 리팩터링 →
    • 빠르게 변경되는 코드는 개발 생산성이 좋다.
  • 그런데 시작은 어떻게?
    • 개발 시작은 빠르고 간단하게
    • 익숙한 기술로
    • 핵심 기능이
    • 동작하는
    • 가장 단순한 코드를
    • 리팩터링 하기 좋게 작성
  • 일부 기능을 완벽하게 만드는 것으로 시작하지 마세요!
  • 유지보수성과 생산성의 균형을 잡아줄 리팩터링을 잘 하려면?
    • 테스트!!!!!
  • 그런데 테스트를 작성하면 구현 능력과 구현 속도가 또…
    • → 테스트를 빠르고 효과적으로 작성하면서 개발하는 능력이 필요
  • 삼체 문제
    • 세 개의 천체가 서로의 중력에 의해 영향을 받으며 움직이는 운동을 예측하는 문제
    • 세 개의 천체 문제는 비선형적이고 일반적인 해를 가지지 않아 예측이 매우 어렵다.
    • 각 천체는 다른 두 천체의 중력의 영향을 미쳐 복잡하고 예측 불가능한 운동을 한다.

  • 유지보수성, 생산성에 ‘팀워크’ 하나를 추가해야 한다. (삼체 문제처럼….)
  • 클린 코드의 많은 원칙은 팀의 동료 개발자와 관련된 것.
  • 나만을 위한 클린 코드는 세상에 없다.
  • 클린 코드의 많은 원칙은 상황에 따라 다른 기준을 가지고 있다.
  • 탐험
    • 팀과 함께 결정하고 탐험하고 학습하고 성장한다.
    • 함께 탐험하는 것을 즐거워하는 팀
  • 교양 있는 개발자
    • 자신의 말을 하더라도 다른 사람의 기분을 나쁘지 않게 하는 것
  • 함께 코드를 작성하고, 읽고, 변경할 동료 개발자들에게 친절한 코드
  • 항상 친절하세요
  • 동료에게
  • 자신에게
  • 스프링 개발에도 클린 코드의 선순환 구조, 삼체 균형 모두 동일하게 적용 가능
  • 스프링 개발 원칙
    • 자기 책임에 충실한 오브젝트로 구분하고 의존관계를 유연하게
    • 클린 (자동) 구성 정보
    • 헥사고날 아키텍처
    • 계층과 모듈 경계에는 API, 즉 인터페이스를 사용
    • 테스트를 안 만들 거면 스프링을 뭐하러?
      • DB 테스트에는 @Transactional 사용!
  • 클린 코드는 항상 코드에 관심을 가지고 보살피는 사람이 작성한 것처럼 보인다.