해당 포스트는 이규원님의 "Spring Boot TDD" 강의를 기반으로 작성하였습니다.
Spring Boot TDD - 입문부터 실전까지 정확하게| 이규원 - 인프런 강의
현재 평점 5점 수강생 364명인 강의를 만나보세요. 더 빠르고 더 견고하게 Spring Boot 응용프로그램을 개발하세요. 정확한 이론 설명과 실무 수준의 연결된 실습을 통해 HTTP API 응용프로그램 개발에
www.inflearn.com
프로그래머로서 우리는 일상적으로 "엔지니어링"과 "원칙"이라는 단어를 자주 사용합니다. 이 두 개념은 우리의 작업 방식과 의사결정에 큰 영향을 미칩니다.
1. 엔지니어링의 정의: 자원을 가치로 바꾸는 과학적 과정
○ 엔지니어링은 다양한 해석이 가능하지만, 브리태니커 백과사전의 정의를 기반으로 프로그래머 관점에서 재구성하면 이해하기 쉽습니다.
○ 원래 정의는 "자연자원을 인류의 용도에 맞게 최적으로 변환하기 위한 과학적 응용"입니다.
○ 이를 간단히 풀어보면, 엔지니어링은 자원을 가치로 만드는 과정으로, 여기서 과학과 효율이 핵심 요소입니다.
- 자원: 자연자원뿐만 아니라 프로그래머의 세계에서는 돈, 시간, 코드, 라이브러리 등 인간이 만든 모든 것을 포함합니다.
- 가치: 자원을 변환해 만들어지는 결과물, 예를 들어 사용자에게 유용한 소프트웨어 기능이나 비즈니스 문제 해결.
- 과학적 활동: 단순한 제작이 아닌, 논리적·실험적 방법(알고리즘, 테스트 등)을 적용.
○ 가장 중요한 부분으로, 적은 자원으로 최대 가치를 창출해야 합니다. 비용(자원 소비)을 최소화하면서 결과(가치)를 최대화하는 균형입니다.
2. 비효율적 엔지니어링 사례: 가능하지만 실용적이지 않은 접근
○ 엔지니어링에서 과학적으로 자원을 가치로 변환할 수 있지만, 효율이 떨어지면 실질적으로 실패한 경우가 많습니다. 이런 사례는 프로그래머가 피해야 할 교훈을 줍니다.
- 비효율의 본질: 과학적 방법으로 목표를 달성하지만, 소비되는 자원(비용, 시간)이 생산되는 가치보다 훨씬 크면 비효율적입니다. 가능성은 있지만, 실생활에서 사용되지 않습니다.
- 문제점: 프로그래머는 종종 이런 실수를 저지릅니다. 예를 들어, 과도한 최적화나 불필요한 복잡한 기술 사용으로 비용만 증가시키고 가치 창출이 멈춥니다.
- 주의점: 가능성만 추구하지 말고, 항상 비용-가치 균형을 확인하세요. "바보 같은" 실수(예: 압도적 비용의 기술 도입)를 피하기 위해 효율을 최우선으로 고려합니다.
3. 원칙의 정의: 불확실한 상황에서의 안전장치
- 소프트웨어 엔지니어링에서 "원칙"은 확신이 부족할 때 실패 가능성을 최소화하는 지침입니다. 이는 규칙이 아니라, 상황에 따라 선택적으로 따르는 가이드라인입니다.
- 소프트웨어 엔지니어링 영역에는 수 많은 원칙들이 존재합니다.
- 다양한 원칙을 충실히 이해하고 적절한 때에 사용하면 상당히 많은 경우 옳은 의사결정을 빠르게 내릴 수 있습니다.
- 엔지니어는 원칙에 지배받아서는 안되며, 풀어야 할 각 문제마다 주체적으로 원칙을 따르거나 따르지 않을 책임이 있습니다.
'Java > Test Driven Development' 카테고리의 다른 글
| 2-4. TDD에 대한 오해 (2) | 2025.07.22 |
|---|---|
| 2-3. TDD 절차 (0) | 2025.07.22 |
| 2-2. 테스트와 설계 (0) | 2025.07.22 |
| 2-1. 인터페이스 설계와 구현 설계 (1) | 2025.07.22 |
| Practical Testing: 실용적인 테스트 가이드 (0) | 2024.06.28 |