맨날 코드를 짜면서도 가끔은 이런 생각이 듭니다. "그냥 돌아가는 코드 말고, 진짜 '좋은' 소프트웨어란 뭘까?"
https://product.kyobobook.co.kr/detail/S000001000960
소프트웨어 공학 | Ian Sommerville - 교보문고
소프트웨어 공학 | ▶ 이 책은 소프트웨어 공학에 대해 다룬 이론서입니다. 소프트웨어 공학의 기초적이고 전반적인 내용을 학습할 수 있도록 구성했습니다.
product.kyobobook.co.kr
이번 SW Engineering 시리즈에서는 위 책을 바탕으로 소프트웨어 공학(Software Engineering)에서 다루는 핵심 내용인 '소프트웨어 공학의 본질'과, 요즘 핫한 'LLM(거대언어모델) 시대의 개발자'에 대한 내용을 정리해 봅니다. 단순한 코더(Coder)에서 벗어나 진짜 엔지니어(Engineer)로 성장하고 싶다면 꼭 짚고 넘어가야 할 내용들입니다.
1. 소프트웨어 공학(Software Engineering)이란?
우선 정의부터 확실히 하고 가죠. 소프트웨어 공학은 단순히 코드를 짜는 기술이 아닙니다. 이 학문은 크게 두 가지 질문을 던집니다.
- '좋은 소프트웨어(Good Software)'란 무엇인가?
- 그것을 '어떻게 만들 것인가'?
👨💻 개발자 vs 엔지니어, 차이는?
흥미로운 점은 '소프트웨어 개발자'와 '소프트웨어 엔지니어'를 구분하는 기준입니다.
- 소프트웨어 개발자 (Developer): 좋은 소프트웨어를 개발하는 방법을 아는 사람.
- 소프트웨어 엔지니어 (Engineer): 좋은 소프트웨어 개발뿐만 아니라, 소프트웨어 개발 과정(Process) 자체를 개선하는 방법까지 아는 사람.
즉, 우리는 단순히 결과물을 내는 것을 넘어, 그 결과물을 만드는 과정의 효율성과 품질까지 고민하는 '엔지니어'를 목표로 해야 합니다.
2. 왜 소프트웨어 공학을 배워야 할까?
"그냥 잘 돌아가게만 짜면 되는 거 아니야?"라고 생각할 수 있지만, 현실은 훨씬 복잡합니다.
- 높아진 리스크: 소프트웨어는 이제 자동차, 비행기 등 우리 삶 깊숙이 들어와 있습니다. 잘못 만들어진 소프트웨어(Bad Software)는 단순히 불편한 것을 넘어 인명 피해와 같은 심각한 결과를 초래할 수 있습니다.
- 복잡성의 증가: 현대의 시스템은 개인의 직관이나 소수 개발자의 능력만으로는 감당할 수 없을 만큼 거대해졌습니다.
- 체계의 필요성: 따라서 조직화된 팀과 체계적인 방법론(SE methods)이 필수적입니다.
우리의 시야도 확장되어야 합니다. 단순히 코드(Code) 한 줄을 보는 게 아니라, **프로그램(Program) → 소프트웨어(Software) → 시스템(System)**으로 확장되는 거시적인 관점을 가져야 비로소 엔지니어라고 할 수 있습니다.
3. 그래서, '좋은 소프트웨어'의 조건은?
그렇다면 우리가 목표로 해야 할 좋은 소프트웨어는 어떤 특징을 가질까요? 당연히 사용자가 필요로 하는 기능과 특성을 제공해야 하는 것은 기본입니다. 여기에 더해 엔지니어링 관점에서는 다음 세 가지가 필수적입니다.
- 유지보수성 (Maintainable): 나중에 코드를 고치거나 기능을 추가하기 쉬운가?
- 신뢰성 (Dependable): 오류 없이 믿고 쓸 수 있는가?
- 사용성 (Usable): 사용자가 쓰기 편한가?
4. AI 시대, 개발 환경의 변화 (LLM & IDE)
최근 ChatGPT나 Claude 같은 LLM(거대언어모델)이 등장하면서 "개발자 다 망한 거 아니냐"는 이야기도 들립니다. 하지만 이 책에서는 이 관계를 명확히 정의했습니다.
🤖 LLM의 역할: 대체자가 아닌 '진보된 도구'
LLM은 코드를 작성해주기도 하고 일부 소프트웨어 공학 업무를 수행할 수도 있습니다. 하지만 여전히 멍청한 실수를 하거나, 복잡한 문제 해결에는 실패하기도 합니다.
따라서 LLM을 우리를 대체하는 경쟁자가 아니라, 생산성을 높여주는 '진보된 도구(Advanced tool)'로 바라봐야 합니다. 결국 AI에게 무엇을 할지 정확히 지시하고, 그 결과가 맞는지 검증(Verify)하는 것은 여전히 사람(엔지니어)의 몫이기 때문입니다.
이제 VS Code 같은 IDE(통합 개발 환경)에 GitHub Copilot 같은 AI 도구가 통합되는 것은 거스를 수 없는 흐름입니다. 이 도구들을 얼마나 잘 활용하느냐가 앞으로 엔지니어의 역량을 가르는 중요한 척도가 될 것 같네요.
정리
우리는 단순히 코드를 짜는 사람이 아니라, **시스템 전체를 설계하고 개발 과정을 개선하는 '엔지니어'**가 되어야 합니다. 그리고 그 과정에서 LLM이라는 강력한 무기를 똑똑하게 활용할 줄 아는 사람이 살아남을 것입니다. 이번 기회를 통해, 제대로 된 엔지니어링을 배워봅시다!
'Software 개발 > SW Engineering' 카테고리의 다른 글
| [SW Engineering] 06. 아키텍쳐 설계(Architectural Design) (0) | 2025.12.17 |
|---|---|
| [SW Engineering] 05. 요구사항 공학(Requirement Engineering) (1) | 2025.12.16 |
| [SW Engineering] 04. 애자일 소프트웨어 개발(Agile Software Development) (1) | 2025.12.16 |
| [SW Engineering] 03. 소프트웨어 프로세스(The Software Process) (0) | 2025.12.16 |
| [SW Engineering] 02. Software Project Management (1) | 2025.12.16 |
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
도움이 되었다면 "❤️" 또는 "👍🏻" 해주세요! 문의는 아래 이메일로 보내주세요.