Skip to main content

55 posts tagged with "pe/software-engineering"

기술사 소프트웨어공학 토픽

View All Tags

도메인주도 설계의 에그리거트

· 4 min read

에그리거트 개념

  • 도메인 주도 설계(DDD)에서 도메인 모델의 논리적 단위를 정의하며, 데이터 무결성을 유지하고 복잡성을 관리하는 역할 담당
  • 데이터 무결성 보장, 복잡성 관리, 비지니스 로직을 캡슐화하여 도메인 논리 표현

애그리거트 개념도, 역할, 기대효과

  • 다양한 Entity와 Value Object를 하나로 묶어 도메인 간 관계를 상위 수준에서 관리

애그리거트 역할

역할설명예시
경계 정의도메인 모델의 경계를 설정하고 외부 접근 제한주문 애그리거트 내부의 결제 정보 접근 제한
데이터 무결성트랜잭션 단위로 작동하여 일관된 상태 유지주문 상태와 결제 정보 동시 처리
루트 엔티티 관리외부에서 애그리거트 내부 객체 접근 시 루트 엔티티를 통함주문 애그리거트의 루트 엔티티를 통해 모든 작업 수행

애그리거트 사용시 기대효과

문제세부 내용해결 방안
복잡성 관리대규모 도메인 모델에서 객체 간 상호작용 복잡성 증가명확한 경계 설정으로 객체 간 의존성 최소화
데이터 일관성트랜잭션 처리 중 데이터 불일치 발생 가능성애그리거트 내부에서만 상태 변경하여 일관성 보장
모듈화도메인 모델 간 강한 결합으로 인한 재사용성 저하애그리거트 간 느슨한 결합으로 모듈화 구현
도메인 논리 표현비즈니스 규칙이 분산되어 복잡성 증가애그리거트 내부에서 도메인 로직 캡슐화

애그리거트 설계시 고려사항

고려사항세부 내용해결 방안
트랜잭션 크기큰 애그리거트로 인해 트랜잭션 성능 저하작은 애그리거트로 설계하여 성능과 일관성 균형 유지
참조 관리애그리거트 간 직접 참조로 인한 강한 결합식별자(ID)를 활용하여 느슨한 결합 유지
도메인 규칙 반영외부에서 도메인 규칙 위반 가능비즈니스 로직을 애그리거트 내부에서만 실행

AIOps

· 3 min read

AIOps 개념

  • IT 운영 데이터를 분석하고, AI 기반으로 문제를 예측, 탐지, 해결하는 자동화 기술
  • IT 운영의 효율성 제고, 서비스 중단 최소화, IT 인프라의 안정성 강화

AIOps 구성도, 구성요소, 활용방안

AIOps 구성도

AIOps

AIOps 구성요소

구분내용비고
데이터 수집 및 통합IT 인프라 데이터를 중앙 집중화하여 실시간 분석 가능로그, 이벤트, 메트릭 수집
머신러닝 및 AI 분석머신러닝과 딥러닝을 활용하여 비정상 패턴을 식별이상 탐지, 원인 분석
자동화 및 오케스트레이션장애 발생 시 자동 복구 및 자원 최적화자동 대응 조치 수행
가시성 및 대시보드Grafana, Kibana 등을 활용한 IT 운영 상태 시각화실시간 모니터링
자율 운영(Self-Healing)시스템 오류 발생 시 AI가 원인 분석 후 자동 복구 수행AI 기반 자동 복구

AIOps 활용방안

구분설명활용 사례
이상 탐지 및 사전 경고AI 기반 성능 및 보안 모니터링AWS GuardDuty를 활용한 비정상 네트워크 패턴 탐지
IT 서비스 관리(ITSM) 최적화AI 기반 티켓 자동 분류ServiceNow AIOps를 활용한 장애 대응 프로세스 최적화
애플리케이션 성능 관리(APM)AI 기반 성능 최적화Dynatrace를 활용한 실시간 애플리케이션 트랜잭션 분석
하이브리드 클라우드 관리클라우드 및 온프레미스 자원 관리IBM Watson AIOps를 통한 IT 인프라 운영 최적화
보안 운영 자동화AI 기반 보안 이벤트 분석Splunk AIOps를 활용한 실시간 보안 로그 모니터링

