1. 소프트웨어 개발 방법론

소프트웨어 생명주기 모델 (SDLC)

  • 프로세스 단계: 요구사항 분석 → 설계 → 구현 → 테스트 → 유지보수
  • 모델 종류
    • 폭포수 모델: 단계별 진행, 이전 단계로 돌아가기 어려움
    • 프로토타이핑 모델: 시제품(Prototype) 제작 후 수정·보완
    • 나선형 모델: 위험 분석을 기반으로 반복적 개발
    • 반복적 모델: 일정 단위로 나누어 점진적 개발

소프트웨어 개발 방법론

  • 구조적 방법론: 절차 중심 개발
  • 정보공학 방법론: 데이터 중심 개발
  • 객체지향 방법론: 객체 중심 개발
  • 컴포넌트 기반 개발 (CBD): 재사용 가능한 컴포넌트 활용
  • 애자일 방법론: 변화 대응과 팀 협업 중심
  • 제품 계열 개발 방법론: 임베디드·특정 제품 중심

요구공학 (Requirement Engineering)

  • 개발 프로세스: 요구사항 도출 → 분석 → 명세 → 검증
  • 관리 프로세스: 협상 → 기준선 설정 → 변경 관리 → 검증

2. 프로젝트 관리

비용 산정 모델

  • 하향식: 전문가 판단 (델파이 기법)
  • 상향식: 코드라인수(LOC), Man-Month, COCOMO, Putnam, FP(Function Point)

일정 관리 모델

  • CPM (주공정법): 프로젝트의 중요 경로 관리
  • PERT: 확률적 일정 관리
  • 간트차트: 작업 일정 시각화

위험 관리 (Risk Management)

  • 위험 식별 → 분석 → 계획 → 감시 및 조치
  • 위험 대응 전략
    • 회피(Avoid)
    • 전가(Transfer)
    • 완화(Mitigate)
    • 수용(Accept)

3. 소프트웨어 개발 표준 및 프레임워크

국제 표준

  • ISO/IEC 12207: 소프트웨어 생명주기 프로세스 정의
  • CMMI (Capability Maturity Model Integration)
    • 성숙도 레벨: 초기(1) → 관리(2) → 정의(3) → 정량적 관리(4) → 최적화(5)
  • SPICE (ISO 15504)
    • 수준 모델: 불완전 → 수행 → 관리 → 확립 → 예측 → 최적화

개발 프레임워크

  • 소프트웨어 재사용
    • 합성 중심 (기존 모듈 조합)
    • 생성 중심 (템플릿, 자동 코드 생성)

4. 네트워크 및 시스템 구축

네트워크 구성 및 신기술

  • 네트워크 구조: 버스형, 트리형, 링형, 메시형, 성형
  • 라우팅 프로토콜
    • RIP: 홉 수 15 제한
    • OSPF: 제한 없음
    • BGP: ISP 간 사용

스토리지 및 백업

  • 스토리지 유형
    • DAS: 개별 서버에 직접 연결
    • NAS: 네트워크 기반 공유
    • SAN: 전용 네트워크
  • 백업 방식
    • 전체 백업
    • 차분 백업 (마지막 전체 백업 이후 변경된 데이터)
    • 증분 백업 (가장 최근 백업 이후 변경된 데이터)

5. DB 구축 및 빅데이터 기술

빅데이터 개념 및 기술

  • 3V 요소: 속도(Velocity), 크기(Volume), 다양성(Variety)
  • 빅데이터 저장 및 분석 기술
    • HDFS, HBASE, MapReduce
    • 데이터 가공 (Pig, Hive, Tajo)
    • 분석 및 시각화 (R, Python)

NoSQL 데이터베이스

  • 특징: 스키마 필요 없음, 조인 사용 안 함, 수평 확장 가능
  • 유형
    • 키-값 저장소
    • 컬럼 기반 저장소 (HBASE)
    • 문서 저장소 (MongoDB, JSON 기반)
    • 그래프 DB (Neo4j)

6. 소프트웨어 보안 구축

보안 3대 요소

  • 기밀성 (Confidentiality)
  • 무결성 (Integrity)
  • 가용성 (Availability)

