14 분 소요

정보처리기사를 취득하기 위해 공부하는 과정에 작성한 ‘소프트웨어 개발’ 관련 정리이다.

통합 구현

통합 구현

  • 단위 모듈 : 소프트웨어 구현에 필요한 다양한 동작 중에 하나의 동작을 수행하는 기능을 모듈료 구현
    • 단위 기능 명세서 : 큰 규모의 시스템을 분해아여 단위 기능별로 계층적 구조화·단순화하여 추상화한 문서
  • 모듈화 : 소프트웨어 개발에 있어 기능을 나누고 추상화하여, 소프트웨어 성능을 향상 및 효과적인 유지보수 구현
    • 분할 정복법 : 복잡한 문제를 분해하여, 모듈 단위로 문제 해결
    • 정보 은닉 : 어렵거나 변경 가능성이 있는 모듈을 타 모듈로부터 은폐
    • 자료 추상화 : 함수 내에 자료 구조의 표현 명세를 은폐하고, 자료 및 오퍼레이션을 함께 정의
    • 모듈 독립성 : 낮은 결합도, 높은 응집도를 갖도록 함
    • 단위 모듈 테스트 : 프로그램의 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 검증
      • 단위 모듈 테스트 기법 : 화이트박스 테스트, 블랙박스 테스트
  • 구현 단계의 작업 절차 : 코딩 계획 → 코딩 → 컴파일 → 코드 테스트
  • IDE : 소프트웨어 개발 단계에서 필요한 도구들을 하나의 인터페이스로 통합 제공
    • IDE 종류 : 이클립스, 비주얼 스튜디오, Xcode, 안드로이드 스튜디오, IntelliJ, PyCharm
    • IDE 구성 요소 : 소스 코드 편집기, 컴파일러, 디버거
    • IDB 기능 : 개발 환경 지원, 컴파일, 디버깅, 외부 연계, DB 연동, 배포
  • 빌드 자동화 도구 : 소스 코드 컴파일 후 다수의 연관된 모듈을 묶어 실행 파일로 만듬 (Gradle)
    • 빌드 자동화 도구 기능 : 컴파일, 컴포넌트 패키징, 파일 조작, 버전 관리 도구 통합, 문서 생성, 테스트, 품질 분석, 배포
    • 빌드 자동화 도구 프로세스 : 컴파일 → 패키징 → 단위 테스트 → 정적 분석 → 리포팅 → 배포 → 최종 빌드
    • Ant, Maven, Gradle, Jenkins, Makefile, Travis CI, TeamCity

형상 관리

  • 형상 관리 : 개발 단계에 생성되는 모든 문서·코드 등 소프트웨어 변경 사항을 체계젹으로 관리하기 위해 추적·통제
    • 형상 관리 항목 : 프로젝트 요구 분석서, 운영·설치 지침, 요구사항 명세서, 설계·인터페이스 명세서, 테스트 설계서, 소프트웨어 품질보증, 형상관리 계획서, 코드 모듈, 소스·테스트 코드
    • 형상 관리 도구 : 소프트웨어 개발 생명주기 전반에 걸쳐 산출물의 종합 및 변경 과정을 체계적으로 관리
    • 형상 관리 절차 : 형상 식별 → 형상 식별자 선정 → 형상 통제 → 형상 기록·보고 → 형상 검사

버전 관리

  • 버전 관리 : 요구사항 변화에 따른 다양한 형상 항목에 버전을 부여해 이력을 관리
    • 변경 관리 : 변경된 요구사항에 대해, 비용·기간을 고려해 타당성 평가 (변경 관리 ⊂ 버전 관리 ⊂ 형상 관리)
    • 버전 관리 도구 구분 : 공유 폴더 방식, 클라이언트·서버 방식, 분산 저장소 방식
    • 버전 관리 도구 종류 : CVS, RCS, SVN, BitKeeper, Git, Clear Case

시스템 인터페이스 구현

