인터페이스 구현 검증 도구⭐
도구 | 기능 |
xUnit | JAVA(jUnit), C++(CppUnit), .Net(nUnit)와 같이 다향한 언어를 지원하는 단위 테스트 프레임워크 |
STAF | 서비스 호출 및 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크, 분산 환경에 데몬을 사용 |
FitNesse | 웹 기반 테스트케이스 설계, 실행, 결과 확인 등을 지원하는 테스트 프레임워크 |
NTAF | FitNesse의 장점인 협업과 STAF의 장점인 재사용 및 확장성을 통합, NHN(Naver)의 테스트 자동화 프레임워크 |
Selenium | 다양한 브라우저 및 개발 언어를 지원하는 웹 어플리케이션 테스트 프레임워크 |
OSI 7계층 #물데네전세표응 ⭐
계층 | 설명 | 예시 | 프로토콜 | 전송단위 |
물리 계층 | 전기적 신호 변환, 물리적 연결 | 허브, 중계기, 네트워크 어댑터 | RS-232C | 비트(Bit) |
데이터 링크 계층 | 인접 시스템 간 데이터 전송, 동기화, 흐름제어 등 전송 기능 제어 | MAC주소, 브릿지, 스위치 | 이더넷 | 프레임(Frame) |
네트워크 계층 | 단말 간 데이터 전송을 위한 최적의 경로 제공 | 라우터 | IP, ICMP | 패킷(Packet) |
전송 계층 | 신뢰성 있는 통신을 보장, 데이터 분할 및 재조립, 오류 제어 담당 | 방화벽, 프록시 | UDP, TCP | 세그먼트(Segment) |
세션 계층 | 연결 접속 및 동기 제어 | TLS, SSH | 데이터(Data) | |
표현 계층 | 데이터 형식 설정과 부호 교환, 암/복호화 담당 | 인코딩, 암복호화 | JPEG, MPEG | 데이터(Data) |
응용 계층 | 네트워크 간 응용 서비스 연결, 데이터 생성 - 사용자가 실행하는 응용 프로그램 |
Telnet, chrome, Email | HTTP, FTP | 데이터(Data) |
데이터 링크 계층 프로토콜
프로토콜 | 설명 |
HDLC (High-level Data Link Control) |
점대점 방식이나 다중방식 통신에 사용되며, 동기식 비트 중심 |
PPP (Point-to-Point Protocol) |
네트워크 분야에서 두 통신 노드 간의 직접적인 연결 |
ATM (Asynchronous Transport Mode) |
53바이트 셀 단위로 전달하는 비동기식 시분할 다중화 방식의 패킷형 전송 기술 |
네트워크 계층 프로토콜 ⭐
프로토콜 | 설명 |
IP (Internet Protocol) |
송수신 간의 패킷 단위로 데이터를 교환하는 네트워크에서 정보를 주고받는 데 사용 |
ARP (Adress Resolution Protocol) |
IP네트워크상에서 IP주소를 MAC주소(물리주소)로 변환하는 프로토콜 |
RARP (Reverse Address Resolution Protocol) |
서버로부터 IP 주소를 요청하기위해 사용하는 프로토콜 |
ICMP (Internet Control Message Protocol) |
IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜 |
IGMP (Internet Group Managemnet Protocol) |
호스트 컴퓨터와 인접 라우터가 멀티캐스트 그룹 멤버십을 구성하는 데 사용하는 통신 프로토콜 |
라우팅 프로토콜(Routing Protocol) | 데이터 전송을 위해 최적의 경로를 설정해주는 라우터 간의 상호 통신 프로토콜 |
라우팅 프로토콜 ⭐
- 내부 라우팅 프로토콜(IGP)
- OSPF(Oepn Shortest Path First): 자신을 기준으로 링크 상태 알고리즘을 적용하여 최단 경로를 찾는 라우팅 프로토콜
- RIP(Routing Information Protocol): AS(자율시스템)내에서 사용하는 거리 벡터 알고리즘에 기초하여 개발된 내부 라우팅 프로토콜
- 외부 라우팅 프로토콜(EGP)
- BGP(Border Gateway Protocol): AS상호 간에 경로 정보를 교환하기 위한 라우팅 프로토콜
응용계층 프로토콜
프로토콜 명 | 설명 | 포트 |
FTP (File Transfer Protocol) |
TCP/IP를 갖고 서버와 클라이언트 사이의 파일을 전송하기 위한 프로토콜 | 20, 21번 |
SSH (Secure Shell) |
서로 연결되어 있는 컴퓨터 간 원격 명령 실행이나 쉘 서비스 등을 수행, Telent보다 강력한 보안 제공 | 22번 |
Telnet | 인터넷이나 로컬 영역에서 네트워크 연결에 사용되는 네트워크 프로토콜 | 23번 |
SMTP (Simple Mail Transfer Protocol) |
간이 전자 우편 전송 프로토콜 메일 클라이언트가 수신 서버로 메시지를 발송하거나 포워드 할 수 있도록 지원 | 25번 |
HTTP (Hyper Text Transfer Protocol) |
텍스트 기반의 통신구약, 하이퍼텍스트를 빠르게 교환하기 위한 프로토콜 | 80번 |
POP3 (Post Office Protocol Version 3) |
전자메일이 메일 서버에 수신되고 보관되는 단방향 클라이언트 서버 프로토콜이며 전자메일을 검색하는데 사용되는 또다른 프로토콜 - 한 대의 PC에서만 사용할 수 있고 이메일이 실시간으로 동기화되지 않는다 | 110번 |
IMAP (Internet Messaging Access Protocol) |
메일 서버 또는 서비스에서 전자메일 혹은 메시지를 읽어오는 클라이언트/서버 프로토콜 - 여러 디바이스에서 이메일에 동시에 액세스 가능 - 빠르고 효율적인 액세스 지원 - 단일 사서함을 여러 사용자가 함께 공유 가능 | 143번 |
SNMP (Simple Network Managemnet Protocol) |
IP 네트워크 상의 장치로부터 정보를 수집 및 관리하며, 또한 정보를 수정하여 장치의 동작을 변경하는 데에 사용되는 인터넷 표준 프로토콜 | 161번 162번 |
서브넷 마스크 구하는 법
- 최대를 기준으로 구하고 +2를 해준 뒤 2의n제곱을 구해준다.
- ip주소 값 뒤에 서브넷에 대한 명시가 없을 경우 32 - n
- 명시가 있을 경우 +를 해준 뒤 갯수 만큼 1로 만들어주고 10진수로 변환
192.168.0.16/25 -> 25개의 1를 만들어주고 8개씩 끊어서 2진법 변환
11111111.11111111.11111111.10000000 -> 255.255.255.128
192.168.0.16/18
11111111.11111111.11100000.00000000 -> 255.255.224.0
- 예시 더보기
- 서브넷이 최대 25개 IP Address를 필요로 할 때, 서브넷 마스크는?
- 최대 25개를 기준
- 25+2(2는 네트워크주소+브로드캐스트주소) = 27
- 27은 2의 5승에 포함 ( 2의 n승에서 남는 숫자가 가장 적어야 함)
- 5는 호스트 ID 비트 수
- 32-5=27
- /27은 숫자 1의 갯수 11111111.11111111.11111111.11100000 (11111111 = 128 64 32 16 8 4 2 1) = 따라서 서브넷 마스크는 255.255.255.224
- C Class의 네트워크를 서브넷으로 나누어 각 서브넷에 4~5대의 PC를 접속해야 할 때 서브넷 마스크는?
- 최대 5개를 기준
- 5+2 = 7
- 7은 2의 3승에 포함
- 3은 호스트 ID 비트 수
- 32-3=29
- /29는 숫자 1의 갯수 11111111.11111111.11111111.11111000 = 따라서 서브넷 마스크는 255.255.255.248
- C Class 네트워크에서 6개의 서브넷이 필요하다고 할 때 가장 적당한 서브넷 마스크는?
- 최대 6개를 기준
- 2의 n제곱 중 6을 포함하는 가장 낮은 수 = 8
- 2^3 = 8
- ^3만큼 1로 채운 2진수 표현
- 1 1 1 0 0 0 0 0 11111111.11111111.11111111.11100000
- 10진수화 = 따라서 서브넷 마스크는 255.255.255.224
- 10.0.0.0/8인 네트워크에서 115개의 서브넷을 만들기 위해 필요한 서브넷 마스크는?
- /8은 네트워크 ID
- 최대 115개를 기준
- 115+2 = 117
- 117은 2의 7승에 포함 ( 2의 7승은 128)
- 8+7=15 (기존 네트워크 ID + 서브네트워크 ID)
- /15는 숫자 1의 갯수 11111111.11111110.00000000.00000000 = 따라서 서브넷 마스크는 255.254.0.0
- 서브넷이 최대 25개 IP Address를 필요로 할 때, 서브넷 마스크는?
네트워크 주소 구하는법
192.168.0.1/26
이름 | 값 | 설명 |
IP주소 (IP Adrdress) |
192.168.0.1/26 | |
서브넷 마스크 (Subnet Mask) |
192.168.0.1/26 | 서브넷 마스크를 2진법으로 표현 1의 갯수가 26 11111111.11111111.11111111.11000000 → 255.255.255.192 |
네트워크 주소 (Network Address) |
192.168.0.0 | 서브넷 마스크 끝과 ip주소 끝의 수를 2진법 and 연산으로 구하면 된다. 11000000 // 255.255.255.192 // 26 00000001 // 192.168.0.1 // 1 |
와일드카드 (WildCard) |
63 | 전체 주소 크기 - 서브넷 마스크의 크기 255 - 192 |
브로드캐스트 주소 (Broadcast Address) |
192.168.0.63 | 서브넷마스크 뺀 만큼 나머지 // 위와 같음 1111 1111 - 1100 0000 → 10진법 변환 |
총 IP 주소 (Total IP Address count) |
64 | 전체 주소 다 포함 64개 192.168.0.0~64 |
총 할당 가능한 IP주소 (Total Host Address count) |
63 | 192.168.0.1~62 까지 총 62개 네트워크 주소, 브로드캐스트 주소 미포함 |
192.168.0.1/26 // 26은 1의 갯수 8*3 24
서브넷 -> 1111.1111.1111.11000000 -> 255.255.255.192
네트워크-> .1100 0000 and .0000 0001 -> 서브넷 맨끝과 ip주소의 맨 끝을 and연산자 -> 192.168.0.0
host주소 -> 192.168.0.1~62 까지
브로드케스트 -> 192.168.0.63 // 맨 마지막
총 ip 개수 -> 64
총 호스트 ip 개수 -> 62
트랜잭션 # 원일격영 ⭐
- 원자성 : 트랜잭션의 연산은 모두 반영 or 전혀 반영되지 않도록 복구
- 일관성 : 트랜잭션이 성공하면 언제나 일관성있는 데이터 베이스상태로 반환
- 격리성 : 둘 이상의 트랜잭션이 병행 실행되는 경우, 다른 트랜잭션의 연산에 끼어들 수 없다.
- 영속성 : 트랜잭션이 완료된 결과는 영구적으로 반영되어야 한다.
REDO(다시 하다) : 이전 상태로 되돌아간 후 실패가 발생하기 전까지의 과정을 재실행 **재실행**
UNDO(원상태로 돌리다) : 내용을 취소하여 복구 롤백, 변경 취소
일반 집합, 순수 관계 연산자
일반 집합 연산자 | 기호 | 순수 관계 연산자 | 기호 |
합집합(Union) | ∪ | Select | σ |
교집합(Intersection) | ∩ | Project | π |
차집합(Difference) | - | Join | ⋈ |
카티션 프로덕트 (Cartesian Product) |
× | Division | ÷ |
회복 기법 # 지즉체그
- 로그 기반 회복 기법
- 지연 갱신 회복 기법 : 트랜잭션이 완료되기 전까지 반영 x
- 즉각 갱신 회복 기법 : 트랜잭션 수행 중 갱신 결과를 바로 반영
- 체크 포인트 : 검사 점 이후에 처리된 트랜잭션에 대해서만 복원
- 그림자 페이징 : 트랜잭션 수행 시 복제본을 생성하여 장애 시 이를 이용
3A (AAA; Authentication, Authorization, Accounting) ⭐⭐
- 유무선 이동 및 인터넷 환경에서 가입자에 대한 안전하고 신뢰성 있는 인증, 권한 검증, 과금 기능을 체계적으로 제공하는 정보 기술 - 보안은 # 인권계
- 인증(Authentication)
- 권한 부여(Authorization)
- 계정 관리(Accounting)
서버 접근 통제 유형
- 임의적 접근 통제(DAC; Discretionary Access Control) : 주체나 그룹의 신분에 근거하여 객체에 대한 접근을 제한하는 방법 // 닥(DAC) 치고 신분증 내놔
- 강제적 접근 통제(MAC; Mandatory Access Control) : 객체에 포함된 정보의 허용 등급과 접근 정보에 대하여 주체가 갖는 접근 허가 권한에 근거하여 객체에 대한 접근을 제한하는 방법 // Mac Os에서는 설정을 강제적으로 못하게 해
- 역할 기반 접근 통제(RBAC; Role Based Access Control) : 중앙 관리자가 사용자와 시스템의 상호관계를 통제하며 조직 내 맡은 역할(Role)에 기초하여 자원에 대한 접근을 제한하는 방법
암호 알고리즘 ⭐
대칭 키 알고리즘 | DES, SEED, AES, ARIA, IDEA, LFSR |
비대칭 키 알고리즘 | RSA, ECC, ECDSA, DSA, Diffie-Hellman, ElGamal |
해시 알고리즘 | MD-5, SHA-1/256/384/512, HAS-160, HAVAL |
대칭 키 암호화 알고리즘 ⭐ # 중간에 E가 들어감
알고리즘 | 설명 |
DES (Data Encryption Standard) |
75년 IBM 개발, 64비트 블록 암호화, 56비트 크기로 암호화됨 |
SEED | 99년 KISA 개발128비트 블록의 암호 알고리즘 |
AES (Advanced Encryption Standard) |
2001년 미국 표준 기술 연구소(NIST) → DES의 한계를 느낌, |
ARIA (Academy, Research Institute, Agency) |
2004년 국가정보원과 산학회 학계(Academy), 연구기관(Research Institute), 정부(Agency)의 앞글자 |
IDEA (International Data Encryption Algorithm) |
DES 대체, 스위스 연방기술 기관, 128비트의 키 (PES → IPES → IDEA로 이름이 바뀜) |
LFSR (Linear Feedback Shift Register) |
선형적인 구조 : XOR 연산과 시프트 연산을 이용하여 구현 주기성, 예측 가능성 |
RC4 | 1987년에 개발한 스트림 암호화 알고리즘 비대칭 알고리즘인 RSA와 함께 많이 사용 |
비대칭 키 암호화 알고리즘 ⭐ #앞이 E거나 SA가 들어감
알고리즘 | 설명 |
RSA (Rivest-Shamir-Adleman) |
- 1977년 MIT 개발, 소인수 분해의 난해함 - 메시지 암/복호화 // 세명의 수학자 이름에서 따라 지어짐 |
DSA (Digital Signature Algorithm) |
전자서명, 이산대수의 어려움을 안정성의 바탕으로 개발 |
ECC (Elliptic Curve Cryptography) |
1985년 RSA대안으로 개발/ 비트코인, 이더리움 사용 타원 곡선 암호화, 공개키 암호화 방식 |
디피-헬만 Diffie-Hellman |
최초의 공개키 알고리즘 암호화되지 않은 통신망을 통해 공통의 비밀 키를 공유 |
ElGamal | 1985년 ElGamal이 제안 Diffie-Hellman 알고리즘을 기반 |
해시 알고리즘 ⭐ #HA가 들어감
알고리즘 | 설명 |
MD5 | MD4 개선한 암호화 알고리즘, 파일의 무결성 검사에 사용 |
SHA-1 | 993년 NSA에 미국 정부 표준 지정 |
SHA-256/384/512 | 256비트의 해시값을 생성하는 해시 함수 |
HAS-160 | 국내 표준 서명 알고리즘 |
HAVAL | 메시지를 1024Bits 블록으로 나눔 |
GoF 디자인 패턴 ⭐
- 생성 패턴 # 생빌프로팩앱싱
- 빌더(Builder) : 복잡한 인스턴스를 조립하여 만드는 구조
- 프로토타입(Prototype) : 처음부터 일반적인 원형을 만들어 놓고, 그것을 복사한 후 필요한 부분만 수정하여 사용하는 패턴
- 팩토리 메소드(Factory Method) : 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식
- 추상 팩토리(Abstract Factory) : 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
- 싱글톤(Singleton) : 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴, 한 클래스에 한 객체만 존재하도록 제한
- 구조 패턴 # 구브데퍼플프록컴어
- 브리지(Bridge) : 기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 패턴
- 데코레이터(Decorator) : 기존에 구현되어 있는 클래스에 필요한 기능을 추가해 나가는 설계 패턴
- 퍼사드(Facade) : 복잡한 시스템에 대하여 단순한 인터페이스를 제공함으로써, 사용자와 시스템 간 또는 여타 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 쉽게하는 패턴
- 플라이웨이트(Flyweight) : 다수의 객체로 생성될 경우 모두가 갖는 본질적인 요소를 클래스 화하여 공유함으로써 메모리를 절약하고, '클래스의 경량화'를 목적으로 하는 패턴, 여러 개의 '가상 인스턴스'를 제공하여 메모리 절감
- 프록시(Proxy) : '실제 객체에 대한 대리 객체'로 실제 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 만들며, 이 점을 이용해서 미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 할당하게 하여 메모리 용량을 아낄 수 있으며, 실제 객체를 드러나지 않게하여 정보 은닉의 역할도 수행하는 패턴
- 컴포지트(Composite) : 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 하는 패턴
- 어뎁터(Adapter) : 기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴
- 행동 패턴 # 행미인이템옵스테비커스트메체......
- 중재자(Mediator) : 중간에 지시할 수 있는 역할을 하는 중재자를 두고, 중재자에게 모든 것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 패턴
- 인터프리터(Interpreter) : 언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 패턴
- 반복자(Iterator) : 컬렉션의 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 방법을 제공하는 디자인 패턴
- 템플릿 메소드(Template Method) : 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴으로 상위 클래스(추상 클래스)에는 추상 메서드를 통해 기능의 골격을 제공하고, 하위 클래스(구체 클래스)의 메서드에는 세부 처리를 구체화하는 방식으로 사용하여 코드 양을 줄이고 유지보수를 용이하게 만드는 특징을 갖는 패턴
- 옵서버(Observer) : 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고, 자동으로 내용이 갱신되는 방법으로, 일대 다의 의존성을 가지며 상호 작용하는 객체 사이에서는 가능하면 느슨하게 결합하는 패턴
- 상태(State) : 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식으로 상태에 따라 다르게 처리할 수 있도록 행위 내용을 변경하여, 변경 시 원시 코드의 수정을 취소할 수 있고, 유지보수의 편의성도 갖는 패턴
- 방문자(Visitor) : 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴으로, 객체의 구조는 변경하지 않으면서 기능만 따로 추가하거나 확장할 때 사용하는 패턴
- 커맨드(Command) : 실행될 기능을 캡슐화함으로써 주어진 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴으로 하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되는 특징을 갖는 패턴
- 전략(Strategy) : 알고리즘 군을 정의하고(추상 클래스), 같은 알고리즘을 각각 하나의 클래스로 캡슐화한 다음, 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴
- 메멘토(Memento) : 클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용하는 패턴으로, Undo 기능을 개발할 때 사용하는 디자인 패턴
- 책임 연쇄(Chain of Responsibility) : 정적으로 어떤 기능에 대한 처리의 연결이 하드코딩 되어 있을 때 기능 처리의 연결 변경이 불가능한데, 이를 동적으로 연결되어 있는 경우에 따라 다르게 처리될 수 있도록 연결한 패턴
UML 다이어그램 # 사관다
사물, 관계, 다이어그램으로 구성되어 있음
- 구조적 / 정적 # 클객컴배복패
- 클래스(Class) : 객체 지향 모델링 시 클래스의 속성 및 연산과 클래스 간 정적인 관계를 표현
- 객체(Object) : 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현
- 컴포넌트(Component) : 시스템을 구성하는 물리적인 컴포넌트와 그들 사이의 의존 관계를 표현
- 배치(Deployment) : 컴포넌트 사이의 종속성을 표현하고, 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현
- 복합체 구조(Composite Structure) : 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현
- 패키지(Package) : 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현
- 행위적 / 동적 # 유시커상활타
- 유스케이스(Usecase) : 시스템이 제공하고 있는 기능 및 그와 관련된 외부 요소를 사용자의 관점에서 표현
- 시퀀스(Sequence) : 객체 간 동적 상호 작용을 시간적 개념을 중심으로 메시지 흐름으로 표현
- 커뮤니케이션(Communication) : 동작에 참여하는 객체들이 주고받는 메시지를 표현하고, 메시지뿐만 아니라 객체 간의 연관까지 표현
- 상태(State) : 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지 표현
- 활동(Activity) : 시스템이 어떤 기능을 수행하는지를 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서대로표현
- 타이밍(Timing) : 객체 상태 변화와 시간 제약을 명시적으로 표현
- 클래스 간의 관계 # 연집복일의실
- 연관(Association) 관계 : 클래스가 서로 개념적으로 연결된 선
- 집합(Aggregation) 관계 : 하나의 객체에 여러 개의 독립적인 객체들이 구성되는 단계
- 복합(Composition) 관계 : 영구적이고 집합 관계보다 더 강한 관계로 구성
- 일반화(Generalization) 관계 : 상속 관계, 부모와 자식으로 구성된 관계
- 의존(Dependency) 관계 : 하나의 클래스가 또 다른 클래스를 사용하는 관계
- 실체화(Realization) 관계 : 추상 클래스나 인터페이스를 상속받아 자식 클래스가 추상 메서드를 구현할 때 사용
응집도 # 우논시절 통순기 ⭐
- 우연적 응집도(Coincidental Cohesion) : 모듈 내부의 각 구성요소가 연관이 없을 경우의 응집도
- 논리적 응집도(Logical Cohesion) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도
- 시간적 응집도(Temporal Cohesion) : 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도
- 절차적 응집도(Procedural Cohesion) : 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도
- 통신적 응집도(Communication Cohesion) : 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도
- 순차적 응집도(Sequential Cohesion) : 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도
- 기능적 응집도(Functional Cohesion) : 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도
결합도 # 내공외제스자 ⭐
- 내용 결합도(Content Coupling) : 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도
- 공통 결합도(Common Coupling) : 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호 작용하는 경우의 결합도
- 외부 결합도(External Coupling) : 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜 또는 디바이스 인터페이스를 공유할 경우의 결합도
- 제어 결합도(Control Coupling) : 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우의 결합도
- 스탬프 결합도(Stamp Coupling) : 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도
- 자료 결합도(Data Coupling) : 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어난 경우의 결합도
소프트웨어 개발 – 보안 – 보안의 3대요소 # 기무가
- 기밀성(Confidentiality) : 인가된 사용자만 시스템에 접근가능
- 무결성(Integrity) : 정당한 방법을 따라여만 데이터 변경 가능
- 가용성(availability) : 인가된 사용자는 계속해서 접근 가능
서비스 공격 기법 혹은 해킹 기술
- 랜드어택(Land Attack) : 공격자가 패킷의 출발지 주소나 포트를 임의로 변경해 출발지와 목적지주소를 동일하게 함으로써 공격 대상 컴퓨터의 실행 속도를 느리게 하거나 동작을 마비시켜 서비스 거부 상태에 빠지도록 하는 공격 기법
- 제로데이(Zero Day) : 개발사가 취약점에 대해 아직 알지 못하는(패치가 나오지 않은) 시점에 공격하는 기술
- 랜섬웨어(Ransomeware) : PC에 있는 중요한 자료를 암호화한 후, 복호화 프로그램 제공을 대가로 피해자에게 돈을 지급하도록 강요하는 악성 코드
- APT(지능형 지속 공격; Advanced Persistent Threat) : 다양한 수단을 통한 지속적이고 지능적인 맞춤형 공격으로 특수 목적의 조직이 하나의 표적에 대해 다양한 IT기술을 이용하여 지속적으로 정보를 수집 하고 취약점을 분석하여 피해를 주는 공격 기법
- CSRF(사이트 간 요청 위조; Cross Site Request Forgery) : 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격
- DDoS 분산 서비스 거부 : 여러 대의 공격자를 분산 배치하여 동시에 동작하게 함으로써 특정 사이트를 공격하는 기법
- 크라임웨어(Crimeware) : 온라인 상에서 불법 활동을 조장하기 위해 만들어진 컴퓨터 프로그래밍으로, 공격용 툴킷이라고도 불린다.
- Buffer Overflow : 정해진 메모리의 범위를 넘치게해서 원래의 리턴 주소를 변경시켜 임의의 프로그램이나 함수를 실행시키는 시스템 해킹 기법
- RUDY : 요청 헤더의 Content-length를 비정상적으로 크게 설정하여 메시지 바디 부분을 매우 소량으로 보내 계속 연결 상태를 유지시키는 공격
- 스머핑(Smurfing) : 출발지 주소를 공격대상의 ip로 설정해 네트워크 전체에게 ICMP Echo 패킷을 브로드캐스팅하여 외부의 ICMP Echo Reply(Ping 응답)를 발생 시킴으로써 희생자에게 대량의 트래픽을 발생시켜 마비시키는 DoS 공격으로 바운스 사이트라고 불리는 제3의 사이트를 이용한 공격 기술이다. // 스머프들이 대량의 핑을 발생 시켜 트래픽 마비 시키는 공격 기법
- IP 스푸핑(IP Spoofing) : 공격자가 자신의 인터넷 프로토콜(IP) 주소를 변조하거나 속여서 접근 제어 목록(ACL)을 우회하거나 회피하여 공격하는 것으로, 변조된 IP주소를 이용하여 DoS나 연결된 세션을 차단하여 공격에 대한 추적을 어렵게 만드는 공격 기술
- 스니핑(Sniffing) : 공격 대상에게 직접 공격하지 않고 데이터만 몰래 들여다 보는 수동적 공격 기법으로, 네트워크 중간에서 남의 패킷 정보를 도청하는 해킹 유형 // 직접 공격x # 스나이퍼
- 허니팟(Honeypot) : 정보시스템의 침입자를 속이는 기법의 하나로, 가상의 정보시스템을 만들어 놓고 실제로 공격을 당하는 것처럼 보이게 하여 해커나 스팸, 바이러스를 유인하여 침입자들이 정보를 수집하고 추적하는 역할을 수행
- Brute-Force Attack(무차별 대입 공격) : 모든 가능한 문자의 조합을 시행하고 틀리면 다른 문자를 적용해보는 반복에 의해 시도 되는 침입방법으로, 네트워크 보안을 점검하기 위한 용도로 사용되는 공격 기법
- Ping Flood : 특정 사이트에 매우 많은 ICMP Echo를 보내면, 이에 대한 응답을 하기 위해 시스템 자원을 모두 사용해 버려 시스템이 정상적으로 동작하지 못하도록 하는 공격 기법
- Evil Twin(이블 트윈) : 무선 Wifi 피싱 기법으로 공격자는 합법적인 Wifi 제공자처럼 행세하며 노트북이나 휴대전화로 핫스팟에 연결한 무선 사용자들의 정보를 탈취하는 무선 네트워크 공격 기법
- 크로스사이트 스크립팅(XSS; Cross Site Scripting) : 네트워크를 통한 컴퓨터 보안 공격의 하나로, 웹 페이지의 내용을 사용자 브라우저에 표현하기 위해 사용되는 스크립트의 취약점을 악용한 해킹 기법
- SYN Flooding : 3-way-handshake 과정을 의도적으로 중담시킴으로써 서버가 대기 상태에 놓여 정상적인 서비스를 수행하지 못하게 하는 공격 방법
- TearDrop : Offset 값을 변경시켜 수신 측에 과부하를 발생시킴으로써 시스템이 다운되도록 하는 공격 방법
- 워터링 홀 (Watering Hole) : **자주 사용하는 웹 사이트(물웅덩이)**를 추측하거나 관찰해 이들 중 하나 이상을 악성코드로 감염시키는 컴퓨터 공격 전략이고, 정보를 찾는 해킹은 특정 IP 주소에서 오는 사용자만 공격할 수 있다. 이것은 또한 해킹을 탐지하고 연구하기 어렵게 만든다. 물웅덩이 근처에서 먹이를 공격할 기회를 기다리는 자연계의 포식자들로부터 유래된 이름이다.
블랙박스 테스트 # 동경원오비
- 동등 분할(Equivalence Partitionning) : 정상, 비정상 균등하게 테스트 맞는 결과 확인
- 경계 값 분석(Boundry Value Analysis) : 경계값을 테스트하는 기법
- 원인-결과 그래프(Cause-Effect Graphing) : 입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석 후 효용성이 높은 테스트를 하는 기법
- 오류 예측(Error Guessing) : 과거의 경험이나 확인자의 감각으로 테스트
- 비교검사(Comparison) : 동일한 테스트를 여러 버전의 프로그램에 적용하여 동일한 결과 확인
화이트박스 테스트 # 기조루데
- 기초경로 검사(Base Path Testing) : 수행 가능한 모든 경로를 테스트
- 조건 검사(Condition Testing) : (각 분기의) 결정 포인트 내의 각 개별 조건식이 적어도 한 번은 참과 거짓의 결과가 되도록 수행
- 루프 검사(Loop Testing) : 반복구조에 초점을 맞춰 실시하는 테스트
- 데이터흐름 검사(Data Flow Testing) : 제어 흐름 그래프에 데이터 사용 현황을 추가한 그래프를 통해 테스트
프로그램 실행 여부에 따른 테스트
- 정적 테스트(Static Test) : 프로그램을 실행하지 않고 명세서나 소스 코드를 대상으로 분석하는 테스트이다.
- 종류 : 워크스루, 인스펙션, 코드 검사 (리뷰 등)
- 동적 테스트(Dynamic Test) : 프로그램을 실행하여 오류를 찾는 테스트로, 소프트웨어 개발의 모든 단계에서 테스트를 수행할 수 있다.
- 종류 : 블랙박스 테스트, 화이트박스 테스트
테스트 기반 (Test Bases)에 따른 테스트
- 명세 기반 테스트 : 사용자의 요구사항에 대한 명세를 빠짐없이 테스트 케이스로 만들어 구현하고 있는지 확인하는 테스트
- 종류 : 동등 분할, 경계 값 분석 등
- 구조 기반 테스트 : 소프트웨어 내부의 논리 흐름에 따라 테스트 케이스를 작성하고 확인하는 테스트이다.
- 종류 : 구문 기반, 결정 기반, 조건 기반 등
- 경험 기반 테스트 : 유사 소프트웨어나 기술 등에 대한 테스터의 경험을 기반으로 수행하는 테스트이다.
- 종류 : 에러 추정, 체크 리스트, 탐색적 테스팅
시각에 따른 테스트
- 검증(Verification) 테스트 : 개발자의 시각에서 제품의 생산 과정을 테스트하는 것으로, 제품이 명세서대로 완성됐는지를 테스트한다.
- 확인(Validation) 테스트 : 사용자의 시각에서 생산된 제품의 결과를 테스트하는 것으로, 사용자가 요구한대로 제품이 완성됐는지, 제품이 정상적으로 동작하는지를 테스트한다.
목적에 따른 테스트
테스트 명 | 설명 |
회복(Recovery) | 테스트 시스템에 여러 가지 결함을 주어 실패하도록 한 후 올바르게 복구되는 지를 확인하는 테스트 |
안전(Security) 테스트 |
시스템에 설치된 시스템 보호 도구가 불법적인 침입으로부터 시스템을 보호할 수 있는지를 확인하는 테스트 |
강도(Stress) 테스트 |
시스템에 과도한 정보량이나 빈도 등을 부과하여 과부화 시에도 소프트웨어가 정상적으로 실행되는지를 확인하는 테스트 |
성능(Performance) 테스트 |
소프트웨어의 실시간 성능이나 전체적인 효율성을 진단하는 테스트로, 소프트웨어의 응답 시간, 처리량 등을 테스트 |
구조(Structure) 테스트 |
소프트웨어 내부의 논리적인 경로, 소스 코드의 복잡도 등을 평가하는 테스트 |
회귀(Regression) 테스트 |
소프트웨어의 변경 또는 수정된 코드에 새로운 결함이 없음을 확인하는 테스트이다. |
병행(Parallel) 테스트 |
변경된 소프트웨어와 기존 소프트웨어에 동일한 데이터를 입력하여 결과를 비교하는 테스트 |
테스트 오라클(Test Oracle) # 참샘휴일 ⭐⭐
- 참 오라클 : 모든 입력값에 대하여 기대하는 결과를 생성함으로써 발생된 오류를 모두 검출
- 샘플링 오라클 : 특정한 몇 개의 입력값에 대해서만 기대하는 결과를 제공
- 휴리스틱 오라클 : 샘플링 오라클을 개선한 오라클로, 특정 입력값에 대해 올바른 결과를 제공하고 나머지 값들에 대해서는 휴리스틱(추정)으로 처리
- 일관성 검사 오라클 : 애플리케이션 변경이 있을 때 수행 전과 수행 후의 결과값이 동일한지 확인
개발 단계에 따른 애플리케이션 테스트
테스트 명 | 설명 | 비고 |
단위 테스트 (Unit Test) |
모듈 테스트라고도 불리며, 사용자의 요구사항을 기반으로 한 기능성 테스트를 최우선으로 수행한다. | 명세기반, 구조기반 |
통합 테스트 (Integration Test) |
통합 테스트는 단위 테스트가 완료된 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정의 테스트.통합 테스트는 모듈 간, 또는 통합된 컴포넌트 간의 상호 작용 오류를 검사한다. | 상향식(드라이버), 하향식(스텁) |
시스템 테스트 (System Test) |
해당 컴퓨터 시스템에서 완벽하게 수행하는지를 점검 | 기능적(블랙), 비기능적(화이트) |
인수 테스트 (Acceptance Test) |
소프트웨어가 사용자의 요구사항을 충족하는지에 중점을 두고 테스트 | 알파, 베타 |
스케줄러 종류
비선점형 | 한 프로세스가 CPU를 할당 받으면 작업 종료 전까지 다른 프로세스는 CPU점유 불가능한 스케줄링 |
FCFS (First Come First Service) |
프로세스가 대기 큐에 도착한 순서에 따라 CPU할당=FIFO |
SJF (Shortest Job First) |
가장 짧은 작업부터 수행, 평균 대시 시간 최소화. 기아현상 발생 |
우선순위 (Priority) |
프로세스별 우선순위에 따라 CPU 할당 |
기한부 (Deadline) |
작업들이 명시된 기한 내에 완료되도록 계획 |
HRN (Highest Response Ratio Next) |
대기 중인 프로세스 중 현재 응답률이 가장 높은 것을 선택, 기아현상 최소화 기법 |
선점형 | 우선순위가 높은 프로세스가 CPU를 점유하는 스케줄링 |
SRT (Shortest Remaining Time First) |
가장 짧은 시간이 소요되는 프로세스를 먼저 수행 |
라운드 로빈 (RR; Round Robbin) |
각 프로세스마다 CPU를 사용할 수 있는 최대시간(time quantum)을 부여하여 최대시간이 끝나면 우선순위가 밀려나는 스케쥴링 |
다단계 큐 (Multi Level Queue) |
여러 개의 큐를 이용하여 상위단계 작업에 의한 하위단계 작업이 선점 |
다단계 피드백 큐 (Multi Level Feedback Queue) |
큐마다 서로 다른 CPU시간 할당량을 부여, FIFO+라운드 로빈 스케줄링 기법 혼합 |
관계형 데이터베이스의 Relation 구조
- 튜플 ⇒ 카디널리티 (Cardinality) 또는 기수, 대응수 // 한 로우(row), 로우를 말함
- 속성 ⇒ 디그리(Degree) 또는 차수 // 한 컬럼(열), 컬럼을 말함
피터 첸 표기법
페이지 교체 기법
기법 | 설명 |
FIFO (First In First Out) |
First In First Out 단순하게 가장 먼저 들어온 페이지를 내리고 새 페이지로 교체 |
OPT (OPTimal Replacement) |
앞으로 가장 오랫동안 사용하지 않을 것 같은 페이지를 내리고, 해당 공간에 새 페이지를 올리는 방식 |
LRU (Least Recently Used) |
가장 오래 전에 참조된 페이지를 교체하는 방법이다. 가장 많이 사용되는 페이지 교체 알고리즘 |
LFU (Least Frequently Used) |
가장 적게 사용된 페이지를 교체하는 방법 |
NUR (Not Used Recently) |
최근에 사용하지 않은 페이지부터 교체하는 방법 |
빌드 자동화 도구
이름 | 설명 |
Jenkins | - JAVA 기반의 오픈소스 형태 - 서블릿 컨테이너에서 실행되는 서버 기반 - 분산 빌드나 테스트 가능 |
Gradle | - Groovy를 기반으로 한 오픈 소스 형태 |
Maven | - 라이브러리, 프로젝트 구조, 의존성 관리 등을 지원 - 자바 프로젝트 빌드 도구 |
Ant | - XML 기반의 빌드 스크립트를 작성하여 자바 프로젝트의 빌드, 배포, 테스트 등을 자동화할 수 있다. |
Make | - Unix 계열에서 사용하는 빌드 도구 - 의존성 관리 및 수정된 파일만 재빌드하는 기능 등 제공 |
언어별 유명 프레임워크
언어 | 프레임워크 |
JAVA | Spring |
Python | Django |
Ruby | Ruby on Rails |
PHP | Laravel |
C | CMake |
C++ | Qt, Boost, MFC |
Swift | SwiftUI |
기타 참고
- 맵리듀스 : 구글에서 대용량 데이터 처리를 목적으로 제작한 SW프레임워크
- 하둡 : 상용 하드웨어의 클러스터에 방대한 데이터 세트를 분산할 수 있는 프레임워크
- 자료 사전 표기법
- 정의 = ' = ' / 구성 = ' + ' / 반복 = ' {} ' / 선택 = ' [ ] ' / 생략 = ' () '
- TCP(Transmission Control Protocol): 신뢰성 보장, 연결 지향적 특징, 흐름 제어, 혼잡 제어
- UDP(User Datagram Protocol): 비신뢰성, 순서화되지 않은 데이터그램 서비스 제공, 실시간 응용 및 멀티캐스트 가능, 단순 헤어
- 프레임 릴레이: ISDN을 사용하기 위한 프로토콜로서 ITU-T에 의해 표준으로 작성
- ATM(Asynchronous Transfer Mode): 비동기 전송모드, 광대역 전송에 쓰이는 스위칭 기법
- X.25: 통신을 원하는 두 단말장치가 패킷 교환망을 통해 패킷을 원활히 전달하기 위한 통신 프로토콜
- 서킷 교환 방식(Circuit Switching): 네트워크 리스소를 특정 사용층이 독접하도록 하는 통신 방식
- 애드 혹 네트워크(Ad-hoc Network): 노드들에 의해 자율적으로 구성되는 기반 구조가 없는 네트워크 // mobile 네트워크라고 불림
언어 | 특징 |
JavaScript (자바스크립트) |
웹페이지의 동작을 제어하는 데 사용되는 클라이언트용 스크립트 언어로, 클래스가 존재하지 않으며 변수 선언도 필요 없음 ★ |
ASP (Active Server Page) |
서버 측에서 동적으로 수행되는 페이지를 만들기 위한 언어, Microsoft 제작 → Windows계열에서만 수행 가능 |
JSP (Java Server Page) | - JAVA로 만들어진 서버용 스크립트 - 다양한 운영체제에서 사용 가능 |
PHP (Professional Hypertext Preprocessor) | - 서버용 스크립트 언어로 C, JAVA 등과 문법이 유사함 - LINUX, UNIX, Windows 운영체제에서 사용 가능 |
Python (파이썬) | - 다양한 플랫폼에서 쓸 수 있고, 라이브러리(모듈) 풍부 - 유니 코드 문자열을 지원하여 다양한 언어의 문자 처리 - 들여쓰기를 사용하여 블록을 구분하는 문법 채용 ★ - 다른 언어의 모듈들을 연결하는 대화형 인터프리터 언어 |
Perl(펄) | - 인터프리터 방식의 프로그래밍 언어 - 실용성을 모토로 하고 있는 스크립트 언어로, 강력한 문자열 처리 기능 제공 |
소프트웨어 아키텍처 비용 평가 모델
- SAAM(Software Architecture Analysis Method) : 변경 용이성과 기능성에 집중, 평가가 용이하며 경험이 없는 조직에서도 활용 가능한 비용 평가 모델
- ATAM(Architecture Trade-off Analysis Method) : 아키텍처 품질 속성을 만족시키는지 판단 및 품질 속성들의 이해 상충관계까지 평가하는 모델
- CBAM(Cost Benefit Analysis Method) : ATAM 바탕의 시스템 아키텍처 분석 중심으로 경제적 의사결정에 대한 요구를 충족하는 비용 평가 모델
- ADR(Active Design Review) : 소프트웨어 아키텍처 구성요소 간 응집도를 평가하는 모델
- ARID(Active Reviews for Intermediate Designs) : 전체 아키텍처가 아닌 특정 부분에 대한 품질요소에 집중하는 비용 평가 모델
인덱스 종류 # 순해비 함단결클
- 순서 인덱스(Ordered Index) : 데이터가 정렬된 순서로 생성되는 인덱스
- 해시 인덱스(Hash Index) : 해시 함수에 의해 직접 데이터에 키 값으로 접근하는 인덱스
- 비트맵 인덱스(Bitmap Index) : 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스
- 함수기반 인덱스(Functional Index) : 수식이나 함수를 적용하여 만든 인덱스
- 단일 인덱스(Singled Index) : 하나의 컬럼으로만 구성한 인덱스
- 결합 인덱스(Concatenated Index) : 두 개 이상의 컬럼으로 구성한 인덱스
- 클러스터드 인덱스(Clustered Index) : 기본 키(PK) 기준으로 레코드를 묶어서 저장하는 인덱스
파티션(Partition) # 레해리컴라
- 레인지 파티셔닝(Range Partitioning) : 연속적인 숫자나 날짜를 기준으로 하는 파티셔닝 기법
- 해시 파티셔닝(Hash Partitioning) : 파티션 키의 해시 값에 의한 파티셔닝 기법
- 리스트 파티셔닝(List Partitioning) : 특정 파티션에 저장 될 데이터에 대한 명시적 제어가 가능한 파티셔닝 기법
- 컴포지트 파티셔닝(Composite Partitioning) : 레인지 파티셔닝, 해시 파티셔닝, 리스트 파티셔닝 중 2개 이상의 파티셔닝을 결합하는 파티셔닝 기법
- 라운드로빈 파티셔닝(Round-Robin Partitioning) : 라운드로빈 분할로 회전하면서 새로운 행이 파티션에 할당되는 방식
'License > 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] 스크럼(Scrum) 정리 및 역할 설명 (0) | 2023.07.19 |
---|---|
[정보처리기사 실기] 스케줄러 / 크론 표기법 정리 및 보는 (0) | 2023.07.19 |
[정보처리기사 실기] OSI 7계층과 TCP/IP4계층 & 계층 프로토콜 (0) | 2023.07.19 |
[정보처리기사 실기] 2023년 1회 정보처리기사 기출 문제 (0) | 2023.07.03 |
[정보처리기사] 2023년도 기사 시험 일정 (0) | 2023.06.29 |