Secure SDLC 및 보안 방법론

  • BSiMM, OpenSAMM, OWASP CLASP, MS SDL

웹 보안 취약점 및 대응

  • XSS (Cross-Site Scripting): 문자 필터링, HTML 태그 제한
  • SQL Injection: 바인딩 방식 사용, 필터링
  • CSRF (Cross-Site Request Forgery): CSRF 토큰 사용, 재인증

암호화 기법

  • 대칭키 암호화: AES, DES
  • 비대칭키 암호화: RSA, ECC
  • 해시 암호화: SHA, MD5 (취약점 존재)

취약점 대응 기법

  • 솔트 키 사용, 키 스트레칭 (n번 반복)

7. 시스템 보안 구축

서비스 공격 유형

  • DoS/DDoS 공격: SYN Flooding, UDP Flooding, Smurf 공격
  • 애플리케이션 공격: HTTP GET Flooding, Slowloris, Rudy 공격

네트워크 보안 위협

  • 패스워드 크래킹
  • IP/ARP 스푸핑
  • 세션 하이재킹

보안 관련 공격 기법

  • 버퍼 오버플로우 (스택, 힙)
  • 포맷 스트링 공격
  • 키로거 공격

인증 및 접근 통제

  • 인증 방식: 지식 기반, 소지 기반, 생체 기반
  • 접근 통제 유형: DAC(신분 기반), MAC(규칙 기반), RBAC(역할 기반)

보안 아키텍처

  • 관리적 보안: 정책 및 규정
  • 물리적 보안: 데이터센터 보호
  • 기술적 보안: 방화벽, IDS/IPS, VPN

8. 보안 솔루션 및 로그 관리

네트워크 보안 솔루션

  • 방화벽 (Firewall)
  • 웹 방화벽 (WAF)
  • 침입 탐지 시스템 (IDS)
  • 침입 방지 시스템 (IPS)
  • 가상사설망 (VPN)

시스템 보안 솔루션

  • 보안 운영체제 (커널 보안 강화)
  • 콘텐츠 유출 방지 (DLP, DRM)

1. 개발환경

1) 개발환경 구축

  • 정의: 응용 소프트웨어의 개발 편의성과 성능 향상을 위해 하드웨어 및 소프트웨어 환경을 구축하는 과정
  • 도구의 분류
    • 빌드 도구: 코드 빌드 및 배포 (ex: Ant)
    • 구현 도구: 코드 작성, 디버깅, 수정 (ex: Eclipse, Spring, VS Studio)
    • 테스트 도구: 기능 검증 및 품질 향상 (ex: xUnit)
    • 형상 관리 도구: 코드 및 문서의 버전 관리 (ex: Git)

2) 개발환경 구성요소

(1) 서버 하드웨어

  • 웹 서버(정적) → 클라이언트 요청을 받아 HTML 문서 전송 (ex: Apache)
  • WAS(동적) → 웹 서버와 DB 서버 사이에서 데이터 처리 (ex: Tomcat)
  • DB 서버 → 데이터 저장 및 관리 (ex: MySQL Server)
  • 파일 서버 → 파일 저장 및 전송 (ex: AWS S3)

(2) 클라이언트 하드웨어

  • 클라이언트 프로그램 → 설치형 프로그램 (ex: Visual Basic)
  • 웹 브라우저 → 서버와 웹 통신 (ex: Chrome)
  • 모바일 앱 → 앱스토어에서 다운로드 가능한 앱
  • 모바일 웹 → 모바일 브라우저에서 웹 서비스 제공

(3) 소프트웨어 개발환경

  • 운영체제 (OS) → 하드웨어와 소프트웨어를 연결 (ex: Windows, Linux)
  • 미들웨어 → 다양한 환경에서 실행 가능하게 함 (ex: JVM, Tomcat)
  • DBMS → 데이터 관리 시스템

3) 서버 개발 프레임워크

  • 프레임워크: 재사용 가능한 소프트웨어 개발 틀
    • 특징: 모듈화, 재사용성, 확장성, 제어의 역행

2. 프로그래밍

1) 데이터 타입

  • 정수형: int, long
  • 실수형: float, double
  • 문자형: char, string
  • 논리형: boolean

