Machineboy空
설계 도서 추천목록 및 c# 본문
설계 기술 관련 추천 도서
- <현장에서 유용한 시스템 설계 원칙>
- <읽기 좋은 코드가 좋은 코드다>
- <리팩터링 2판>
- <클린 코드>
- <레거시 코드 활용 전략>
- <레거시 소프트웨어 리엔지니어링>
- <레거시 코드를 넘어서>
- <엔지니어링 조직론으로의 초대>
- <프로그래밍의 원칙>
- <클린 아키텍처>
- <도메인 주도 설계>
- <설계를 통한 보안>
- <도메인 주도 설계 철저 입문>
- <도메인 주도 설계 모델링/구현 가이드>
- <도메인 주도 설계 샘플 코드와 FAQ>
- <테스트 주도 개발>
C#과의 오랜 여행, 그리고 설계로 이어진 길
저도 처음부터 설계에 관심과 지식이 있었던 것은 아닙니다. 과거에 C#을 사용해서 어떤 개발 프로젝트에 참여했을 때, 엄청난 레거시 코드 떄문에 고생했던 적이 있습니다. 버그는 계속해서 발생하고, 프로젝트는 산으로 가고 있고, 야근도 매일매일 계속되었습니다. 점점 지쳐가면서 '대체 왜 이렇게 버그가 많을까? 대체 왜 이렇게 되어버린 것일까?'라는 생각이 들었습니다.
그러던 어느 날 좋은 기술서라도 읽어 봐야겠다고 생각하고, 회사의 책장을 이리저리 보다가 우연히 <리팩터링>이라는 책을 보았습니다. '어떻게 하면 버그를 줄일 수 있는가'같은 내용을 보고 저는 큰 충격을 받았습니다.
코드를 변경할 때 버그가 발생하게 만드는 설계가 있다... 제가 소프트웨어 설계를 처음으로 접했던 날입니다. 정말 과장이 아니라 이 책으로 인해 저의 운명이 바뀌었습니다.
책을 읽자마자 책에서 배운 내용을 사용해 보고 싶었습니다. 프로덕션 코드 리포지터리에서 연습용 브랜치를 만들고 프로덕션 코드를 기반으로 리팩터링 연습을 매일 반복했습니다. 이때 설게 스킬이 가장 많이 늘었던 것 같습니다.
난잡했던 로직이 깔끔하게 정돈되어 가는 모습이 너무 재미있어서 설계에 대한 흥미가 늘어갔습니다. 그래서 <레거시 코드 활용 전략>, <도메인 주도 설계> 등 다양한 설계 기술서를 구매하러 돌아다녔습니다.
제가 현재 리팩터링하고 있는 레일스 애플리케이션에 비해서 C#은 정말 리팩터링하기 쉽습니다. C#은 정적 언어이므로 정적 해석을 통해서 클래스와 메서드의 호출 위치를 정확하게 추적할 수 있습니다. 또한 Visual Studio라는 IDE자체가 정말 기능이 많습니다. 테스트 코드를 곧바로 작성할 수도 있고, 코드 분석 품질도 간단하게 수치화할 수 있습니다. 또한 작성한 코드를 클래스 다이어그램으로 곧바로 시각화해서 볼 수도 있습니다.
하지만 이러한 축복받은 환경 속에서도 설계에 대한 이해가 부족하다면 제가 경험했던 것처럼 버그가 넘치고 프로젝트가 무너져 내립니다. 설계 품질 향상 방법이 널려 있는데도 사용하지 않아서 썩어 버리는 것입니다. 정말 안타까운 일입니다.
물론 IDE의 편리한 기능 때문에 품질이 저하되는 경우도 있었습니다.
예를 들어서 region 지시문이라는 전처리 문법이 있습니다. 이는 #region으로 묶어서 코드를 접어 숨길 수 있는 기능입니다. 수백, 수천 줄의 메서드를 접어서 숨기는 용도로 region 지시문을 많이 사용했습니다. 이를 저에게 알려준 분은 "region지시문을 사용하면 코드를 읽기 쉬워진다"라고 이야기했지만, 사실 큰 메서드는 작게 분할해야 합니다. region지시문으로 인해서 설계의 필요성 자체가 숨겨진 것입니다.
추가로 "if 조건문의 끝 괄호]를 찾는 기능이 있는데, 이를 활용하면 if조건문 내부에 수천 줄의 코드를 작성해도, 쉽게 if조건문의 범위를 파악할 수 있어요. 대단하지않나요?"라며 기뻐하던 분도 있었습니다. 물론 굉장히 긴 코드를 개선할 때 괄호를 쉽게 찾아주는 기능은 굉장히 편리합니다. 하지만 이로 인해 나쁜 코드를 작성하게 되는 것은 굉장히 좋지 않은 현상입니다.
언어의 특성과 설계 환경을 잘 활용하려면 설게 스킬이 필요합니다. 설계를 잘 배워서 코드의 품질을 높여 보기 바랍니다.
'Computer' 카테고리의 다른 글
2의 보수 : 컴퓨터가 뺄셈하는 원리 (0) | 2025.01.22 |
---|---|
Diffie-Hellan Key Exchange, 디피-헬먼 키 교환 (0) | 2025.01.16 |
커뮤니케이션의 중요성 (1) | 2024.11.29 |
코드 메트릭: 코드의 좋고 나쁨을 판단하는 지표 (1) | 2024.11.27 |
Http통신 (1) | 2023.11.02 |