모듈 연계

  • 모듈 연계 : 시스템 인터페이스를 목적으로 내부-외부 혹은 내부-내부 모듈 간 인터페이스를 설정하는 것
    • EAI : 기업 내부에서 운영되는 각종 플랫폼 및 어플리케이션 간의 정보 전달·연계·통합 솔루션
      • Point-to-Point : 어플리케이션을 미들웨어 없이 점 대 점을 연결하는 방식
    • Hun & Spoke : 단일 접점인 허브 시스템을 통해 데이터를 전송하는 중앙 집중형 방식
    • Message Bus : 어플리케이션 간에 미들웨어를 배치해 처리하는 방식
    • Hybrid : Hun & SpokeMessage Bus를 혼합
    • EAI 구성 요소 : EAI 플랫폼, 어댑터, 브로커, 메시지 큐, 비즈니스 워크플로우
  • ESB : 어플리케이션 간의 데이터 변환 및 연계 지원을 제공하는 인터페이스 제공 솔루션
  • Web Service : 네트워크 정보를 표준화된 서비스의 형태로 만들어 공유하는 기술 (SOA 실천)
  • IPC : OS에서 프로세스 간 데이터에 대한 통신 기술
    • IPC 기술 : 파이프, 소켓, 메시지 큐, 공유 메모리

인터페이스 구현

  • 인터페이스 기능 정의 : 인터페이스를 실제 구현하기 위해 인터페이스 기능에 대한 구현 방법을 기능별로 기술하는 과정
    • 인터페이스 기능 정의 순서 : 컴포넌트 명세서 확인 → 인터페이스 명세서 확인 → 인터페이스 기능 구현 정의서 → 인터페이스 기능 구현 정형화
  • 모듈 세부 설계서 : 컴포넌트 설계서, 인터페이스 명세서
  • 인터페이스 구현 : 송·수신 시스템 간의 데이터 교환 및 처리를 실현하는 작업
    • AJAX : JS 기반의 비동기 통신 기술 (클라이언트·서버 간 XML으로 통신)
    • JSON : JS 기반의 데이터 통신을 이용한 인터페이스 구현
  • 인터페이스 구현 검증 : 구현된 인터페이스의 동작 상태 검증·감시 (Watir, FitNesse, NTAF Naver, Selenum, Appium)
    • xUnit : Assertion, Fixture, Test Runner를 지원하는 단위 테스트 프레임워크
    • STAF : 서비스 호출, 컴포넌트 재사용을 데몬 기반 테스트 분산 환경에서 테스트 수행
  • 인터페이스 구현 감시 도구 : APM을 통한 동작 상태 감시 (트랜잭션·변수값·호출 함수·로그·시스템 부하 조회·분석)

인터페이스 보안

  • 인터페이스 보안 : 모듈 컴포넌트 간 데이터 교환 시 데이터 변조·탈취 및 인터페이스 모듈 자체의 보안 취약점
    • 데이터 통신 시 데이터 탈취 위협 : 스니핑 (네트워크 패킷을 엿봐 계정·비밀번호 탈취), 스푸핑 (사용자가 크래커의 사이트로 통신해 비밀번호 탈취)
  • 네트워크 보안 적용 : 송·수신 중간자의 데이터 탈취·위변조를 방지하기 위한 네트워크 트래픽 암호화
    • 네트워크 구간 보안 기능 적용 시 고려사항 : 상대방 인증 적용, 데이터 기밀성의 보장, End-to-End 보안의 적용, 인증 키를 통한 통신, 연결 단위 외에 메시지 단위 인증 및 암호화
    • SSL : 웹 브라우저·서버 간 통신에서 데이터 암호화 및 인증
    • S-HTTP : 웹 서버·클라이언트 간 통신에서 전송 데이터 암호화
  • 데이터베이스 보안 적용 : 데이터베이스의 기밀성 유지를 위해 중요하고 민감한 데이터는 암호화
    • 데이터베이스 암호화 기법 : API, Filter (Plug-in), Hybrid
    • 데이터베이스 암호화 알고리즘 : 대칭키 알고리즘 (ARIA 256), 해시 알고리즘 (SHA-512), 비대칭키 알고리즘 (RSA)
  • 인터페이스 연계 테스트 : 송·수신 시스템 간 구성 요소가 정상적으로 동작하는지 테스트
    • 인터페이스 연계 태스트 순서 : 테스트 케이스 작성 → 테스트 환경 구축 → 테스트 수행 → 테스트 수행 결과 검증

제품 소프트웨어 패키징