2) 변수

  • 정의: 데이터를 저장하는 공간
  • 규칙: 숫자로 시작 금지, 공백 금지, 예약어 사용 금지

3) 출력

(1) C언어

#include <stdio.h>
int main() {
    printf("Hello");
    return 0;
}
  • printf() → 출력
  • \n → 개행

(2) Java

class Example {
  public static void main(String[] args) {
    System.out.println("Hello");
  }
}
  • System.out.print() → 개행 없음
  • System.out.println() → 개행 있음
  • System.out.printf() → 포맷 지정 가능

(3) Python

print("Hello")
print("Hello", end="")  # 개행 없음
  • print() → 자동 개행

4) 배열

  • C언어: int arr[5] = {1, 2, 3};
  • Java: int[] arr = {1, 2, 3};

5) 포인터 (C언어)

int a = 10;
int *b = &a;
  • & → 주소 연산자
  • * → 포인터

6) 파이썬 자료형

  • 리스트: [1, 2, 3]
  • 튜플 (수정 불가): (1, 2, 3)
  • 세트 (중복 제거): {1, 2, 3}

3. 운영체제

1) 기본 명령어

  • ls → 현재 디렉토리 파일 목록 확인
  • cat → 파일 내용 출력
  • fork → 새로운 프로세스 생성
  • chmod → 퍼미션 수정
  • uname → 시스템 정보 확인
  • pwd → 현재 경로 확인

2) 프로세스와 스레드

  • 프로세스: 실행 중인 프로그램
  • 스레드: 프로세스 내에서 CPU를 할당받아 실행되는 단위

3) 페이징 기법

  • 페이지 크기가 작아질수록 페이지 개수 증가, 페이지 테이블 크기 증가, 내부 단편화 감소

4. 네트워크

1) 전송 매체 및 MAC

  • CSMA/CD: 충돌 감지 후 재전송 (사용 안 함)
  • CSMA/CA: 충돌 방지 후 전송

2) IP 주소

  • IPv4: 32비트 (20 Octet)
  • IPv6: 128비트 (16진수, 40 Octet)

3) 라우팅 프로토콜

  • IGP (내부 라우팅) → RIP, OSPF
  • EGP (외부 라우팅) → BGP

4) TCP/IP

  • TCP 헤더 크기: 20~60 바이트
  • IP 헤더 크기: IPv4 (20 Octet), IPv6 (40 Octet)

 

데이터베이스 정리

1. 데이터 정의 및 조작

  • 데이터 정의(DDL): 응용 프로그램과 데이터베이스의 인터페이스 방식 정의
  • 데이터 조작(DML): 사용자와 데이터베이스 간 인터페이스 수단 제공
  • 데이터 제어(DCL): 데이터의 정확성과 안정성 유지

2. 스키마 개념

  • 외부 스키마: 사용자 또는 개발자 관점의 데이터베이스 논리적 구조 (사용자 뷰, 서브 스키마)
  • 개념 스키마: 데이터베이스의 전체적인 논리적 구조 (개체 관계, 제약조건, 무결성 등)
  • 내부 스키마: 물리적 저장장치 관점에서 데이터를 저장하는 방식 정의

3. 트랜잭션 및 병행제어

  • 트랜잭션: 논리적 기능을 수행하는 하나의 작업 단위 (ACID)
  • 커밋 & 롤백: 원자성 보장
  • 병행제어:
    • 로킹 단위가 작아지면
      • 데이터베이스 공유도 증가
      • 로킹 오버헤드 증가
      • 병행성 증가
  • 트랜잭션 상태
    • 부분 완료: 연산이 끝났지만 최종 반영되지 않은 상태
    • 실패 상태: 정상 실행 불가 상태
    • 철회 상태: 시작 전 상태로 되돌림

4. 뷰(View)

  • 논리적 독립성 제공
  • CREATE, DROP 가능 (ALTER 불가)
  • 기본 테이블 삭제 시 자동 삭제
  • 인덱스 생성 불가
  • 삽입, 삭제, 갱신 연산에 제약사항 존재