SOLID 원칙

· 4 min read

SOLID 원칙 개념

  • 객체지향 설계시 SOLID 5가지 원칙을 준수하여 유지보수성과 확장성을 가진 유연한 소프트웨어 구현 가능

단일책임원칙과 개방폐쇄원칙

단일책임원칙

구분설명
개념도srp
개념객체는 단 하나의 책임만 가져야한다는 원칙
특징변경에 대한 의존성 극복, 응집도 향상
예시파일 읽기, 쓰기 클래스 분리

개방폐쇄원칙

구분설명
개념도ocp
개념클래스는 확장에는 열리고 수정에는 닫혀있어야한다는 원칙
특징추상화로인한 다형성, 확장성, 객체지향 장점 극대화
예시새로운 기능 추가시 추상클래스 활용

리스코프 치환원칙과 인터페이스 분리원칙

리스코프 치환원칙

구분설명
개념도lsp
개념상위 클래스는 하위 클래스로 대체할 수 있어야한다는 원칙
특징상속을 통한 재사용성 확보, 부모-자식 클래스 간 IS-A 관계 보장
예시HashSet은 Set의 add 메소드 사용 가능

인터페이스 분리원칙

구분설명
개념도isp
개념클라이언트는 자신이 사용하는 인터페이스만 의존해야하는 원칙
특징클라이언트에 목적과 용도에 적합한 인터페이스 제공, 확장성 증가
예시Pet 인터페이스 분리로 짖는 기능 구현

의존성역전원칙

구분설명
개념도dip
개념고수준 클라이언트는 저수준 모듈의 구현에 의존하지 않고, 추상화된 인터페이스에 의존해야한다는 원칙
특징변화하기 어려운 인터페이스에 의존, 결합도 완화
예시특정 DB클래스가 아닌 Database 인터페이스 사용 연동

객체지향 설계시 고려사항

  • SonarLint 등 정적분석도구 활용 SOLID 원칙 준수 감사
  • 예방비용을 높여 SW품질 향상 필요

소프트웨어 진흥법

· 4 min read

소프트웨어 진흥법 개념

  • 국가 전반의 소프트웨어 역량을 강화하고 소프트웨어산업 발전의 기반을 조성함으로써 국가경쟁력의 확보, 국민생활의 향상 및 국민경제의 건전하고 지속적인 발전에 기여

소프트웨어 안전 확보 지침

구분지침세부 내용
위험 분석소프트웨어 안전 위험 분석- 소프트웨어의 잠재적 위험요소 식별
- 시스템 동작 시 발생 가능한 오류와 영향을 분석
- 위험 완화를 위한 우선순위 설정
설계 및 구현안전 설계 및 구현- 안전 관련 기능 설계 (예: 결함 허용, 오류 복구)
- 코드의 안전성 확보를 위한 코딩 표준 준수
- 위험 상황 식별 및 대응 로직 포함
검증안전 검증 및 테스트- 안전 요구사항 충족 여부 검증
- 단위 테스트, 통합 테스트, 시스템 테스트를 통해 오류 검출
- 안전 관련 기능 시험 및 검토
운영 관리운영 환경에서의 안전 확보- 운영환경 변경 시 안전 영향 분석
- 장애 발생 대비 안전 대책 수립
- 유지보수 중 발생 가능한 위험 관리
준수 및 개선안전 준수와 지속적 개선- 국제표준과 안전 지침 준수
- 안전사고 예방을 위한 프로세스 개선
- 피드백을 반영하여 안전성 강화

소프트웨어 진흥 전략

  • 디지털 시대를 선도, 글로벌 SW 경쟁력 강화, SW 활용 문화 확대를 위해 7가지 분야에서 혁신 필요

참조

좋은 소프트웨어 특징

· 2 min read

좋은 소프트웨어의 개념

  • SW 발주자, 개발자, 사용자 모두에게 이점을 제공하는 소프트웨어로서 기능성, 신뢰성, 사용성, 효율성, 유지보수성, 이식성, 호환성, 보안성 등 소프트웨어 품질특성을 만족하는 소프트웨어
  • ISO 25010 국제 표준 기반 특성 정의 및 품질 확보

좋은 소프트웨어 개념도

좋은 소프트웨어 조건