제품 소프트웨어 패키징

  • 제품 소프트웨어 패키징 : 개발 완료된 소프트웨어를 고객에 인도하기 위해 패키징하고, 배포 설치 파일을 만드는 작업
    • 제품 소프트웨어 패키징 프로세스 : 기능 식별 → 모듈화 → 빌드 → 사용자 환경 분석 → 적용 시험 → 변경 개선
  • 제품 소프트웨어 패키징 도구 : 소프트웨어 배포 목적으로 패키징 시에 지식재산권 보호·관리 기능을 제공하는 도구
    • 제품 소프트웨어 패키징 도구 고려 사항 : 내부의 컨텐츠 암호화·보안, 암호화 알고리즘 적합한지, 이기종 컨텐츠 및 단말기 간 DRM 연동 고려, 사용자 편의성을 위한 복잡성·비효율성 문제 고려
    • REL : XML 기반 디지털 컨텐츠의 권한 관리를 위한 언어
    • ODRL : XML 기반 디지털 컨텐츠의 저작권 관리 위한 권한 표현 언어
    • SSO : 사용자가 하나의 로그인으로 여러 시스템에 접근할 수 있는 인증 방식
    • 디지털 인증서 : 디지털 컨텐츠나 서비스의 보안을 강화하기 위한 전자 문서
  • 어플리케이션 모니터링 도구 (APM) : 응용 소프트웨어 성능 및 서비스 이용성을 감시하고 관리하는 도구
    • APM 제공 기능 : 어플리케이션 모니터링, 사용자 모니터링, 성능 최적화, 장애 대응
  • 협업 도구 : 소프트웨어 개발 과정에서 이해관계자 간 이견 조율을 수행하기 위한 도구
    • 협업 도구 종류 : 버전 관리 시스템, 이슈 트래커, 채팅 도구, 코드 리뷰 도구, CI·CD 도구

제품 소프트웨어 저작권

  • DRM : 디지털 컨텐츠의 유통 과정에서 컨텐츠를 안전한 관리·보호를 위해 허가된 사용자만 접근 제한
    • DRM 기술적 요구사항 : 지속적 보호, 이용 편리성, 유연성, 통합 용이성
    • DRM 기술 요소
    • DRM 유통 과정
    • DRM 유통 구성
    • DRM 정책 : Render Permission, Transport Permission, Derivative Permission
    • DRM 사용 조건 : Period, Count, Domain

제품 소프트웨어 메뉴얼 작성

  • 소프트웨어 메뉴얼 : 제품 소프트웨어 개발 단계부터 적용된 기준, 패키징 이후 설치 및 사용자 측면의 내용을 기록
    • 소프트웨어 설치 메뉴얼 : 소프트웨어 실사용자가 제품을 최초 설치 시 참조하는 메뉴얼
      • 소프트웨어 설치 메뉴얼 기본 사항 : 개요, 관련 파일, 아이콘, 설치 환경 체크 항목
    • 소프트웨어 사용자 메뉴얼 : 소프트웨어 설치와 사용에 필요한 제반 절차·환경을 포함하는 메뉴얼
      • 사용자 메뉴얼 작성 순서 : 작성 지침 정의 → 사용 설명서 구성 요소 정의 → 구성 요소별 내용 작성 → 사용자 메뉴얼 검토 → 메뉴얼 배포
  • 릴리즈 노트 : 어플리케이션 최종 사용자인 고객에 제공하는 배포 정보 문서
    • 릴리즈 노트 항목 : 헤더, 개요, 목적, 이슈 요약, 재현 항목, 수정·개선 내용, 최종 사용자 영향도, 노트, 면책 조항, 연락 정보

제품 소프트웨어 품질 관리

  • 소프트웨어 품질 관리 : 소프트웨어 개발 과정에서 발생할 수 있는 다양한 문제점들을 사전에 파악해 품질 향상
    • 소프트웨어 품질 국제 표준 : ISO/IEC 9126, ISO/IEC 12119, ISO/IEC 25000, ISO/IEC 15504 (SPICE)
    • 소프트웨어 품질 목표 : Software Quality and Goals
      • 운영 측면 : 정확성, 신뢰성, 사용 용이성, 효율성, 무결성
      • 변경 수용 특성 : 이식성, 상호운용성, 재사용성, 유지보수성, 유연성, 시험 역량

어플리케이션 테스트

