
소프트웨어 엔지니어링
SW 엔지니어링 영역의 학습 컨텐트는 SW 생애주기를 구성하는 다음의 영역 들에서 적용하는 공학 원리, 패턴, 기법 및 툴을 포함합니다:
SW요구공학, SW아키텍처 설계, 객체설계, 테스트 자동화, 객체 지향 코딩, 애자일 프로젝트 관리, 형상관리.
SW 생애주기의 주요 단계인 빌드, 배포, 운영에 적용하는 공학 원리, 패턴, 기법 및 툴은 Platform Engineering 영역에서 다룰 겁니다.
아래의 SW엔지니아링 메타모델 그림에서 각 영역 간의 화살표는 한 영역(예컨대 요구공학)의 산출물(예컨대 사용사례 시나리오)이 다른 영역(예컨대 테스트 자동화)의 산출물(예컨대 테스트 케이스들)로 변환되는 매핑 메카니즘을 표현합니다.
코딩에 의한 SW 개발 뿐 아니라, 요즘 대세인 SaaS 도입과 No Code 및 Low Code 플랫폼 기반의 SW 개발도 포함합니다.
아래의 10개 영역 별로 제목 또는 이미지를 클릭하면, 관련된 다양한 주제에 대한 교육 과정들과 블로그들이 게시된 페이지로 연결됩니다. (밑줄이 없는 영역은 아직 게시물이 안 올라간 영역임.)
영역 간의 매핑 메카니즘도 하위체계에서 보다 상세화 됩니다.

SW요구공학은 사용자에게 제공할 가치 있는 기능을 상세히 정의. 기업 용 SW 경우, SW로 인해 변화될 사용자 기업의 Enterprise Architecture (특히 경영 목표, 전략, 자원 등을 설계하는 Business Architecture), 사용자 업무의 UX 모델, 프로세스 모델, 데이터 모델, 사용사례 모델 등의 명세를 국제 표준 모델링 언어와 글로벌 베스트 프랙티스를 적용해 작성. 또한 사용사례 별 상세 시나리오들과 사용사례를 코드로 구현했을 때 정확한 지 검증할 수 있는 테스트 케이스들을 작성.
요구스펙은 코드 수준의 객체 설계, 시스템 수준의 아키텍처 설계와 소스 코딩에 투입물로 쓰인다. 테스트 케이스는 사용사례를 코드로 구현할 때, 테스트 코드 작성의 투입물로 쓰인다.
SW 아키텍처의 개념, 문서화, 설계 목표 수립, 설계 프로세스, 설계 기법, 설계 평가 기법. SW 아키텍처의 스타일과 패턴. 서비스 지향 아키텍처(SOA)의 진화 역사. SOA 개념, 목적과 원칙. 서비스의 설계 패턴과 기법, 서비스 조합의 설계 패턴과 기법, 서비스 지향 기업 아키텍처의 설계 패턴과 기법. SOA 애플리케이션의 분석/설계/구현 프로세스, 방법론 및 툴. 마이크로서비스 아키텍처(MSA)의 진화 역사. MSA 구현 패턴과 기법. MSA 적용의 선제 조건. 미니서비스(Miniservice) 아키텍처의 개념, 패턴과 기법.
아키텍처 설계는 요구 스펙을 투입물로 사용하여 수행된다. SOA 아키텍처의 설계는 객체 설계를 투입물로 사용하여 상세화 된다. 아키텍처 설계에서 비기능 품질 요건의 정의는 시스템 테스트에 투입물로 쓰인다. 아키텍처 설계(예컨대 MVC 아키텍처)는 객체 설계(예컨대 컨트롤러 클래스 설계)에 투입물로 쓰이고, SOA 설계(예컨대 API 설계)는 코딩의 설계 스펙을 제공한다.
SW 구현에 필요한 클래스들과 그들 간의 상호 의존성을 코딩 전에 명확히 설계해야 코딩, 단위 테스트 및 통합 테스트의 오류 및 재작업을 줄여 품질과 생산성을 제고. 이를 위해 UML 클래스 다이어그램을 이용한 SW의 도메인 모델을 설계. 한편 SW 코드의 지속가능성(Sustainability)을 높여야 애자일 개발에서의 지속적 SW 변경을 결함 없이 신속하게 수행. 이를 위해 코드 Smell을 제거하고 클린 코드를 만드는 리팩토링을 지속적으로 실시. 도메인 모델링과 리팩토링 시 객체 설계 원칙과 객체 설계 패턴 적용.
도메인 모델은 요구 스펙을 투입물로 사용한다. 즉 사용사례 시나리오에서 수행 필요한 메소드들을 추출하여 적합한 클래스들에 할당한다. SW 아키텍처 설계도 도메인 모델의 투입물로 쓰인다. 예컨대 MVC 아키텍처를 채택한다면, 도메인 모델에 컨트롤러, 서비스 등의 디자인 레벨 클래스들을 추가하게 된다. IDE나 통합 모델링 툴에서 도메인 모델을 투입물로 사용하여, 자바, 파이썬 등 대부분 언어의 스켈레톤 코드를 자동 생성할 수 있다.
객체 설계 원칙, 객체 설계 패턴, 리팩토링 기법을 적용한 자바, 파이썬, 노드 등 객체 지향 언어의 프로그래밍.
객체 설계의 산출물인 도메인 모델을 투입물로 써서 스켈레톤 코드를 자동 생성한 후, 자동 생성된 클래스 인터페이스에 맞도록 메소드를 작성한다. 메소드 작성 시 요구 분석 산출물인 사용사례 시나리오를 투입물로 사용하여 시나리오에 명시된 기능들을 구현한다. 또한 아키텍처 설계를 투입물로 써서, 아키텍처 구현에 필요한 디자인 레벨 클래스들과 SOA 서비스들을 코드로 구현한다. 한편 테스트 자동화 영역에서 제공하는 테스트 케이스들을 투입물로 사용하여, TDD에서 권장하는 테스트 우선 코딩(Test-First Programming)을 수행한다.
사용 사례 별로 기능들이 올바로 구현됐는지 확인할 수 있는 Test Case들을 도출. 사용 사례 구현 시 소스 코드 작성 전에 각 테스트 케이스에 해당하는 테스트 코드를 먼저 짠 다음, 그 테스트 코드를 통과하도록 소스 코드를 짜는 테스트 주도 개발(Test-Driven Development: TDD)을 수행. TDD를 통해 작성되는 Unit 테스트 코드들을 테스트 스위트에 축적하여 통합 테스트 및 인수 테스트의 자동화에 활용. 한편 사용사례 시나리오들에서 Gherkin 문법의 테스트 케이스를 도출하는 행위 주도 개발(Behavior-Driven Development: BDD)을 기반으로 인수 테스트를 자동화.
테스트 자동화는 요구 스펙과 아키텍처 설계에서 정의한 비기능 품질 요건을 투입물로 사용하며, 테스트 코드와 소스 코드 테스트 결과를 산출물로 제공한다.
Waterfall, Unified, 애자일, SAFe 및 데브옵스 SW개발 프로세스의 차이점을 이해하고, 상이한 SW개발 생애주기 프로세스에서의 프로젝트 관리, 프로젝트 성공을 위해 갖추어야 하는 기술적 역량과 조직 문화에 대해 이해한다.
SW 개발 / 스테이징 / 테스트 / 프로덕션 환경 구성, SW 브랜칭과 머징, 트렁크 기반 개발 (Trunk-Based Development), SW 변경 관리, 빌드 관리, 배포 관리, 버전 관리, 형상 감사.
SaaS Implementation