구분특징설명
기본 요구정확성 (Correctness)기능이 요구사항과 일치하며 표준에 적합
신뢰성 (Reliability)오류 없이 일정 기간 안정적으로 작동
안정성과 성능강인성 (Robustness)예상하지 못한 상황에서도 정상 작동
성능 (Performance)처리 속도와 자원 활용 효율성
사용자 경험사용 용이성 (Usability)사용자 친화적이고 쉽게 사용할 수 있음
유지 및 확장성유지보수성 (Maintainability)결함 수정 및 기능 확장이 용이
재사용성 (Reusability)기존 소프트웨어를 재사용 가능

신뢰성 테스트, 이식성 테스트

· 7 min read

소프트웨어 테스트의 종류

소프트웨어 테스트 분류

Software testing classification

  • 소프트웨어 테스트는 테스트 레벨, 테스트 유형, 테스트 설계 기법에 따라 분류

소프트웨어 테스트 분류 상세설명

분류테스트 종류설명
테스트 레벨컴포넌트/단위 테스트각각의 컴포넌트를 테스트
통합 테스트컴포넌트 간의 인터페이스 테스트
시스템 테스트전체 시스템의 목적 만족 여부 테스트
인수 테스트사용자의 요구사항 만족 여부 테스트
테스트 설계명세 기반 테스트(BlackBox)명세를 바탕으로 테스트케이스 생성
구조 기반 테스트(WhiteBox)프로그램 코드를 기반으로 테스트케이스 생성
경험 기반 테스트테스트의 경험을 기반으로 테스트케이스 생성
정적테스트리뷰산출물 검토, 프로젝트 진행사항 점검
정적 분석자동화된 도구로 결함을 검출 및 점검
테스트 유형기능 테스트사용자의 요구사항 충족 여부 검출
비기능테스트기능 적합성 테스트사용자의 요구사항 만족 기능 제공 여부 테스트
성능 효율성 테스트시스템의 응답시간/처리량 테스트
호환성 테스트다른 시스템과의 상호 연동성/공존성 테스트
보안성 테스트시스템의 보안성 점검을 위한 능동 테스트
사용성 테스트사용자가 시스템을 효율적으로 용이성 테스트
유지보수성 테스트규정된 조건/기간에 오동작 없이 수행능력 테스트
이식성 테스트다양한 환경에서 운영가능 여부 테스트

신뢰성 테스트, 이식성 테스트

신뢰성 테스트

  • 소프트웨어가 정해진 조건 하에서 일정 기간동안 정상적으로 작동하는지를 확인하는 테스트
분류종류설명
목적오류 및 결함 발견장시간 사용 시 발생할 수 있는 잠재적인 오류와 결함을 조기에 발견하여 수정
시스템 안정성 보장다양한 환경과 조건에서 시스템이 안정적으로 작동하는지 확인하여 신뢰성을 보장
품질 향상신뢰성 테스트를 통해 발견된 문제를 개선함으로써 소프트웨어 품질을 높이고 사용자 만족도 향상
종류부하 테스트 (Load Testing)시스템에 예상되는 최대 부하를 가하여 성능과 안정성 확인
스트레스 테스트 (Stress Testing)시스템의 한계를 넘는 부하를 가하여 얼마나 잘 버티는지, 실패 시 어떻게 복구되는지 평가
지속적 테스트 (Soak Testing)장시간동안 시스템을 가동하여 장기적인 안정성과 메모리 누수 등의 문제를 발견
절차계획 수립테스트 목적, 범위, 방법, 성공 기준 정의
환경 구성테스트 환경과 유사한 테스트 환경 구성
시나리오 작성다양한 시나리오를 통해 시스템의 신뢰성 평가
실행계획된 시나리오에 따라 테스트 수행
결과 분석 및 보고결과 분석을 통해 문제를 발견하고 해결 방안 제시

이식성 테스트

  • 소프트웨어가 다양한 환경에서 동일하게 작동하는지 확인하는 테스트