테스트 관리

  • 소프트웨어 테스트 : 소프트웨어 개발 단계에서 소프트웨어 결함을 찾아내는 활동
    • 소프트웨어 테스트 프로세스 : 계획·제어 → 분석·설계 → 구현·실행 → 평가·보고
    • 소프트웨어 테스트 원리 : 결함 존재 증명, 완벽한 테스트는 불가능, 개발 초기에 수행되어야 함, 특정 모듈에 결함 대부분이 존재, 테스트는 컨텍스트에 의존
      • 파레토의 법칙 : 전체 결과의 80%가 전체 원인의 20%
      • 살충제 패러독스 : 동일한 테스트 케이스로 테스트하면 어느 시점부터 결함 발견 불가능
      • 오류-부재의 궤변 : 요구사항을 만족하지 못하는 오류를 발견해 제거해도, 해당 어플리케이션 품질이 높다고 할 수 없음

테스트 케이스와 테스트 오라클

  • 테스트 케이스 : 구현된 소프트웨어가 사용자 요구사항을 준수하는지 확인하기 위한 테스트 항목에 대한 명세서
    • 표준 테스트 케이스 형식 : ID, 시나리오, 단계, 데이터, 예상 결과, 실제 결과, 통과 실패
    • 테스트 케이스 자동 생성 : 자료 흐름도 → 테스트 경로 관리·입력 도메인 분석 → 테스트 데이터 산출·랜덤 테스트 → 무작위 값 입력·신뢰성 검사
    • 테스트 케이스 구성 요소 (ISO/IEC/IEEE 29119-3)
  • 테스트 오라클 : 테스트 결과가 참인지 거짓인지 판단하기 위해 사전에 정의된 True를 입력해 비교
    • 테스트 오라클 종류 : 참 오라클, 일관성 검사 오라클, 샘플링 오라클, 휴리스틱 오라클

V-모델과 테스트 레벨

  • 시각에 따른 테스트 : 검증 (Verification)vs확인 (Validation)
  • Test Bases 테스트 : 소프트웨 내부 구조에 따른 테스트 케이스 작성 및 확인
    • Test Bases 종류 : 구문 기반, 결정 기반, 조건 기반, 데이트 흐름 기반, 명세 기반, 경험 기반
  • 동적 테스트 : 어플리케이션을 직접 실행 (vs정적 테스트)
    블랙박스 테스팅 (명세 기반), 화이트박스 테스팅 (구조 기반)
  • 알파 테스트 (개발자 관점에서 사용자가 테스트)vs베타 테스트 (사용자 관점에서 사용자가 테스트)
  • 테스트 분류 : 회복 테스트, 안전 테스트, 성능 테스트, 구조 테스트, 회귀 테스트, 병행 테스트
  • 성능 테스트 유형 : 부하 테스트, 강도 테스트, 스파이크 테스트, 내구성 테스트
  • V-모델 : 어플리케이션 개발 단계에 따라 어플리케이션르 총체적을 관리하기 위한 테스트 활동의 묶음
    • 단위 테스트 : 개발자가 원시 코드를 대상으로 각 단위를 다른 부분과 연계되는 부분을 고려치 않고 테스트
    • 통합 테스트 : 단위 테스트를 통과한 개발 소프트웨어·하드웨어 컴포넌트 간 인터페이스 및 연동 기능을 테스트
    • 시스템 테스트 : 단위·통합 테스트 이후 실제 환경과 유사한 환경에서 시스템 성능과 관련된 요구사항을 테스트
    • 인수 테스트 : 소프트웨어 제품에 대한 요구사항을 제대로 이행되었는지 확인

테스트 시나리오와 테스트 기법

  • 테스트 시나리오 : 테스트를 위한 테스트 케이스의 집합 (테스트 케이스의 동작 순서 기술)
  • 테스트 환경 구축 : 실제 운영 시스템에 정상적으로 작동하는지 테스트하기 위한 실제 운영 환경과 동일한 시설 구축
  • 화이트박스 테스트 : 모듈의 원시 코드를 오픈한 상태에서 코드의 모든 논리적 경로 테스트
    • 화이트박스 테스트 종류 : 기초 경로 검사, 제어 구조 검사 (조건 검사, 루프 검사, 데이터 흐름 검사)
  • 블랙박스 테스트 : 소프트웨어가 수행할 특정 기능을 알기 위해 각 기능이 정상 작동되는지 입증 (기능 테스트)
    • 블랙박스 테스트 종류 : 동치 분할 검사, 원인-효과 그래프 검사, 오류 예측 검사, 비교 검사, 경계값 분석