5. 관계형 데이터베이스

  • 릴레이션: 테이블
  • 튜플: 행(카디널리티)
  • 속성: 열(차수)
  • 관계대수(절차적 언어)
    • 순수 관계 연산자: SELECT, PROJECT, JOIN, DIVISION
  • 관계 해석(비절차적 언어)
    • 튜플 관계 해석
    • 도메인 관계 해석

6. 정규화 및 이상현상

  • 이상현상(삽입, 삭제, 갱신 이상)
  • 정규화 단계
    1. 원자성
    2. 부분 함수 종속 제거
    3. 이행적 함수 종속 제거
    4. 다치 종속 제거
    5. 조인 종속 제거

7. 키(Key)

  • 슈퍼키: 유일성 만족, 최소성 만족X
  • 후보키: 유일성 & 최소성 모두 만족
  • 기본키: 후보키 중 선택된 키
  • 외래키: 다른 테이블의 기본키를 참조

8. 데이터 무결성 및 보안

  • 무결성
    • 개체 무결성: 기본키는 NULL & 중복 불가
    • 참조 무결성: 외래키는 기본키이거나 NULL이어야 함
    • 속성 무결성, 사용자 무결성, 키 무결성
  • 보안 모델
    • DAC(임의적 접근 제어)
    • MAC(강제적 접근 제어)
    • RBAC(역할 기반 접근 제어)
    • 벨-라파듈라 모델: 기밀성
    • 비바 모델 / 클락-윌슨 모델: 무결성

9. SQL 활용

  • DML(데이터 조작어)
    • SELECT, INSERT INTO VALUES, UPDATE SET WHERE, DELETE FROM WHERE
  • DCL(데이터 제어어)
    • GRANT 권한 ON 테이블 TO 사용자
    • REVOKE 권한 ON 테이블 FROM 사용자
  • 집계 함수
    • AVG(), SUM(), COUNT(), MAX(), MIN() (그룹 필요)

10. 분산 데이터베이스

  • 투명성 유형
    • 위치, 복제, 병행, 분할, 장애
  • 파티셔닝 기법
    • 범위 분할, 해시 분할, 목록 분할, 조합 분할, 라운드 로빈

11. 반정규화

  • 성능 향상과 운영 단순화를 위해 중복, 통합, 분리 수행
  • 중복 테이블 추가 방법
    • 집계 테이블 추가
    • 진행 테이블 추가
    • 특정 부분만 포함하는 테이블 추가

 

1. 자료구조 및 알고리즘

자료구조

  • 선형 구조
    • 스택 (LIFO): 함수 호출, 후위 표현식 변환, 깊이 우선 탐색(DFS), 인터럽트 처리
    • 큐 (FIFO): 데이터 버퍼, 프로세스 스케줄링
    • 데크 (Deque): 양쪽에서 삽입/삭제 가능
    • 리스트
      • 선형 리스트
      • 연결 리스트 (단순/이중/원형)
  • 비선형 구조
    • 트리
      • 이진 트리: 전위/중위/후위 순회
      • 이진 탐색 트리 (BST)
      • 힙 (Heap): 우선순위 큐 구현
    • 그래프
      • DFS (깊이 우선 탐색)
      • BFS (너비 우선 탐색)

정렬 알고리즘

  • 퀵 정렬: 피벗을 설정하여 분할 정복 방식으로 정렬
  • 합병 정렬: 분할 후 병합하여 정렬
  • 힙 정렬: 최대 힙/최소 힙 구조를 활용
  • 거품 정렬: 인접한 두 요소를 비교하며 정렬
  • 삽입 정렬: 앞에서부터 정렬된 부분과 비교하여 삽입
  • 선택 정렬: 가장 작은 값을 선택하여 정렬

검색 알고리즘

  • 순차 검색: 처음부터 하나씩 비교
  • 이진 검색: 중앙값을 기준으로 탐색 (O(log n))

해시 함수 기법

  • 나눗셈 방법
  • 곱셈 방법
  • 숫자 분석 방법
  • 폴딩 방법 (XOR 폴딩법)
  • 중간 제곱 방법

2. 통합 구현

통합 구현 개념

  • 모듈(컴포넌트) 간 데이터 교환 및 시스템 연계를 수행

