□ 애자일(Agile)기법 ☆☆☆☆☆
- XP(eXtreme Programming)
- 스크럼 : Sprint(짧은 단위 기간)동안 개발, 매일 Daily Scurm을 통해 진행상황 공유
- FDD(Feature-Driven Development) : 기능 중심 개발, 기능 단위로 계획 → 설계 → 개발 → 검증 반복
- 크리스탈 : 사람 중심의 경량 프로세스
- 린(Lean) : 낭비를 줄이고 효율성을 극대화하여 빠르고 품질 높은 소프트웨어 개발
- 7가지 원칙 : 낭비제거, 학습 강화, 의사 결정 지연, 빠른 전달, 권한 위임, 전체 최적화, 품질 내재화
□ 익스트림 프로그래밍(XP) ☆☆☆☆☆
- 익스트림 프로그래밍(XP, eXtreme Programming)은 애자일(Agile) 방법론의 대표적인 반복적·적응형(Iterative & Adaptive) 개발 방식
- 5가지 원칙 : 의사소통, 피드백, 존중, 용기, 단순성
- 12가지 실천사항 : 소단위 릴리즈, 단순 설계, 테스트 우선 계발, 리팩토링, 지속적 통합, 짝 프로그래밍,
공동 코드 소유, 코드 표준화, 지속 가능한 속도, 고객 상주, 메타포, 전체 팀
※구조적 방법론(Structured Methodology)은 전통적인 폭포수 모델(Waterfall)과 관련된 절차 중심의 방법론을 말하며, XP와는 성격이 완전히 다르다.
□ 클래스 설계 원칙(SOLID) ☆☆☆☆☆
- 단일 책임(Single Responsibility Principle) : 하나의 책임만 가져야 한다.
- 개방-폐쇄(Open-Closed Principle) : 확장에는 열리고 수정에는 닫혀 있어야 한다.
- 리스코프 치환(Liskov Substitution Principle) : 자식 클래스는 부모 클래스를 대체할 수 있어야 한다.
- 인터페이스 분리(Interface Segregation Principle) : 여러 개의 구체적인 인터페이스로 나누어야 한다.
- 의존 역전(Dependency Inversion Principle) : 구체적인 구현이 아닌 인터페이스나 추상 클래스에 의존하도록 설계한다.
□ UML(Unified Modeling Language) 다이어그램 ☆☆☆☆☆
- 구성 : 사물(Things), 관계(Relationship), 다이어그램(Diagram)
- 클래스 간의 관계
- 연관(Association) : 클래스 간 서로 알고 있음(has a)[실선으로 표현 {학생 ― 과목 }]
- 집합(Aggregation) : 전체-부분 관계(부분이 전체에 종속되지 않음)[비워진 마름모로 표현 {학급 ◇―― 학생}]
- 복합(Composition) : 강한 전체-부분 관계(부분이 전체에 종속) [채워진 마름모 {책 ■―― 장 }]
- 일반화(Generalization) : 상속 관계(is -a) [빈 삼각형 화살표 { 동물 ◁―― 고양이 }]
- 의존(Dependency) : 한 클래스가 다른 클래스의 변화에 영향을 받는 "사용" 관계 [점선 화살표 {주문 → 결제서비스}]
- 실체화(Realization) : 인터페이스 구현 관계 [점선 빈 삼각형 화살표 {PaymentService ◁―― KakaoPayService}]
- 종류 및 설명
종류 |
설명 |
형태 |
클래스 다이어그램 |
객체 지향 시스템에서 클래스 간의 관계 표현 |
정적 |
컴포넌트 다이어그램 |
시스템 구성요소와 그 관계 표현 |
정적 |
배치 다이어그램 |
하드웨어 구성 및 소프트웨어 배포 표현 |
정적 |
시퀸스(순차) 다이어그램 |
객체들 간의 메시지 흐름(시간 순서)을 표현 |
동적 |
유스케이스 다이어그램 |
사용자와 시스템 간 상호작용 정의 |
동적 |
활동 다이어그램 |
비즈니스 프로세스나 작업 흐름 표현 |
동적 |
상태 다이어그램 |
객체의 상태 변화 표현 |
동적 |
커뮤니케이션 다이어그램 |
객체들이 주고 받는 메시지 표현 |
동적 |
인터렉션 오버뷰 다이어그램 |
활동 + 시퀸스 다이어그램 |
동적 |
타이밍 다이어그램 |
시간의 흐름에 따른 상태 변화를 표현 |
동적 |
□ 유스케이스(Use Case) ☆☆☆☆☆
- 연관관계(Association) : 유스케이스와 액터간의 상호작용이 있음을 표현한다.
- 포함 관계(Include): 하나의 유스케이스가 다른 유스케이스의 실행을 전제로 할 때 형성되는 관계이다.
- 확장 관계(Extend): 확장 기능 유스케이스와 확장 대상 유스케이스 사이에 형성 되는 관계이다.
- 일반화 관계(Generalization) : 유사한 유스케이스 또는 액터를 모아 추상화한 유스케이스
또는 액터와 연결시켜 그룹을 만들어 이해도를 높이기 위한 관계이다.
- 사용자 액터 : 기능을 요구하는 대상이나 시스템의 수행결과를 통보받는 사용자
- 시스템 액터 : 본 시스템과 데이터르 주고받는 연동시스템
□ GoF(Gang of Four) 디자인 패턴 ☆☆☆☆☆
구분 |
종류 |
생성패턴(생성) |
추상 팩토리, 빌더, 팩토리 메소드, 프로토타입, 싱클톤 |
구조패턴(확장) |
어탭터, 브릿지, 컴포지트, 데코레이터, 퍼싸드, 플라이웨이트, 프록시 |
행위패턴(변경, 수정) |
메멘토, 옵저버, 전략, 템플릿 메소드, 상태, 역할 사슬, 커맨드, 인터프리터, 이터레이터, 미디에이터, 비지터 |
□ 객체지향 분석 기법 ☆☆☆☆☆
- 분석가 (기법명) 핵심 특징 및 설명
☆☆☆ 럼바우 (Rumbaugh) |
객체(Object) -객체, 동적(Dynamic) - 상태, 기능(Functional) - DFD 3가지 모델로 시스템 분석 → 정적 구조 분석에 강점 |
부치 (Booch) |
Micro(세부)와 Macro(전체) 개발 프로세스를 모두 적용클래스와 객체 중심 분석 → 구조 + 행위 통합 접근 |
제이콥슨 (Jacobson) |
유스케이스(Use Case) 중심 분석 방법사용자와 시스템 간 상호작용 분석에 효과적 |
☆ 코드와 유어든 (Coad & Yourdon) |
E-R 다이어그램 기반 객체 행위 모델링객체 식별 → 구조 식별 → 속성/연산/메시지 정의 등 분석 절차가 체계적 |
비르프스-브록 (Wirfs-Brock) |
분석과 설계의 구분 없이 연속적으로 진행고객 명세서를 바탕으로 직접 설계까지 연결하는 실용적 접근 방식 |
□ 객체 지향 프로그래밍의 특징 ☆☆☆☆☆
- 추상화(abstarction) : 불필요한 세부사항은 숨기고, 중요한 정보만 제공
- 캡슐화(encapsulation) : 객체의 속성과 메서드를 하나로 묶는것, 외부에서는 인터페이스만 접근 가능(정보 은닉)
- 상속(inheritance) : 기존 클래스의 속성과 메서드를 재사용하여 새로운 클래스를 생성
- 다형성(polymorphism) : 같은 인터페이스나 메서드 이름으로 다양한 동작 가능
□ 미들웨어(Middleware) ☆☆☆
- 운영체제와 응용 프로그램 사이에서 동작하면서, 서로 다른 시스템이나 소프트웨어 컴포넌트 간의 연결, 통신, 데이터 관리 등을 지원하는 소프트웨어 계층(서로 다른 애플리케이션 간을 “중간에서 중재해주는 소프트웨어)
- 미들웨어의 종류
- RPC : 원격 프로시저 호출
- MOM : 메시지 지향 미들웨어
- ORB : 다른 시스템의 프로그램을 네트워크를 통해 호출할 수 있는 미들웨어
- DB 접속 미들웨어
- TP 모니터
- WAS
- ESB
□ 요구사항 분석 ☆☆☆
- 도출(추출) → 분석 → 명세 → 확인(검증, 검토)
- 기능적 요구사항 : 실제 시스템 수행에 필요한 요구사항
- 비기능적 요구사항 : 성능, 품질, 보안, 안정성에 필요한 보조적인 지표
□ UI 설계원칙 ☆☆☆
- 직관성 : 누구나 쉽게 이해하고 사용할 수 있어야 함
- 유효성 : 사용자의 목적을 정확하게 달성하여야 함
- 학습성 : 누구나 쉽게 배우고 익힐 수 있어야 함
- 유연성 : 사용자의 요구사항을 최댛나 수용하며, 오류를 최소화하여야 함
□ 클래스(Class)간 관계 ☆☆☆
- 일반화 관계 Generalization(상속) : 객체지향 개념에서 상속관계
- 실체화 관계 Realization(구현) : 인터페이스와 그것을 구현한 것과의 관계
- 의존 관계 Dependency(참조) : 어떤 클래스가 다른 클래스를 일시적으로 참조
- 연관 관계 Association : 어떤 클래스가 다른 클래스를 참조
- 직접 연관 : 한 클래스가 다란 클래스를 참조하는 관계
- 집합 연관 Aggregation : 참조하는 객체나 클래스가 사용 후에도 유지되는 관계
- 복합 연관 Composition : 참조한 객체가 사라지면 참조하는 객체도 사라지는 관계
□ 하향식, 상향식 설계 ☆☆☆
- 하향식 통합 테스트(Top Down Intergration Test)
- 깊이 우선 통합, 넓이 우선 통합법 사용
- 테스트 초기 사용자에게 시스템 구조를 보여줄 수 있음
- 상위 모듈에서는 테스트케이스 사용이 어려움
- 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법
- 절차
- 주요 상위(제어) 모듈을 구현하고 테스트 시작
- 종속된 하위 모듈은 스텁으로 대체
- 깊이 우선 또는 넓이 우선 전략에 따라 스텁을 실제 모듈로 하나씩 교체
- 모듈이 통합될 때마다 테스트 수행
- 이전 테스트가 영향을 받지 않았는지 회귀 테스트로 확인
- 상향식 통합 테스트(Bottom Up Intergration Test)
- 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트 하는 방법
- 가장 하위 단계의 모듈부터 통합 및 테스트가 수행되므로 스텁은 필요하지 않다.
- 하나의 주요 제어 모듈과 관련된 종속 모듈의 그룹인 클러스터는 필요
- 절차
- 하위 모듈들을 클러스터로 구성하여 통합
- 상위 모듈이 아직 없기 때문에, 드라이버를 작성하여 클러스터를 테스트
- 통합된 클러스터 단위로 테스트 수행
- 테스트가 완료된 클러스터는 상위 모듈과 점차적으로 결합
- 드라이버는 실제 상위 모듈로 교체됨
□ 프로그램 품질관리 ☆☆☆
- 워크스루(Walkthrough)
- 교육 목적이나 문제의 식별등이 목적
- 문제 해결 자체에 중점을 두지 않음
- 미리 준비된 자료를 바탕으로 정해진 절차에 따라 평가
- 오류 조기 검출이 목적
- 검조 자료를 회의 전에 배포하여 사전 검토 후 짧은 시간동안 회의 진행
- 인스펙션(Inspection)
- 오류 발견과 수정에 중점
- 저작자 외의 다른 전문가 또는 팀이 검사하여 오류를 찾아내는 방식
- 워크스루를 발전시킨 형태
□ HIPO (Hierarchy plus Input-Process-Output) Chart ☆☆
- 하향식 기법으로 절차보다는 기능 중심
- 도형 목차의 내용을 입력, 처리, 출력 관계로 도표화한 것이 총괄 도표
- 체계적인 문서 작성이 가능하며, 보기 쉽고 알기 쉽다.
- 기능과 자료의 의존 관계를 동시에 표현할 수 있다.
- HIPO 차트 종류에는 가시적, 총체적, 세부적 도표가 있다.
- 프로그램 구조와 데이터 구조나 데이터 구조 간의 관계를 표현할 수 없다.
□ 소프트웨어 설계 도구 ☆
설계도구 |
의미 |
와이어프레임(Wireframe) |
페이지에 대한 계략적인 레이아웃이나 UI요소 등에 대한 뼈대를 설계하는 단계 |
목업(Mockup) |
와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형 |
스토리보드(Story Board) |
와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서 |
프로토타입(Prototype) |
실제 구현된 것처럼 테스트가 가능한 동적인 형태의 모형 |
유스케이스(Use Case) |
사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술한다 |
□ 소프트웨어 설계 단계 ☆
- 상위 설계
- 아키텍처 설계, 예비 설계
- 시스템의 전체적인 구조
- 구조, DB, 인터페이스
- 하위 설계
- 모듈 설계, 상세 설계
- 시스템 내부 구조 및 행위
- 컴포넌트, 자료구조, 알고리즘
□ 시스템 품질 속성 ☆
- 가용성(Availability)
- 변경용이성(Modifiability)
- 성능(Performance)
- 보안성(Security)
- 사용편의성(Usability)
- 시험용이성(Testability)
□ 코드의 종류 ☆
종류 |
설명 |
순차코드 |
일정한 기준에 따라 순서대로 일련번호 부여 |
완전 순차코드 |
일정 간격으로 비어있는 번호를 부여 |
구분 순차코드 |
몇 개의 블록으로 나누어 각 블록에 의미를 갖게 부여 |
십진 분류 코드 |
10진으로 분류하고, 다시 10진으로 분류 |
그룹 분류 코드 |
대분류, 중분류, 소분류 등으로 구분하는 방식 |
표의 숫자 코드 |
중량, 면적, 용량, 거리 등을 코드화하는 방식 |
연상 코드 |
코드값을 보면 대상을 연상활 수 있는 코드 부여 |
합성 코드 |
두 개 이상의 코드를 조합하여 만든 코드 |
□ 요구사항 명세 기법 ☆
- 정형 명세
- 수학, 논리학
- 명세 오류 및 모호성 쉽게 파악
- 어렵고 시간 소모가 많음
- 비정형 명세
- 자연어, 그림 중심
- 사용자-개발자 의사전달이 용이
- 모호함
□ 정형 기술 컴토(FTR)의 지침 ☆
- 의제와 그 범위를 유지
- 참가자의 수를 제한
- 각 체크리스트를 작성하고, 자원과 시간 일정을 할당
- 개발자가 아닌 제품의 검토에 집중.
- 논쟁과 반박을 제한
- 검토 과정과 결과를 재검토
□ UI(User Interface)에서 사용자 동작 ☆
- 클릭(Click) : 마우스나 터치스크린을 사용하여 특정 버튼, 링크, 아이콘 등을 선택할 때 발생하는 동작\
- 탭(Tap) : 터치스크린에서 손가락으로 화면을 가볍게 누르는 동작
- 더블 클릭/더블 탭(Double Click/Double Tap) : 짧은 시간 내에 동일한 위치를 두 번 클릭하거나 탭하는 동작
- 드래그(Drag) : 마우스 버튼을 누른 상태로 이동하거나, 터치스크린에서 손가락을 눌러 끌어 이동하는 동작
- 스와이프(Swipe) : 터치스크린에서 손가락을 빠르게 밀어 올리거나, 옆으로 이동시키는 동작.
- 핀치(Pinch) : 두 손가락을 사용하여 화면을 확대하거나 축소하는 동작
□ IPSec(IP security) ☆
- 양방향 암호화를 지원
- ESP는 발신지 인증, 데이터 무결성, 기밀성 모두를 보장
- 운영 모드는 Tunnel 모드와 Transport 모드로 분류
- AH는 발신지 호스트를 인증하고, IP 패킷의 무결성을 보장
- 전송 모드(Transport)는 전송 계층과 네트워크 계층 사이에 전달되는 payload를 보호
- 터널 모드(Tunnel)는 IPSec이 IP 헤더를 포함한 IP 계층의 모든 것을 보호