테스트 커버리지

  • 테스트 커버리지 : 주어진 테스트 케이스에 의해 수해오디는 소프트웨어 테스트 범위를 측정하는 테스트 품질 측정 기준

통합 테스트

  • 단위 테스트 : 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트
    • 단위 테스트 지원 도구 (xUnit) : JUnit, Mocha, Mockito, Karma, Selenium
  • 통합 테스트 : 각 모듈을 결합해 시스템을 완성할 때, 모듈 간 인터페이스나 통합 컴포넌트 간 오류 탐색
    • 비 점진적 통합 방식 (빅뱅 통합) : 모든 모듈이 결합된 프로그램 전체 대상으로 테스트
    • 점진적 통합 방식 (상향식·하향식) : 단계적으로 통합하면서 테스트
  • 하향식 통합 테스트 : 상위 컴포넌트 → 하위 컴포넌트
    • 시스템 테스트 기능, 개발 일정 예측 가능, 통합 오류 발견 어려움, 테스트 스텁 사용 가능, 협력 필요
  • 상향식 통합 테스트 : 하위 컴포넌트 → 상위 컴포넌트
    • 하위 모듈 결함 전파 방지, 드라이버 통한 테스트 가능, 개바 속도 빠름, 조기 결함 발견 가능
  • 테스트 자동화 도구 : 어플리케이션 개발 중에 반복되는 테스트 과정을 자동화하는 도구
    • 테스트 자동화 도구 유형 : 정적 분석 도구, 테스트 실행 도구, 성능 테스트 도구, 테스트 통제 도구
      • 테스트 하네스 도구 : 소프트웨어 컴포넌트 테스트, 프로그램 입력, 결과 비교, 컴포넌트 기능 대행 목적
        • 테스트 드라이버 : 상향식 테스트에서 테스트 대상을 제어·동작하기 위한 도구
        • 테스트 스탑 : 하향식 테스트에서 시스템 컴포넌트가 개발되지 않은 상황의 가상 더미 컴포넌트
        • 테스트 슈트 : 일정 순서에 의해 수행될 계별 테스트 집합 및 패키지
        • 테스트 케이스 : 요구사항에 맞게 개발되었는지 확인할 테스트 입력 및 예상 결과
        • 테스트 스크립트 : 테스트 케이스르 수행해 결과를 보고할 목적으로 작성된 명령어·이벤트 중심 파일
        • 목 오브젝트 : 사용자 행위를 미리 조건부로 입력해 그 상황에 맞는 행위를 수행하는 객체

어플리케이션 성능 개선

결함 관리

  • 결함 : 소프트웨어의 에러, 결함, 결점, 버그, 실패
    • 결함 심각도별 분류 : 치명적, 주요, 보통, 경미한 단순
    • 결함 우선순위 : 결정적, 높음, 보통, 낮거나 즉시 해결, 주의 요망, 대기, 개선 권고
    • 결함 위치별 분류 : 시스템 결함, 기능 결함, GUI 결함, 문서 결함
    • 결함 관리 프로세스 : 결합 관리 계획 → 결함 기록 → 결함 검토 → 결함 수정 → 결함 재확인 → 결함 상태 추적 → 보고서 작성
  • 에러 : 소프트웨어 개발 또는 유지보수 수행 중에 발생한 부정확한 결과
  • 오류 : 소프트웨어 구현이나 설계상의 오류로 인해 시스템의 고장을 일으킴
  • 고장 : 정상적인 프로그램과 비정상적인 프로그램의 실행 결과 차이
  • 결함 : 버그, 에러, 오류, 실패를 모두 포괄