분류항목설명
목적호환성 확인소프트웨어가 다양한 플랫폼과 환경에서 호환성을 유지하도록 보장
사용자 경험 일관성 유지여러 환경에서 동일한 사용자 경험을 제공하여 사용자의 만족도 향상
시장 범위 확대다양한 환경에서 작동하는 소프트웨어를 통해 더 넓은 시장에 접근성 보장
종류하드웨어 독립성 테스트다양한 하드웨어 환경에서 소프트웨어가 정상적으로 작동하는지 확인
운영체제 독립성 테스트서로 다른 운영 체제에서 소프트웨어의 호환성 평가
브라우저 독립성 테스트웹 애플리케이션의 다양한 브라우저에서 동일한 기능이 작동하는지 확인
언어 및 지역 독립성 테스트다국어 지원 소프트웨어의 다양한 언어 및 지역 설정에 서서히 작동하는지 평가
고려 사항테스트 환경 구축의 어려움다양한 플랫폼과 환경을 모두 구성하는 난이도 증가
테스트 시간 및 비용시간과 비용이 많이 소요
복잡성 증가다양한 테스트 케이스와 시나리오를 구성하는 과정에서 복잡성이 증가

요구 공학

· 6 min read

요구공학 개념

  • 시스템의 개발, 변경의 목적(What)을 식별하기 위해 이해관계자들의 요구를 이해 및 조정하여 체계적으로 수집, 분석, 명세화, 확인하는 공정 또는 학문
  • 비지니스 연속성, 확장성 / 비용절감, 효율성 / 기능 구현 완정성, 오류율 감소 / 조직구성원 이해관계자 만족도, 이해도 증가, 생산성 향상

요구공학 절차

요구공학 절차 개념도

요구공학 절차 상세

구분프로세스설명
요구사항 개발요구사항 추출요구사항 식별, 분류 및 문서화
요구사항 분석요구사항 파악 및 도출 단계
요구사항 명세요구사항 명세서 작성 및 식별(기능/비기능)
요구사항 검증명세서의 정확성 및 구현 가능성 검토
요구사항 관리요구사항 협상구현 가능한 기능 협상
요구사항 기준선공식 검토된 요구사항 명세서 (Baseline)
요구사항 변경관리기준선 기반의 변경 통제
요구사항 확인 및 검증시스템이 요구사항에 부합하는지 확인

요구사항 명세서 개념 및 기술 항목

요구사항 명세서 개념

  • SW를 분석, 설계, 구현, 유지하는 단계에서 검토, 평가, 승인의 기준이 되는 문서
  • SW 요구사항 명세를 결정하기 위해 위해 ISO 21948, IEEE 830 표준 참조/반영

요구사항 명세서 기술 항목

구분항목설명
개요범위명세서가 다루는 시스템의 요구사항에 대한 범위를 기술
목적명세서의 작성 목적을 기술
시스템 개요시스템 전반적인 내용을 요약하여 기술
일반 제약사항다른 표준이나 하드웨어의 제한으로 인해 적용되는 제한사항에 대하여 기술
기능적 요구사항기능요구사항소프트웨어의 입력 처리와 출력을 생성하는 처리 과정에서 발생할 수 있는 기본적인 동작에 대하여 기술
외부 인터페이스 요구사항모든 소프트웨어 시스템으로의 입력과 출력에 대한 요구사항을 상세히 기술
기타 요구 및 제약 사항성능 요구사항소프트웨어 전체적으로 사람과의 상호작용 혹은 소프트웨어에서 확인할 수 있는 정적인 동작인 수치적 요구사항을 기술
HW 요구 사항기억 장치 규모, 통신 수요 등과 같은 HW 요구 사항 기술
논리적 DB 요구사항데이터베이스에서 사용될 정보를 위한 논리적 요구사항에 대하여 기술
소프트웨어 시스템 속성신뢰도, 사용가능성, 보안, 유지보수성, 이식성 등을 기술
인수 조건기능 및 성능 테스트최종 개발 산출물에 대해 수용 확인을 위한 테스트 항목

오픈소스 라이센스

· 5 min read

오픈소스 라이센스 정책변경 개요

  • 개방형 S/W 라이선스는 사용자가 자유롭게 SW 를 사용, 수정, 배포 가능하여 제약이 적은 오픈소스 라이선스
  • 페쇄형 S/W 라이선스는 SW 사용, 수정, 배포가 엄격히 제한되어 저작권자 저작물 독점권리 보장가능 라이선스

오픈소스 라이센스 정책변경 배경

환경 및 경제 측면