단위 모듈

  • 정의
  • 분석
  • 추출
  • 모듈화

재사용 기법

  • 재공학 (Reengineering)
    • 분석
    • 재구조화
    • 역공학
    • 이식
  • 재개발 (Refactoring)

형상 관리 (SCM, Software Configuration Management)

  • 형상 관리 절차: 식별 - 통제 - 감사 - 기록
  • 형상 관리 도구 기능: 인증 - 아카이브 - 커밋
  • 사례: CSG
  • 형상 통제 위원회 (CCB, Configuration Control Board)

3. 제품 SW 패키징

소프트웨어 품질 기준

  • ISO 9126: 기능성, 신뢰성, 사용성, 효율성, 유지보수성, 이식성
  • ISO 14598: 평가 기준 (반복성, 재사용성, 공정성, 객관성)
  • ISO 2500 시리즈: 통합 품질 모델

SW 패키징 구성 요소

  • DRM (Digital Rights Management, 디지털 저작권 관리)
    • 패키저: 콘텐츠를 메타데이터와 함께 묶음
    • 클리어링 하우스: 라이선스 발급
    • 컨트롤러: 이용 권한 통제
  • 버전 관리
    • 공유 폴더 방식 (RCS)
    • 클라이언트/서버 방식 (SVN, CVS)
    • 분산 방식 (Git)
  • 빌드 자동화 도구
    • CS, 빌드, 테스트, 커밋, 인테그레이션

소프트웨어 배포 도구 고려 사항

  • 암호화
  • 이식성
  • 복구 기능
  • 최적화

4. 애플리케이션 테스트 관리

테스트 개념

  • 테스트 오라클: 참, 샘플링, 휴리스틱, 일관성 검사
  • 테스트 레벨
    • 단위 테스트 (모듈 내 구조 확인)
    • 통합 테스트 (모듈 인터페이스 검증)
    • 시스템 테스트 (기능/비기능 테스트)
    • 인수 테스트 (알파/베타 테스트)
  • 테스트 유형
    • 블랙박스 테스트: 프로그램 내부 구조를 고려하지 않음
    • 화이트박스 테스트: 내부 로직 기반 테스트

테스트 설계 기법

  • 블랙박스 테스트 기법: 동등 분할, 경계값 분석, 결정 테이블, 상태 전이, 유스케이스, 원인-결과 그래프, 비즈니스 규칙
  • 화이트박스 테스트 기법: 제어 흐름, 조건 검증, 루프 테스트

테스트 원리

  • 결함 집중: 파레토 법칙 (80% 결함은 20% 원인)
  • 소프트웨어 테스트 원칙: 결함 존재 증명, 완벽한 테스트 불가능, 조기 테스트, 결함 집중, 살충제 패러독스, 정황 의존성, 오류 부재의 궤변

5. 인터페이스

EAI (Enterprise Application Integration)

  • 서로 다른 애플리케이션 간 데이터 연계를 위한 솔루션
  • 연계 방식: 포인트 투 포인트, 허브 앤 스포크, 메시지 버스, 하이브리드

ESB (Enterprise Service Bus)

  • 서로 다른 프로토콜과 애플리케이션을 유연하게 연계 (낮은 결합)

데이터 교환 기술

  • AJAX: 비동기 데이터 전송
  • REST API: HTTP 기반 인터페이스

DB 암호화 기법

  • 애플리케이션 레벨
  • 하드웨어 기반 암호화

시큐어 코딩 가이드

  • 입력 데이터 검증, 보안 기능, 시간 및 상태, 에러 처리, 코드 오류, 캡슐화, API 오용

보안 프로토콜

  • S-HTTP, SSL/TLS, IPsec

인터페이스 구현 검증 도구

  • xUnit, Postman, Excel, WebSquare

STAF (Software Testing Automation Framework)

  • 분산 환경에서 데몬을 이용한 자동화 테스트 수행

 



 

소프트웨어 설계 1단원 정리

1. 행위적 다이어그램

  • 유스케이스, 시퀀스, 커뮤니케이션, 상태, 활동 다이어그램