어플리케이션 성능 개선

  • 성능 처리 지표 : 처리량, 응답 시간, 경과 시간, 갸용성, 확장성, 안정성
  • 성능 분석 도구 : 성능·부하·스트레스 점검 도구, 머니터링 도구
  • 위험 감시 : 위험 요수 징후들에 대해 계속해서 인지하는 것
    • 위험 감시 절차 : 위험 식별 → 위험 평가 → 위험 대응 계획 수립 → 위험 모니터링
  • 어플리케이션 성능 저하 원인 : DB Lock, 불필요한 DB Fetch, 연결 누수, 부적절한 Connection Pool Size
  • 알고리즘 : 주어진 과제를 해결하는 방법 및 절차 (자연여, 의사코드, 순서도, 프로그래밍 언어로 표현)
    • 분할 정복법 : 제시된 문제를 분할이 불가능할 때까지 나누고, 각 과제를 해결하면서 다시 결합 (Top-Down)
      • 분할 정복법 예시 : 퀵 정렬, 병합 정렬
    • 동적 계획법 : 주어진 문제를 해결하기 위해 부분 문제에 대한 답을 계속적으로 활용 (Bottom-Up)
      • 동적 계획법 예시 : 플로이드 알고리즘, 피보니치 수열 알고리즘 → 최적 부분 구조, 중복 부분 문제에 적합
    • 탐욕법 : 각 부분에 대한 최적해를 구해 이를 결합하여, 국소적인 관점에서 최적의 해결 방법을 구함
      • 탐욕법 예시 : 크루스칼 알고리즘, 다익스트라 알고리즘
    • 퇴각 검색법 : 어떤 문제의 최적해를 구하기 위해 모든 가능성을 탐색
      • 퇴각 검색법 예시 : N-Queen
    • 분기 한정법 : 정해진 범위를 벗어나는 값들은 가지치기하면서 결과값을 추적
      • 분기 한정법 예시 : 최적 우선 탐색 알고리즘, A* 알고리즘
    • 근사 해법 : 복잡도가 매우 높은 문제에 대해 가장 근사치의 값을 구하는 결정성 구현
      • 근사 해법 예시 : 근사 알고리즘
  • 알고리즘 시간 복잡도 : 알고리즘을 수행하기 위해 프로세스가 수행하는 연산 횟수를 수치화한 것
    • 빅오 표기법 : 알고리즘 실행 시간이 최악일 때를 표기하는 방법
  • 순환 복잡도 : 프로그램의 이해 난이도는 제어 흐름 그래프의 복잡도에 따라 결정 → 복잡도를 싸이클로메틱 개수로 산정
    • 최대 10이 넘지 않도록 하며, 넘으면 이를 분해하도록 함
    • 복잡도 = 화살표 수 - 노드 수 + 2 = 영역 수 + 1 = 의사 결정 수 + 조건 수 + 1

소스 코드 최적화

  • 소스 코드 최적화 : 읽기 쉽고 변경·추가가 쉬운 클린 코드를 위해 기본적으로 지킬 윈칙 및 기준 정의
    • 스파게티 코드 : 처리 로직의 제어가 체계화되어 있지 않고 서로 얽혀있는 코드
    • 외계인 코드 : 오래되거나 참고 문서·개발자가 없어 유지보수가 어려운 프로그램
    • 클린 코드 : 깔끔하게 잘 정리된 코드 (중복 코드 제거, 높은 가독성·프로그래밍 속도·버그 탐색 속도)
      • 클린 코드 작성 원칙 : 가독성, 단순성, 의존성 배제, 중복성 최소화, 추상화
      • 클린 코드 유형 : 좋은 배치, 작은 함수, 분석 가능한 제어 흐름, 간결한 주석, 의미 있는 이름
    • 코드 간결성 유지 지침 : 공백으로 실행문·주석 구분, 복잡한 논리식·산술식 들여쓰기, 빈 줄로 선언부·구현부 구별, 한줄에 적은 문장
    • 소스 코드 최적화 유형 : 클래스 분할 배치, 좋은 이름 사용, 코딩 형식 준수, 느슨한 결합, 적절한 주석
  • 소스 코드 품질 분석 도구 : 코딩 스타일, 코드 표준, 코드 복잡도, 메모리 누수, 스레드 결함을 발견하기 위해 사용
    • 정적 분석 도구 : 소스 코드 검증, 코드 리뷰, 정적 리버스 엔지니어링
      • 정적 분석 도구 종류 : PMD, CPPCheck, SonarQube, CheckStyle, CCM, Coberfura
    • 동적 분석 도구 : 디버깅, 스트레스 테스트, 모의 해킹, 동적 리버스 엔지니어링

데이터 입출력 구현