구분배경설명
환경적 측면클라우드 환경확산클라우드 컴퓨팅 대중화로 CSP가 오픈소스를 상업적으로 이용
오픈소스 개발자들은 대형 CSP 업체에 의한 상업적 도구 전략
기술의 진보와 SW 복잡성 증가현재 SW의 복잡성 증가는 단순한 자유로운 사용 장려 제한
복잡한 SW 유저비용 관리로 폐쇄형으로 지속적 유지보수
경제적 측면수익 창출모델 변화오픈소스 SW 기반 비즈니스 모델 확산
폐쇄형 라이선스를 통한 라이선스 비용부과로 수익창출 가능
대기업의 SW 독점 방지대형 IT 기업의 오픈소스 SW로 제품개발/이익독점 방지
중소 IT 기업의 공정한 경쟁 환경 조성 가능

기술 및 운영 측면

구분배경설명
기술적 측면보안 및 품질 유지개방형 라이선스는 누구나 사용 가능하나 보안 및 품질 이슈
폐쇄형으로 개발자 코드 품질 유지 및 보안 허점 감소 가능
특정 플랫폼 종속성 방지오픈소스가 과도하게 사용돼 해당 기업에 종속 우려
라이선스의 제한으로 지나친 기술적 종속 방지 가능
운영적 측면SW 유지관리 비용 확보 가능대규모 오픈소스 프로젝트는 지속적 유지관리 필요
폐쇄형 라이선스를 통해 유지관리 비용 충당 가능
사용 조건 관리오픈소스 SW 상업적 제품을 개발조건 관리 곤란
폐쇄형 통해 사용제한 및 통제가 가능

폐쇄형 라이센스로의 전환 영향

구분사례영향
오픈소스 커뮤니티 분열Redis의 라이선스 변경Redis 일부 멤버들은 새로운 라이선스가 오픈소스 정신을 위배한다고 비판, 포크된 Redis를 배포하는 커뮤니티 활동 증가
KeyDB로 포크 프로젝트 진행
ElasticSearch 라이선스 변경AWS 등 클라우드 서비스 업체가 ElasticSearch 라이선스를 변경하며 관련 서비스에서 오픈소스 독점화 우려
Open Search로 포크 프로젝트 진행
기업의 오픈소스 활용 정책 변화Oracle의 MySQL 인수 후 라이선스 변경MySQL의 오픈소스 라이선스 활용에 제한이 발생하며, 기업형 라이선스 비용이 증가
MariaDB의 활용 증가
MongoDB 라이선스 변경클라우드 네이티브 환경에서 MongoDB 사용이 제한되며, 관련 서비스를 제한적으로 사용하도록 정책 변경
FerretDB로 포크 프로젝트 진행

소프트웨어 테스트

· 7 min read

소프트웨어 테스트 개념 및 원칙

소프트웨어 테스트 개념

  • 소프트웨어가 요구사항을 충족하고 프로덕트의 신뢰성 향상을 위해 결함 없이 안정적으로 동작하는지 검증하는 과정

소프트웨어 테스트 7원칙

원칙내용비고
결함 발견결함이 있음을 입증하는 활동, SW는 시간이 지나면 언제든 결함 발생 가능성이 있음테스트의 역할
완벽한 테스트 불가모든 가능한 조합을 테스트하는 것은 현실적 불가능자원의 한계
초기에 테스트 시작개발 초기에 결함발견 중요, 파레토 법칙 적용품질비용 감소
결함 집중동일 테스트케이스 반복 시 신규 결함발견 능력 감소TC 정기적 개선
정황 의존성테스트 방법/접근은 소프트웨어 성격에 따라 차별화 적용외부요소 반영
오류 부재 궤변결함이 없더라도 요구사항 미충족시 실패요구사항 충족

명세기반 테스트, 구조기반 테스트, 경험기반 테스트

명세기반 테스트

