Skip to main content

좋은 소프트웨어 특징

· 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를 통한 자동화된 인프라 관리

정보은닉

· 2 min read

정보은닉 개념

  • 코드 내부 데이터와 메서드를 숨기고 공개 인터페이스를 통해서만 접근이 가능하도록 하는 객체지향 프로그래밍의 특성
  • 외/내부 구현을 나눠 복잡성 제거, 외부로부터의 데이터 보호

정보은닉 개념도, 접근제어자 유형, 예시

정보은닉 개념도

  • 접근제어자를 사용하여 외부객체로부터 데이터 접근 수준 제어

접근제어자 유형

구분유형상세설명
클래스default동일 패키지 내 클래스에게 접근 허용
public모든 클래스에서 접근 허용
속성/메소드private비공개, 클래스 내 멤버만 접근 허용
default동일 패키지 내 클래스일 경우 접근 허용
protected동일 패키지 또는 상속받은 자식 클래스의 경우 접근 허용
public공개, 모든 클래스에서 접근 허용

형상관리, 기준선

· 4 min read

형상관리의 개념

  • 형상 항목을 식별하고 문서화, 변경 제어, 변경 처리 상태를 기록하고 명시된 요구사항에 부합하는지 검증하는 기술적이고 관리적인 감독, 감시 활동
  • 소프트웨어 생명주기 단계별로 기능적, 분배적, 설계 등 베이스라인이 구분되어 관리

형상관리 기준선 개념, 구성요소

형상관리 기준선 개념

  • 대상 시스템/제품에 대한 기술적인 통제를 하게 되는 시점 또는 그 시점의 기준문서로 형상관리 프로세스의 기준으로 활용

형상관리 기준선 구성요소

기준선시점형상관리 항목
기능적 기준선사용자 요구 기능이 정의되는 시점 분배적 기준선개발 계획서
분배적 기준선요구 기능이 서브시스템으로 분할되는 시점요구사항 정의서
설계 기준선설계 사양이 완성되는 시점 시험 기준선ERD, UML
테스트 기준선테스트를 위한 준비 시점실행 코드
제품 기준선통합, 기능, 성능 등 시험 완료 시점 운용 기준선테스트 결과서
운용 기준선개발 완료 후 운영 이관 시점 형상 관리 항목사용자/운영자 매뉴얼

컨피덴셜 컴퓨팅

· 4 min read

컨피덴셜 컴퓨팅 개념

  • 데이터 보호와 개인 정보 보안에 중점을 둔 컴퓨팅 환경을 제공하는 기술로 격리, 접근통제, 암호화, 키 관리 기술을 하드웨어로 구현하여 소프트웨어보다 더 강력한 통제 보장
  • 클라우드 환경에서 데이터 유출 및 무단 접근 방지, 클라우드 운영자나 제3자에 대한 완전 신뢰 없이 데이터 보호 가능, 기밀성 유지

컨피덴셜 컴퓨팅 구성도, 구성요소, 적용방안

컨피덴셜 컴퓨팅 구성도

컨피덴셜 컴퓨팅 구성요소

구분내용비고
신뢰 실행 환경하드웨어 기반 격리로 민감 데이터 보호 및 외부 접근 차단Intel SGX, AMD SEV 등
실행 증명실행 중인 코드 무결성을 검증하여 신뢰성을 보장원격 검증, 내장형 시스템
주변 장치GPU, FPGA 등 신뢰 가능한 컴퓨팅 환경 확장보안 기능 통합, 주변 장치 비신뢰
운영 체제TEE 기반 보안 운영체제를 통해 응용 프로그램 실행사용자 친화적 API 지원
응용 프로그램기밀성을 보장하며 연산 수행TPM 활용

컨피덴셜 컴퓨팅 적용방안

구분이슈적용방안
신뢰 실행 환경부채널 분석공격, 성능 저하, 수학적 모델 부재관련 방어기법 연구, 증명가능한 TEE 개발
실행 증명공개된 표준 프로토콜 부재업계 표준 수립
주변 장치디스크 저장 데이터에 대한 비신뢰 OS의 접근가상머신 단위 격리
운영 체제암복호화로 인한 성능 하락TPM 가상화

컨피덴셜 컴퓨팅 주요 고려사항

  • RISC-V와 같은 오픈소스 CPU 설계 생태계의 확장으로 인해 컨피덴셜 컴퓨팅에 대한 국내 연구와 생태계 구축

참조

RIG, 검색삽입생성

· 4 min read

RIG 개념

  • LLM이 답변을 생성하는 과정에서 실시간으로 외부 데이터베이스에서 검색하여 답변하는 기술
  • 환각현상 완화, 실시간 정보 활용, 복잡한 응답 처리

RIG 구성도, 작동방식, 적용방안

RIG 구성도

RIG 작동방식

단계내용특징
질의 분석사용자의 입력을 분석하여 필요한 정보를 파악자연어 처리 기술 활용
실시간 검색분석된 정보를 바탕으로 외부 데이터베이스에 질의 수행실시간 데이터 반영
응답 생성검색된 데이터를 모델의 학습된 지식과 결합하여 최종 응답 생성검색과 생성을 통합하여 정확도 향상

RIG 적용방안

구분적용 사례효과
의료최신 의료 연구 및 논문 데이터를 검색해 진단 및 치료법 제공신뢰할 수 있는 근거 기반 진료
법률판례나 법률 텍스트를 검색하여 법적 의견 제시정확한 법적 해석 제공
고객 서비스제품 매뉴얼, FAQ 데이터베이스를 기반으로 고객 질문에 답변고객 만족도와 문제 해결 속도 향상
금융 분석실시간 시장 데이터를 활용한 투자 전략 제안의사결정 지원 및 위험 관리

RIG와 RAG 비교

구분RAGRIG
개념외부 데이터를 미리 검색하여 프롬프트에 추가 후 응답 생성응답 생성 도중 필요한 데이터를 실시간으로 검색하고 통합
작동 방식검색 → 프롬프트 보강 → 응답 생성질의 분석실시간 검색 → 응답 생성
장점대규모 데이터 활용 가능, 사전 준비된 정보로 효율적 처리최신 데이터 반영, 실시간 정보로 동적이고 정확한 응답 제공
단점오래된 데이터 사용 가능성, 프롬프트 길이 증가쿼리 작성 및 추가 학습 필요, 처리 속도 저하 가능
적용 분야일반 Q&A 시스템, 대규모 문서 기반 분석실시간 정보가 중요한 대화형 AI, 복잡한 문제 해결

RIG 적용시 주요 고려사항

  • 외부 데이터베이스 품질 관리: 신뢰할 수 있는 데이터 소스를 확보하고 정기적으로 갱신
  • 보안 및 프라이버시: 민감한 정보가 외부로 노출되지 않도록 암호화 및 접근 제어 시스템 적용
  • 처리 속도 최적화: 실시간 검색 과정에서 발생할 수 있는 지연 문제를 해결하기 위한 최적화, 캐싱