자료 구조

  • 자료 구조의 분류 : 선형 구조, 비선형 구조, 파일 구조로 대분류
    • 자료구조의 활용 : 정렬, 검색, 인덱스, 레코드
  • 선형 자료 구조 : 데이터를 일렬로 늘어놓은 자료 구조, 데이터를 순서대로 저장하고 순차적으로 처리
    • 스택 : 후입선출 (LIFO), 큐 : 선입선출 (FIFO), 데크 : 리스트 양끝에 포인터 2개 사용
  • 비선형 구조 : 데이터를 한줄로 연결하지 않는 구조, 자료 간 선후관계가 1:N, N:1으로 표현
    • 트리 : 노드와 브랜치로 사이클을 이루지 않는 그래프
    • 이진 트리 : 차수가 2 이하인 노드들로 구성된 트리 (이진 트리 레벨 K의 최대 노드 수는 2^K-1)
      • 이진 트리의 운행법 : 전위 운행 (Root → Left → Right), 중위 운행 (Left → Root → Right), 후위 운행 (Left → Right → Root)
      • 이진 트리의 수식 표기법 : 전위 표기법 (연산자 → 피연산자 → 피연산자), 중위 표기법 (피연산자 → 연산자 → 피연산자), 후위 표기법 (피연산자 → 피연산자 → 연산자)
    • 그래프 : 정점과 간선의 집합으로 이루어진 자료 구조 (인접 행렬로 표현)
      • 그래프 종류 : 방향 그래프, 무방향 그래프, 완전 그래프, 부 그래프
      • N개의 노드로 구성된 무방향 그래프의 최대 간선 수 : N(N-1)/2
      • 제어 흐름 그래프의 순환 복잡도 : V(G) = (화살표 수) - (노드 수) + 2
    • 인접 행렬 : 방향 그래프에서 정점 ViVj의 관계를 나타내는 행렬의 원소를 Aij라 할 때,
      정점 Vi에서 Vj로 향하는 방향 간선이 있으면 행렬의 Aij = 1,
      방향 간선이 없으면 행렬의 Aij = 0,
      정점 ViVj가 서로 인접하면 Aij = 1
      정점 ViVj가 서로 인접하지 않으면 Aij = 0

정렬

  • 정렬 : 자료를 특정 기준에 따라 다시 나열 하는 것
    • 삽입 정렬 : 정렬된 파일에 새로운 하나의 레코드를 순서에 따라 삽입해 정렬
    • 버블 정렬 : 인접한 데이터와 비교하면서 그 크기에 따라 데이터 위치를 바꾸어 정렬
    • 선택 정렬 :N개의 레코드 중 최소값(최대값)을 찾아 배열의 N번째로 놓는 것을 반복해 정렬
    • 병합 정렬 : 배열을 최대로 나눈 뒤, 나뉜 각 키 한 쌍을 순서를 정하며 병합해 정렬
    • 퀵 정렬 : 피벗을 기분으로 작은 값은 왼쪽에, 큰 값은 오른쪽에 모이도록 서로 교환해 정렬

검색, 해싱

  • 검색 : 기억 공간 내에서 주어진 조건 을만족하는 자료 탐색
    • 이분 검색 : 정렬된 배열의 가운데 인덱스 값을 선택 → 크면 작은 값 쪽으로, 작으면 큰 값 쪽으로 이동 반복
    • 선형 검색 : 주어진 자료에서 원소를 첫번째 레코드부터 순차 비교해 탐색
    • 이진 트리 검색 : 전체 레코드를 이진 트리로 구성해 검색
    • 블록 검색 : 전체 레코드를 블록으로 분리해 순서대로 비교해 검색
  • 해싱 함수 : 레코드 키에 대한 해시 테이블 내의 홈 주소를 계산해 주어진 레코드에 접근할 때 활용되는 함수
    • 해싱 함수 종류 : 제산 방법, 중간 제곱 방법, 중첩 방법, 기수 변환 방법
    • 해싱 오버플로우 해결 : 선형 개방 주소법, 폐쇄 주소 방법, 재해싱
    • 해싱 관련 용어 : 동의어, 슬롯, 충돌

인덱스 구조와 파일 편성

  • 인덱스 : DB 테이블 내의 원하는 레코드를 빠르게 탐색하는 데이터 구조
    • 인덱스 구성 방법 : B 트리, B+ 트리, 트라이 색인
    • 정적 인덱싱 (색인 순차 파일 방식)vs동적 인덱싱 (가상 기억 접근 방식)
  • 파일 편성 기법 : 순차 파일, 색인 순차 파일, VSAM 파일, 직접 파일, 역파일