기법개념도설명
동등 클래스 분할데이터 구간별 대표 값을 도출하여 테스트하는 방법
다양한 입력 조건을 갖춘 테스트 케이스의 유형들을 분할
경계값분석경계값 주변에서 결함이 많은 원리 이용
유효, 비유효 경계값 고려한 TC 설계
경험적, 결함발견율 높음
의사결정 테이블조건에 따른 Y/N 조합으로 TC 작성
조건과 상황 기반
상태전이상태전이 다이어그램 구성하여 상태 변화요소들을 조합하여 TC 작성
임베디드 시스템에서 주로 활용
유스케이스유스케이스 명세서를 활용한 비지니스 시나리오 테스트
컴포넌트 레벨, 시스템 레벨 유스케이스 테스팅
분류 트리SW 일부/전체를 트리구조로 분석/표현하여 TC 설계
테스트 가시화로 중복/누락 회피
페어와이즈 조합대부분 결함이 2개 이상 요소의 조합으로 이뤄져있기에 상호작용조합으로 TC 작성
경험적 의미 조합
오류예측기법각 테스트 기법이 놓치기 쉬운 오류들을 경험적으로 찾아 검증
Ad-hoc 테스팅

구조기반 테스트

기법설명비고
제어구조프로그램 논리 복잡도 기반 TC 설계 기법논리 복잡도, 흐름 제어
루프 테스트루프 구조에 한하여 실시하는 기법, 초기화, 인덱싱, 루프 경계선 결함 발견 목적루프 구조, 초기화, 경계값
구문 커버리지모든 문장이 최소 한 번은 실행될 수 있는 입력 데이터를 테스트 데이터로 선정
프로그램 내 모든 구문 보장
모든 구문, 실행 여부
결정 커버리지전체 결정문이 적어도 한 번은 참/거짓을 반환하도록 수행결정문, 조건 참/거짓
조건 커버리지결정 명령문 내 각 조건이 적어도 한 번은 참/거짓을 반환하도록 수행개별 조건, 참/거짓
조건/결정 커버리지전체 조건식뿐 아니라 개별 조건식도 참/거짓을 한 번 수행전체 조건식, 개별 조건식
변경조건/결정 커버리지각 개별 조건식이 다른 개별 조건식에 영향받지 않고 전체 조건식에 독립적으로 영향을 주게 수행독립 조건, 조건 영향
다중조건/결정 커버리지결정 포인트 내 있는 모든 개별 조건의 모든 조합을 고려모든 조건 조합

경험기반 테스트

기법개념도특징
오류 추정가능한 결함을 나열하고 결함이나 오류를 추정에 의해 검출/수정
탐색적 기법학습과 테스트 디자인, 테스트 수행을 동시에하는 휴리스틱 테스트 기법
체크리스트테스트/평가해야할 내용과 경험을 분류하여 나열해 놓은 체크리스트 기반 테스트 수행
분류 트리흐름을 트리구조로 시각화하여 테스트 케이스 설계

배포 전략, 테스트 전략

· 3 min read

성공적인 릴리즈를 위한 체크포인트

배포전략 및 테스트전략 유형

배포전략

구분개념도설명
롤링업데이트서버/파드 1개씩 교체하여 배포
관리 및 롤백 용이
서버 처리용량 고려 필요
블루그린배포구버전 블루, 신버전 그린, 신버전을 모두 배포 후 모든 트래픽을 스위칭
운영 환경에 영향 없음, 실서비스 환경으로 신버전 테스트
시스템 자원 두 배 필요
카나리배포트래픽 제어를 통해 일부 사용자만 신규 서버로 접속, 모니터링 디버깅수행 후 전체 스위칭
리스크 감지 용이, A/B테스트 활용
네트워크 트래픽 제어 부담

테스트전략

구분개념도설명
카나리테스트변경사항을 부분적으로 출시 후 기존과 비교하여 평가
실시간 프로덕션 트래픽 테스트, 리전별 테스트
느린 릴리즈, 모니터링 복잡성, 이전버전 호환성 고려
A/B테스트일부 사용자를 새 기능으로 라우팅
애플리케이션 기능 효과 측정 용이
복잡한 설정, 편향된 샘플링
쉐도우테스트트래픽을 미러링하여 신버전으로 전달하여 함께 실행
제로 프로덕션 영향, 배포 위험 감소
비용 및 운영 오버헤드

배포 및 테스트 위험을 줄이기 위한 고려사항

  • 이전 버전과의 호환성
  • 배포 전, 중, 후 모든 단계에서의 지속적 테스트(CT)
  • IaC를 통한 자동화된 인프라 관리