2024 인프콘 다시보기 - 클린 코드에 대한 이일민(토비)님의 강의를 들으며 내용을 정리해 보았습니다.
[참고]
영상은 아래 링크에서 보실 수 있습니다.
https://youtu.be/d3krJ4el8Hg?si=4gK7MB1HM5Kt5uob
- 개발자에게 기술 성장과 관련된 책을 추천하면?
- 첫 번째 - 클린 코드
향로님의 클린 코드에 대한 말
클린코드를 지향할수록 점점 구현 능력이 떨어진다 이런 생각 해보신 적 없으세요?
- 클린 코드에 집중할 수록 좋은 코드, 구조, 설계에 대해 집착하게 되어 구현 속도가 느려지고 구현 능력이 떨어진다.
- 클린 코드라는 말이 처음 쓰인 곳 : 켄트 벡의 테스트 주도 개발
- Clean Code That Works (작동하는 클린 코드)
- 그러나 클린 코드에 대한 다음과 같은 오해가 존재한다.
- 클린 코드 추구 - 주석 작성 X
- 코드가 클린하면 리팩터링할 이유 X
- 클린 코드는 테스트 코드가 필요 없다?
- 클린 코드의 특성
- 읽기 좋은 코드
- 이해하기 좋은 코드
- 확장하기 좋은 코드
- 유지보수하기 좋은 코드 → 핵심! <유지보수성>
- 그럼 클린 아키텍처는?
- 품질에 관한 요구사항(비기능적 요구사항)에서 유지보수성은 특별하다.
- 유지보수하기 좋은 코드는 확장하기 좋고, 안전하고, 신뢰할 수 있고, 좋은 성능으로 발전시킬 수 있고, 상호 호환성이 뛰어나서 변경하기 쉽다.
- 유지보수성은 코드의 변경가능성과 동의어
- 생산성
- 개발 생산성, 유지보수성은 대치하는 개념이 아님
- 유지보수성 ← 코드 → 생산성
- 생산성, 유지보수성은 서로 영향을 주는 관계
- 둘 사이의 균형이 중요함.
- 부채
- 부채 은유 : Ward Cunningham이 만든 개념
- 개발하는 소프트웨어에 대한 “현재 이해”를 반영하는 코드를 작성하고 빠르게 출시
- 좋다는 것 다 때려넣지 않고, 현재 적용 가능한 기술 위주로
- 소프트웨어에 대해서 배우게 된 것을 “리팩터링”을 통해서 코드에 반영
- 부채를 상환하는 것과 같은 의미를 가짐
- 그러지 않으면 이자가 쌓여서 점점 큰 부담
- 부채에 대한 오해
- 코드를 대충 작성하라는 게 아님
- 부채는 나쁜 코드에 대한 변명이 될 수 없음
- 처음부터 리팩터링하기 좋은 코드를 만들어야 함
- 부채가 지속적으로 효과를 발휘하려면 리팩터링(부채상환)이 동력이 되어야 한다.
- 클린 코드 선순환
- 유지보수성이 좋은 코드는 변경가능성이 좋다.
- → 리팩터링 →
- 빠르게 변경되는 코드는 개발 생산성이 좋다.
- 그런데 시작은 어떻게?
- 개발 시작은 빠르고 간단하게
- 익숙한 기술로
- 핵심 기능이
- 동작하는
- 가장 단순한 코드를
- 리팩터링 하기 좋게 작성
- 일부 기능을 완벽하게 만드는 것으로 시작하지 마세요!
- 유지보수성과 생산성의 균형을 잡아줄 리팩터링을 잘 하려면?
- 테스트!!!!!
- 그런데 테스트를 작성하면 구현 능력과 구현 속도가 또…
- → 테스트를 빠르고 효과적으로 작성하면서 개발하는 능력이 필요
- 삼체 문제
- 세 개의 천체가 서로의 중력에 의해 영향을 받으며 움직이는 운동을 예측하는 문제
- 세 개의 천체 문제는 비선형적이고 일반적인 해를 가지지 않아 예측이 매우 어렵다.
- 각 천체는 다른 두 천체의 중력의 영향을 미쳐 복잡하고 예측 불가능한 운동을 한다.
- 유지보수성, 생산성에 ‘팀워크’ 하나를 추가해야 한다. (삼체 문제처럼….)
- 클린 코드의 많은 원칙은 팀의 동료 개발자와 관련된 것.
- 나만을 위한 클린 코드는 세상에 없다.
- 클린 코드의 많은 원칙은 상황에 따라 다른 기준을 가지고 있다.
- 탐험
- 팀과 함께 결정하고 탐험하고 학습하고 성장한다.
- 함께 탐험하는 것을 즐거워하는 팀
- 교양 있는 개발자
- 자신의 말을 하더라도 다른 사람의 기분을 나쁘지 않게 하는 것
- 함께 코드를 작성하고, 읽고, 변경할 동료 개발자들에게 친절한 코드
- 항상 친절하세요
- 동료에게
- 자신에게
- 스프링 개발에도 클린 코드의 선순환 구조, 삼체 균형 모두 동일하게 적용 가능
- 스프링 개발 원칙
- 자기 책임에 충실한 오브젝트로 구분하고 의존관계를 유연하게
- 클린 (자동) 구성 정보
- 헥사고날 아키텍처
- 계층과 모듈 경계에는 API, 즉 인터페이스를 사용
- 테스트를 안 만들 거면 스프링을 뭐하러?
- DB 테스트에는 @Transactional 사용!
- 클린 코드는 항상 코드에 관심을 가지고 보살피는 사람이 작성한 것처럼 보인다.
'Spring' 카테고리의 다른 글
스프링부트 코틀린 프로젝트에 jsp 띄우기 (0) | 2024.08.11 |
---|---|
설정 파일을 통한 환경별 Property 관리 (0) | 2024.07.26 |
BasicErrorController 상속받아 커스텀하기 (0) | 2024.05.01 |