2. 유스케이스 다이어그램

  • 확장(Extend): 특정 조건에서 추가되는 관계
  • 포함(Include): 반드시 포함되는 관계
  • 의존 관계: 사물의 변화가 다른 사물에도 영향을 주는 관계

3. 개발 방법론

  • XP(eXtreme Programming): 용이한 단순 설계, 단위 테스트, 피드백, 지속적인 통합
  • 애자일: 모듈 중심이 아닌 기능 중심 개발
  • UML: 사물, 관계, 다이어그램으로 구성 (터미널 X)

4. 데이터 흐름 및 모델링

  • DFD(Data Flow Diagram): 시간 흐름을 명확하게 표현할 수 없음
  • 유스케이스 구성 요소: 연관, 포함, 확장, 일반화
  • UML 사물 유형: 구조(구조적), 행동(행위적), 그룹(그룹화), 주해(주석)

5. 스프린트 및 다이어그램 요소

  • 스프린트: 번다운 차트를 통해 작업량 추적
  • 전이(Transition): 객체의 상태 변화를 유발하는 자극

6. CASE(Computer-Aided Software Engineering)

  • 과정 전체 또는 일부 자동화
  • 일괄처리 X → 분산처리 O
  • 상위 CASE: 자료 흐름도 중심
  • 하위 CASE: 구문 중심

7. UI/UX 원칙

  • 유효성: 목표를 달성할 수 있도록 제작
  • 직관성: 쉽게 사용할 수 있어야 함
  • 유연성: 다양한 환경에서 동작 가능

8. 소프트웨어 아키텍처 설계 (4+1 뷰)

  • 유스케이스 뷰: 사용자 관점
  • 논리 뷰: 기능 중심
  • 프로세스 뷰: 비기능적 요구사항
  • 구현 뷰: 정적인 소프트웨어 모듈 구성
  • 배포 뷰: 컴포넌트의 물리적 배치

9. 디자인 패턴

  • 파이프-필터: 데이터 스트림 기반, 단방향, 서브시스템 연결
  • 브로커: 클라이언트-서버 간 리다이렉션 역할
  • MVC(Model-View-Controller): 대화형 애플리케이션 설계
  • 마스터-슬레이브: 실시간 시스템에 사용

10. 소프트웨어 품질 속성

  • 가변성, 보안성, 시각화 (독립성 X)

11. 모듈화 원칙

  • 유일한 이름 보유
  • 다른 모듈에 접근 가능

12. 응집도 & 결합도

  • 통신적 응집도 = 교환적 응집도 (유사한 데이터 사용)

13. 오버로딩 vs 오버라이딩

  • 오버로딩: 같은 이름, 다른 매개변수(유형 다름)
  • 오버라이딩: 상속받은 메서드 재정의(리셋)

14. 디자인 패턴 유형

  • 생성 패턴: 빌더, 프로토타입, 팩토리, 싱글톤
  • 구조 패턴: 브릿지, 프록시, 어댑터, 컴포지트, 데코레이터, 파사드

15. 객체지향 개념

  • 객체 지시 = 메시지
  • 확장 = 상속
  • 객체지향 개발 = 상향식 접근

16. 관계 개념

  • 일반화 (Generalization): is-a 관계
  • 집단화 (Aggregation): part-of 관계
  • 분류화 (Classification): is-instance-of 관계
  • 연관화 (Association): is-member-of 관계

17. 템플릿 메서드 패턴

  • 상위 클래스에서 골격 정의, 하위 클래스에서 세부 구현

18. 요구사항 분석

  • 정형 요구사항: 숫자, 수식 등 명확한 요구
  • 비정형 요구사항: 자연어 기반 요구

19. 요구사항 개발 절차

  • 도출 → 분석 → 명세 → 확인

20. 시스템 간 통신

  • 송신 시스템: 데이터를 송신
  • 수신 시스템: 데이터를 수신
  • 중계 시스템: 송수신 현황을 모니터링

21. TP 모니터 & 미들웨어

  • TP 모니터: 트랜잭션 감시
  • 메시지 지향 미들웨어(MOM): 비동기 방식, 느리지만 안정적

 

 

 

 

+ Recent posts