[SW Engineering] 01. 소프트웨어 공학이란?

2025. 12. 16. 12:27·Computer Science/SW Engineering
728x90

맨날 코드를 짜면서도 가끔은 이런 생각이 듭니다. "그냥 돌아가는 코드 말고, 진짜 '좋은' 소프트웨어란 뭘까?"

https://dn790001.ca.archive.org/0/items/bme-vik-konyvek/Software%20Engineering%20-%20Ian%20Sommerville.pdf

https://product.kyobobook.co.kr/detail/S000001000960

 

소프트웨어 공학 | Ian Sommerville - 교보문고

소프트웨어 공학 | ▶ 이 책은 소프트웨어 공학에 대해 다룬 이론서입니다. 소프트웨어 공학의 기초적이고 전반적인 내용을 학습할 수 있도록 구성했습니다.

product.kyobobook.co.kr

 

이번 SW Engineering 시리즈에서는 위 책을 바탕으로 소프트웨어 공학(Software Engineering)에서 다루는 핵심 내용인 '소프트웨어 공학의 본질'과, 요즘 핫한 'LLM(거대언어모델) 시대의 개발자'에 대한 내용을 정리해 봅니다. 단순한 코더(Coder)에서 벗어나 진짜 엔지니어(Engineer)로 성장하고 싶다면 꼭 짚고 넘어가야 할 내용들입니다.


1. 소프트웨어 공학(Software Engineering)이란?

우선 정의부터 확실히 하고 가죠. 소프트웨어 공학은 단순히 코드를 짜는 기술이 아닙니다. 이 학문은 크게 두 가지 질문을 던집니다.

  1. '좋은 소프트웨어(Good Software)'란 무엇인가?
  2. 그것을 '어떻게 만들 것인가'?

👨‍💻 개발자 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이라는 강력한 무기를 똑똑하게 활용할 줄 아는 사람이 살아남을 것입니다. 이번 기회를 통해, 제대로 된 엔지니어링을 배워봅시다!

728x90
저작자표시 비영리 변경금지 (새창열림)

'Computer Science > 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
'Computer Science/SW Engineering' 카테고리의 다른 글
  • [SW Engineering] 05. 요구사항 공학(Requirement Engineering)
  • [SW Engineering] 04. 애자일 소프트웨어 개발(Agile Software Development)
  • [SW Engineering] 03. 소프트웨어 프로세스(The Software Process)
  • [SW Engineering] 02. Software Project Management
BE_개발자
BE_개발자
경이로운 BE 개발자가 되기 위한 프로그래밍 공부 기록장
    250x250
  • BE_개발자
    경이로운 개발일기
    BE_개발자
  • 전체
    오늘
    어제
    • 전체 보기 (213)
      • AI (1)
        • AI native (0)
        • Skill (0)
      • SpringBoot (4)
        • JPA (3)
        • Security (0)
        • 튜토리얼 (1)
        • 기타 (0)
      • Infra (0)
        • Docker (0)
        • AWS (0)
        • NCP (0)
        • GCP (0)
      • React (19)
      • 서버 (0)
      • Computer Science (16)
        • SW Engineering (10)
        • Data Base (2)
        • OS(운영 체제) (4)
      • Data science (0)
        • Probability & Random Variab.. (0)
        • Data Analysis(데이터 분석) (0)
      • 자료구조 | 알고리즘 (57)
        • 선형 자료구죠 (6)
        • 비선형 자료구조 (9)
        • 정렬(Sort) (3)
        • 탐색(Brute Force) (7)
        • 분할 정복(Devide Conquer) (3)
        • 동적 계획법 (6)
        • 탐욕(Greedy) (2)
        • 수학 (7)
        • 심화 알고리즘 (10)
      • PS (44)
        • 백준 알고리즘[BOJ] (38)
        • 프로그래머스[programmers] (3)
      • Dev tool (15)
        • 개발 도구 및 환경 (0)
        • vscode (3)
        • Git Hub (4)
        • Chrome 웹스토어 (5)
        • Python 전용 개발환경 (0)
      • 성장기록 (1)
      • 개인 project (14)
        • 홈페이지 만들기 (11)
        • 냉보미 (1)
      • STL(Standard Library) (9)
      • programming Language (1)
        • javascript (1)
      • 기타 (13)
        • html css (11)
      • (책, 글, 블로그)리뷰 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 백준
    • Github
    • Notion
    • 서울과학기술대학교 학술동아리 EC
  • 공지사항

  • 인기 글

  • 태그

    react
    자료구조
    탐색
    백트래킹
    재귀함수
    순열
    스택
    분할정복
    stl
    완전 탐색
    프론트엔드
    브루트포스
    stack
    SW 공학
    알고리즘
    스프링부트
    운영체제
    PS
    괄호쌍
    DP
    C++
    백준
    SW Engineering
    비트마스킹
    수학
    CS
    이분 탐색
    OS
    그리디
    BFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
BE_개발자
[SW Engineering] 01. 소프트웨어 공학이란?
상단으로

티스토리툴바