1. 소프트웨어 설계
HIPO CHART
- 시스템 분석 및 설계, 입력/처리/출력의 기능
- 하향식 소프트웨어
- 가시적(도식) 도표: 트리구조
- 총체적(총괄, 개요) 도표: 입력/처리/출력
- 세부적(상세) 도표: 기본 요소
클래스 다이어그램의 요소
- Operation: 클래스의 동작
- Message: 메시지를 통해 활동
UML - 구조적(정적) 다이어그램
- 클래스 다이어그램: 이름, 속성, 메소드 / 정적
- 컴포넌트 다이어그램
- 객체 다이어그램
- 컴포지트 구조 다이어그램
- 배치 다이어그램
- 패키지 다이어그램: 그룹화
UML - 행위(동적) 다이어그램
- 활동 다이어그램
- 유스케이스 다이어그램: 액터, 사용자 관점
- 상태 다이어그램
- 시퀀스 다이어그램: 순차다이어그램, 시간적 흐름에따른 메시지 교환
- 커뮤니케이션 다이어그램
- 인터렉션 오버뷰 다이어그램
- 타이밍 다이어그램
클래스
- 공통된 속성과 연산(행위)을 갖는 객체의 집합
- 클래스에 속한 각각의 객체를 인스턴스라고 함
- 동일 클래스에 속한 각각의 객체들은 공통된 속성과 행위를 가지고 있음
협약에 의한 설계(Design by Contract): 클래스의 명확한 인터페이스 명세를 위해서 선행, 결과, 불변 조건을 기술하는 설계 방법
- 선행 조건(precondition): 클래스 인터페이스 호출 전 사용자가 만족시켜야하는 제약 조건 기술
- 결과 조건(postcondition): 클래스 인터페이스 통해 연산 수행된 후에 만족시켜야 하는 조건 기술
- 불변 조건(invariant): 클래스 내부에서 수행되는 동안 항상 만족해야하는 조건 기술
소스코드 품질 분석
- 동료 검토(PEER REVIEW) : 2~3명 진행
- 워크 스루: 검토 자료를 회의 전 배포, 사전검토, 짧은 시간
- 인스펙션: 공식적 검사회의, 작업자 외 다른 전문가가 검사
-> 리팩토링 진행
Encapsulation: 속성과 관련된 연산을 클래스 안에 묶어서 하나로 취급하는 것을 의미하는 객체지향 개념
익스트림 프로그래밍(XP)
- 애자일 방법론: XP, 스크럼, FDD, 크리스탈, 린
- XP? 의사선생님 약주실때 피존용기에 담아주세요
- 의사소통
- 피드백
- 존중
- 용기
- 단순성
- 객체지향에서 많이 쓰임
- 애자일 방법론: 잦은 변화, 문서보다는 소프트웨어/소스코드 중심
FEP(Front End Processor, 전치프로세서)
- 입력되는 데이터를 컴퓨터의 프로세서가 처리하기 전에 미리 처리하여 프로세서가 처리하는 시간을 줄여주는 프로그램이나 하드웨어
GoF(Gang of Four)
- 생성, 구조, 행동 패턴
- 생성: builder
- 구조: adapter, bridge, proxy
- 행위: 반복적으로 사용되는 객체들의 상호작용을 패턴화, 결합도, 알고리즘이나 책임 분배에 관련된 패턴 / 책임연쇄(Chain of Responsibility), 인터프리터(Intrepreter)
소켓(Socket) 기술: 통신을 위한 프로그램을 생성하여 포트를 할당하고, 클라이언트의 통신 요청 시 클라이언트와 연결하는 내외부 송수신 연결기술
CASE(Computer Aided Software Engineering): 소프트웨어 개발 시, 사용되는 분석 자동화 도구
- 그래픽 지원
- 소프트웨어 생명 주기 전반적인 단계의 연결
- 다양한 소프트웨어 개발 모형을 지원
순차코드(Sequence Code): 자료의 발생 순서, 크기 순서 등 일정 기준에 따라 순서대로 일련 번호를 부여하는 방식, 일련 번호 코드 (e.g. 1, 2, 3...)
객체지향 설계(SOLID)
- 단일 책임 원칙(Single responsibility principle): 하나의 클래스는 하나의 기능만 수행해야 한다
- 개방-폐쇄 원칙(Open/closed principle): 수정에는 닫혀있고, 확장에는 열려있음
- 리스코프 치환 원칙(Liskov substitution principle): 하위 클래스는 상위 클래스를 대체할 수 있다
- 인터페이스 분리 원칙(Interface segregation principle): 쓰지 않는 인터페이스와 연결하지 마라
- 의존관계 역전 원칙(Dependency inversion principle): 자주 바뀌는데에는 의존하지 마라
분산 시스템 미들웨어
- RPC, MOM, WAS, ESB, TP MONITOR, DB, ORB
- 어플-어플, 어플-사용자
파이프필터 아키텍처
- 단방향
- 모든 필터 이동 시에는 오버헤드가 발생
럼바우(격동기!)
- 객체: 객체 다이어그램
- 동적: 상태 다이어그램
- 기능: DFD(자료 흐름도)
2. 소프트웨어 개발
인수 테스트(Acceptance Test)
- 개발한 소프트웨어가 사용자의 요구사항을 충족하는가 테스트
- 사용자가 테스트
- 사용자 인수 테스트
- 운영상의 인수 테스트
- 계약 인수 테스트
- 규정 인수 테스트
- 알파 테스트
- 베타 테스트
인터페이스 구현 검증 도구
- 인터페이스 동작 상태를 확인하기 위해 인터페이스 단위 기능과 시나리오 등을 기반으로 하는 통합테스트가 필요
- 통테는 자동화 도구를 이용하면 효율적, 그 도구가 인터페이스 구현 검증 도구
- xUnit
- STAF: 서비스 호출, 컴포넌트 재사용, 다양한 환경, 데몬
- fitNesse
- NTAF
- Selenium
- watir
제어흐름그래프 복잡도
- 화살표수 - 노드수 + 2
선택정렬(selection sort)
- n개의 레코드 중에서 최소값을 찾아 첫번째 레코드 위치에 놓고, 나머지 중에서 다시 최소값을 찾아 두번째 레코드 위치에 놓는 방식
Alien 코드
- 아주 오래되거나 참고문서 또는 개발자가 없어 유지보수 작업이 어려운 프로그램
prefix
- 전위표기법, 연산자/변수/변수
infix
- 중위표기법, 변수/연산자/변수
postfix
- 후위표기법, 변수/변수/연산자
(e.g. 34*56*+ => 3*4 + 5*6 = 42)
소프트웨어 품질목표(= 품질 평가 기준항목)
- Correctness, 정확성: 사용자의 요구기능을 충족시키는 정도
- Reliability, 신뢰성: 요구된 기능을 오류없이 수행하는 정도
- Efficiency, 효율성: 요구된 기능을 수행하기 위한 시스템 능력과 필요한 자원의 소요 정도
- Portability, 이식성: 다양한 하드웨어 환경에서도 운용 가능하도록 쉽게 수정할 수 있는 정도
- Integrity, 무결성: 허용되지 않는 사용이나 자료의 변경을 제어하는 정도
- Usabillity, 유용성: 쉽게 사용할 수 있는 정도
- Flexibillity, 유연성: 새로운 요구사항에 맞게 얼마만큼 쉽게 수정할 수 있는지의 정도
- Reusabillty, 재사용성: 이미 만들어진 프로그램을 다른 목적으로 사용할 수 있는지의 정도
- Interoperabillty, 상호운용성: 다른 소프트웨어와 정보를 교환할 수 있는 정도
개발단계에 따른 애플리케이션 테스트
- 개발단계: 요구사항 > 분석 > 설계 > 구현
- 테스트 과정: 단테 > 통테 > 시스템테스트 > 인수테스트
단위테스트
- 구현 단계에서 각 모듈 개발 완료 후, 개발자가 명세 내용대로 테스트
- 모듈 내부를 볼 수 있는 구조적 테스트
하네스도구?
- 테스트 드라이버?: 필요한 데이터를 인자를 통하여 넘겨주고 테스트가 완료된 후 결과 값을 받는 역할
- 테스트 스텁?: 테스트할 모듈이 호출할 때 인자를 통해 받은 값을 수행한 후, 결과를 모듈에 넘겨주는 역할
테스트 드라이버
- 시험/임시 모듈 호출하는 간이 소프트웨어
- 상향식
- 매개변수 전달, 결과 보여줌
자료구조 종류
- 선형: 큐, 데크, 리스트, 스택
- 비선형: 트리, 그래프
검증(Verification)과 확인(Validation)
- 검증: 개발자
- 확인: 사용자
형상관리 절차(식도감기!)
- 식별 > 통제 > 감사 > 기록
형상관리
- 소프트웨어 개발 과정에서 발생하는 '모든 변경'을 관리
- 모든 문서가 형상관리 대상
- 도구: CVS, SVN, GIT
트리 구조
- B트리(2-3트리, 레드블랙트리): index 트리, 효율 짱
- AVL 트리: 균형을 맞춘 트리, 효율 짱
- 이진탐색트리: 최악의 경우가 있음
전위순회
- 부모먼저
중위순회
- 왼쪽자식먼저, 부모를 중간에
후위순회
- 부모나중에
3. 데이터베이스 구축
트랜잭션의 상태
- PARTIALLY COMMITTED: 마지막 연산이 실행된 직후의 상태, 연산의 처리는 끝났지만, 최종 결과를 데이터베이스에 반영하지 않은 상태
- 활동 -> (부분 완료 -> 완료) / (실패 -> 철회)
트랜잭션 특성
- ISOLATION(독립성): 동시에 병행 실행되는 경우 다른 트랜잭션 연산이 끼어들 수 없음
- CONSISTENCY(일관성): 연산 결과 유지
- DURABILITY(영속성)
- 원자성
데이터베이스 회복(Recovery) 기법
- 로그기반 회복기법: 즉각갱신기법(Immediate), 지연갱신기법(Deferred)
- Check Point 회복기법
- 그림자페이징 회복기법
CREATE TABLE
- DEFAULT
- NOT NULL
- PRIMARY
- UNIQUE
- FOREIGN
- CONSTRAINT
- CHECK
SQL SELECT 구조
- SELECT 속성, *
: DISTINCT(중복제거)
- FROM TABLE
- WHERE(AND/OR)
- GROUP BY 필드
: HAVING (SUM)
- ORDER BY 컬럼 (ASC: 오름차/DESC: 내림차)
정처기 관계해석
- ∀ (거꾸로 A, all)
- A ∈ B A가 B에 속함
- U 합집합
관계대수
- 순수관계 연산자: Select(아톰), Project(파이), Join(리본), Division(나누기)
- 일반집합 연산자: UNION(합집합), INTERSECTION(교집합), DIFFERENCE(차집합), CARTESIAN PRODUCT(교차곱)
해시 분할(Hash Partitioning)
- 해시함수를 적용한 결과 값에 따라 분할
- 특정 파티션에 데이터가 집중되는 범위 분할의 단점 보완
- 데이터를 고르게 분산
- 특정 데이터가 어디에 있는지 판단
SQL문
- UNION: 중복없음
- UNION ALL: 중복 있음
정규형(도부이결다조)
- 이상현상: 삽입이상, 갱신이상, 삭제이상
- 비정규 > 1정규 > 2정규 > 3정규 > BCNF > 4정규 > 5정규
- 1정규형: 도메인이 원자값
- 2정규형: 부분 함수적 종속 제거
- 3정규형: 이행적 함수 종속 제거
- BCNF: 결정자이면서 후보키가 아닌 것 제거
- 4정규형: 다치 종속 제거
- 5정규형: 조인 종속성 이용
병행제어 기법 로킹(Locking)
- 트랜잭션이 접근하고자 하는 데이터를 잠가 다른 트랜잭션이 접근하지 못하도록 하는 병행제어기법
- 로킹 단위: 한번에 로킹할 수 있는 객체의 크기, 필드/레코드/테이블/파일/DB
- 로킹단위가 작아지면 로킹 오버헤드 증가, 병행성 수준 증가, DB 공유도 증가
SQL 명령어
- DDL
- DML: SELECT, UPDATE, INSERT, DELETE
- DCL: GRANT(TO), REVOKE
고가용성 솔루션(HACMP: High Availabillity Cluster Multy Processing)
- 서버와 저장소 등 IT 자원을 묶어 클러스터를 형성하여, 장애 발생 시 자동으로 대처하여 서비스 가용성을 높이는 솔루션
- 2개의 서버를 연결하여 각각 업무를 수행하도록 구현하는 방식이 널리 사용
- 각 시스템 간에 공유 디스크를 중심으로 클러스터링으로 엮어 다수의 시스템을 동시에 연결
- 조직, 기업의 기간 업무 서버 등의 안정성을 높이기 위해 사용
데이터베이스 설계: 개념 > 논리 > 물리
- 개념: ERD
- 논리: 정규화 / JOIN / 트랜잭션, 인터페이스 설계
- 물리: 성능 고려 / 반정규화
관계형 DB 제약 조건 - 무결성
- 개체 무결성: 기본키 NULL값/중복값 가질 수 X
- 도메인 무결성: 속성 값이 정의된 도메인에 속한 값
- 참조 무결성: 외래키 값은 NULL값/참조 릴레이션의 기본키 값, 도메인과 속성 개수가 같아야함
- 사용자 정의 무결성: 사용자가 정의한 제약 조건에 만족
- 데이터 무결성 강화: 특성에 맞는 적절한 무결성을 정의하고 강화
함수 종속
- Y는 X에 함수적 종속이다: X->Y
on delete no action
: 참조되는 테이블의 행을 삭제하려고 할 때, 참조하는 테이블의 행이 존재할 경우 삭제 명령이 수행되지 못하도록 한다.
4. 프로그래밍 언어 활용
OSI-7 계층 (응표세전네데물)
1. 응용계층
2. 표현계층
3. 세션계층
4. 전송계층
5. 네트워크계층
6. 데이터링크 계층
7. 물리계층
표현 계층
- 코드 변환, 데이터 암호화/압축, 구문 검색, 정보 형식 변환
Malloc() 함수
- 힙(heap) 영역의 메모리를 할당
- 사용 후 반드시 free() 함수를 통해 메모리 해제
C: 문자열 처리 함수
- strlen: 길이
- strcpy(s1,s2): s2를 s1으로 복사
- strcmp(s1,s2): s1, s2 비교
- strrev: 거꾸로
- strcat(s1,s2): s1, s2 연결
결합도(약할수록 좋음) (테스형쟤왜저래공유랑내가)
- 자료(데이터) 결합도(가장 약함)
- 내용 결합도(가장 강함)
응집도(강할수록 좋음) (우리놀던시절통통한순대기가막혀)
- 기능적 응집도(가장 강함)
- 우연적 응집도(가장 약함)
자바 접근제어자
- public, protected, default, private
아스키코드
- A는 65임
a|b - 이진수표기로 계산
ARQ(Automatic Repeat reQuest)
- Stop-And-Wait
- Go-back-N
- Selective Repeat
- Adaptive(적응형)
파이썬: range(12): 0부터 11
페이지 교체 알고리즘
- FIFO
- OPT(OPTIMAL)
- LRU
- LFU
- NUR
- SCR
2차기회 페이지 교체 알고리즘(FIFO 변형 알고리즘)
- FIFO 방식으로 페이지를 교체하지만 특정 페이지에 접근하여 페이지 부재없이 성공할 경우 해당 페이지를 큐의 맨 뒤로 이동하는 기법
파일 디스크립터(File Descriptor)
- 파일 관리를 위해 시스템이 필요로 하는 정보를 가지고 있다
- 보조기억장치에 저장되어있다가 파일이 개방되면 주기억 장치로 이동
- 운영체제에서 알아서 만들어줌
- = 파일제어블록(File Control Block)
Python언어의 3차원 리스트
: [레이어][행][열]
- ex) a = [[[1,2], [3,4], [5,6]], [[7,8], [9,10], [11,12]]]
5. 정보시스템 구축 관리
스토리지
- DAS(Direct Attached Storage): 서버와 저장장치를 전용 케이블로 직접 연결
- NAS: 네트워크
- SAN: 혼합
소프트웨어 비용 산정
COCOMO(Constuctive Cost Model) 모형
- 보헴이 제안, 원시코드 라인 수에 의한 비용 산정 기법
임계경로기법(CPM, Critical Path Method)
- 프로젝트 완성에 필요한 작업을 나열, 소요 기간 예측
- 임계 경로는 최장 경로를 의미
- 선후 관계 명확해야 다음 작업
증발품(Vaporware)
- 판매 계획 또는 배포 계획은 발표되었으나 실제로 고객에게 판매되거나 배포되지 않고 있는 소프트웨어
데이터 마이닝
- 데이터 웨어하우스에 저장된 데이터 집합에서 사용자의 요구에 따라 유용하고 가능성 있는 정보를 발견하기 위한 기법
- 대용량 데이터 분석, 데이터 속 내재되어 있는 변수 사이의 상호 관계를 규명하여 패턴화함으로써 효율적인 데이터 추출
대칭키 기법: AES, SEED, IDEA
비대칭키 기법: ECC(타원곡선 상 이산대수 문제 이용), RSA(소인수 분해 문제), ELGMAL(이산대수 문제 이용), RABIN(소인수분해, 공개키)
인증(Authentication) 유형
- 지식 기반: 기억 / PW
- 소유 기반: 소유 / 토큰
- 생체 기반: 생체 / 지문
- 행위 기반: 행동 / 서명
- 위치 기반: 위치
랜섬웨어
- 문서 파일 등을 암호화하여 사용자가 열지 못하게하는 공격
- 돈을 요구
MQTT
- 사물 통신, 사물 인터넷과 같이 대역폭이 제한된 통신 환경에 최적화하여 개발된 푸시기술 기반의 경량 메시지 전송 프로토콜
- 메시지 매개자(BROKER)를 통해 송신자가 특정 메시지를 발행하고 수신자가 메시지를 구독
- IBM이 주도하여 개발
하둡
- 오픈 소스를 기반으로 한 분산 컴퓨팅 플랫폼
- 일반 PC급 컴퓨터들로 가상화된 대형 스토리지를 형성하고 그 안에 보관된 거대한 데이터 세트를 병렬로 처리할 수 있도록 개발된 자바 소프트웨어 프레임워크
- 구글 / 야후
SSH - TCP 22: 보안이 취약한 단점 보완, 높은 안정성 보장
TLS(Transport Layer Security, 전송 계층 보안)
: 인터넷상에서 데이터의 도청이나 변조를 막기 위해 사용되는 보안 소켓 계층(SSL) 프로토콜 보다 보안성이 강화된 프로토콜
- TLS 1.2 : 2008년 8월에 공개된 버전
- TLS 1.3 : 2018년 8월에 공개된 최신 버전
프로토타입 모형(원형 모형)
- 사용자와 시스템 사이의 인터페이스에 중점
- 요구수집-설계-구축-평가-조정-구현
접근 통제 정책
- 강제적 접근 통제(MAC, Mandatory Access Control): 자원의 보안 레벨과 사용자의 보안 취급 인자를 비교하여 접근 제어
- 임의적 접근통제(DAC, Discretionary Access Control): 자원의 소유권을 가진 사람이 다른 사람의 접근을 허용하거나 제한
- 역할기반 접근 통제(RBAC, Role Based Access Control): 직무, 직책 등 개인의 역할에 따라 결정하여 부여하는 접근 정책
솔트
- 같은 패스워드에 대해 암호화를 수행하더라도 서로 다른 결과
- 덧붙이는 무작위 값
스택가드
- 카나리라고 불리는 무결성 체크용 값을 복귀주소와 변수 사이에 삽입해 두고 버퍼 '오버플로우' 시 카나리 값이 변하게 되면 복귀주소를 호출하지 않는 방법
OWASP(the Open Web Application Security Project)
- 웹 정보 노출이나 악성 코드, 스크립트, 보안이 취약한 부분을 연구하는 비영리 단체
- 보안 취약점 중 보안에 미치는 영향이 큰 것을 기준으로 선정한 10대 웹 어플리케이션 취약점을 3~4년에 한 번씩 발표
허니팟
- 비정상적인 접근을 탐지
- 침입자를 속여 실제 공격을 당하는 것처럼 보여줌
침입탐지 시스템(IDS: Instrusion Detection System)
- 오용 탐지 기법: 이미 발견되고 정립된 공격 패턴을 입력해둠
- 이상 탐지 기법: 조금이라도 이상하게 행동하면 차단
타조: 하둡 기반 데이터웨어 하우스 시스템
원세그: 일본에서 휴대기기를 수신 대상으로 하는 지상 디지털 TV 방송
포스퀘어: 위치기반 소셜네트워크 서비스
텐서플로: 구글에서 공개한 기계 학습을 위한 오픈소스 소프트웨어 라이브러리
클라우드 컴퓨팅 플랫폼(IPS) 아이쿠허리야파스붙이면싹낫겠네
- Iaas(Infrastructure as a Service): 인프라, 장비 빌림
- Paas(Platform~): 개발 환경 빌림
- Saas(Software~): 소프트웨어 빌림
- Baas: 블록체인
무선 메시 네트워크(WMN; Wireless Mesh Network)
: 기존의 유선 망에서 사용하던 메쉬 형태의 네트워크를 무선망에서도 사용하고자 하는 목적에서 만들어진 메쉬 네트워크의 일종으로 메쉬 라우터들과 메쉬 클라이언트라는 노드들로 이루어진 네트워크
페르소나(Persona)
: 개인이 외부에 보여주는 이미지 혹은 가면이며, 사회적 요구에 대한 반응이다.
MDM(Mobile Device Management)
: 휴대폰을 포함한 모바일 장비의 소프트웨어와 기능을 무선으로 제어하는 솔루션
백신(Vaccine)
: 컴퓨터 바이러스 프로그램을 찾아내고 손상된 파일을 치료하는 소프트웨어
VRRP(Virtual Router Redundancy Protocol, 가상 라우터 장애 복구 프로토콜)
: LAN에서 백업 라우터 운용 방법을 제공하는 프로토콜로, LAN에서 라우터에 장애가 발생하면 백업 라우터가 없기 때문에 VRRP를 사용하여 가상 IP 주소를 정하고 주 라우터와 백업 라우터를 정하면, 주 라우터 장애시에 백업 라우터가 주 라우터가 된다.
'[Study] 개발 공부' 카테고리의 다른 글
[React+Vite/TS] Firebase에 인증된 사용자만 접근 가능한 라우트 만들기 (0) | 2024.05.17 |
---|---|
[React+Vite/TS] Firebase 사용하여 이메일/비밀번호로 계정 생성하기 (0) | 2024.05.14 |
정처기 필기 3일 공부해서 합격하기 (0) | 2024.05.13 |
VITE 환경에서의 Firebase 초기화와 .env (0) | 2024.05.02 |
Loading 상태와 컴포넌트 (1) | 2024.05.02 |