BetterCloud에 따르면, 2025년에 선진국 기업들이 사용하는 애플리케이션의 85%가 SaaS일 것이다. 우리나라에서도 기업의 SaaS 도입이 점차 증가할 것으로 예상된다. SaaS를 도입할 경우, SW패키지를 도입할 때나 마찬가지로, 비즈니스 프로세스 리엔지니어링, Fit/Gap 분석, Delta 엔지니어링을 통한 Gap 극복, SaaS가 필요로 하는 데이터의 엔지니어링, 기존 애플리케이션과의 연계/통합, 애자일 구현을 통한 현업의 경영 성과 제고 등의 기법과 역량을 먼저 갖추어야 한다. 본 과정들에서는 ERP, CRM, 마케팅, 회계/재무 시스템, HR 시스템, BI 시스템, 가입/빌링 시스템, 콘텐츠 관리 시스템, 의사소통/협업 시스템, E-Commerce 시스템, 산업 특화 시스템들 등 다양한 애플리케이션의 SaaS를 체계적인 애자일 프로세스에 따라 구현하는 과정을 실습 한다.

가트너에 따르면, 2025년 선진국 기업들에서 신규 애플리케이션의 70%가 Low Code 또는 No Code 개발 플랫폼을 이용하여 개발될 것이다. 우리나라에서도 No Code 및 Low Code 개발 플랫폼을 이용한 애플리케이션 개발이 증가할 전망이다. No Code 개발 플랫폼(NCDP)은 템플릿, Drag & Drop UI 위젯, 비주얼 워크플로우 빌더, 제3의 툴 및 서비스 들과의 통합 기능 등을 제공하여, 코딩 필요 없이 다양한 애플리케이션을 쉽게 빨리 개발할 수 있게 한다. 본 과정들에서는 NCDP를 이용한 다양한 애플리케이션(E-Commerce 웹사이트, CRM 시스템, 위치 기반 모바일 앱, BI 대시보드, 병원 ERM, SCM 등)의 구현을 실습 한다.
가트너에 따르면, 2025년 선진국 기업들에서 신규 애플리케이션의 70%가 Low Code 또는 No Code 개발 플랫폼을 이용하여 개발될 것이다. 우리나라에서도 No Code 및 Low Code 개발 플랫폼을 이용한 애플리케이션 개발이 증가할 전망이다. Low Code 개발 플랫폼(LCDP)은 3GL 코딩 없이 모델과 4GL 로직을 투입물로 애플리케이션 런타임을 자동 생성 배포해주며, Appian, Pegasystems 등 프로세스 중심의 LCDP와 OutSystems, Mendix 등 UI 중심의 LCDP로 나눌 수 있다. 프로세스 중심의 LCDP는 BPMN 프로세스 모델을 중심으로 프로세스 태스크 수행에 필요한 UI와 백엔드 서비스 API를 만들어 나아간다. UI 중심의 LCDP는 UI를 중심으로 UI 이벤트를 수행할 백엔드 서비스 API를 만들어 나아간다. 본 과정들에서는 LCDP를 이용한 애플리케이션의 모델링 및 구현을 실습 한다.