정보처리기사
정처기 공부 04/13
문미새
2025. 4. 13. 22:29
728x90
결합도(높은 순 → 낮은 순)
- 내용 결합도(Content Coupling)
- 한 모듈이 다른 모듈의 내부 동작이나 구현을 직접 참조하는 결합도
- 유지보수가 어렵고, 수정이 매우 위험하다.
- 공통 결합도(Common Coupling)
- 전역 변수를 여러 모듈이 함께 사용하는 결합도
- 한 곳의 수정이 모든 곳에 영향을 주고, 디버깅이 어렵다.
- 외부 결합도(External Coupling)
- 외부 환경(파일, DB, 하드웨어 등)에 의존하는 결합도
- 환경 변화에 민감하다.
- 제어 결합도(Control Coupling)
- 함수가 동작 방식까지 외부로부터 제어받는 결합도
- 하나의 함수에 여러 제어가 들어갈 수 있다.
- 스탬프 결합도(Stamp Coupling)
- 필요한 데이터 외에 구조체나 객체 전체를 전달하는 결합도
- 불필요한 의존성이 생길 수 있다.
- 자료 결합도(Data Coupling)
- 모듈 간 필요한 데이터만 주고받는 결합도
- 재사용성이 높고 유지보수 쉽다.
응집도(높은 순 → 낮은 순)
- 기능적 응집도(Functional Cohesion): 오직 하나의 명확한 기능만 수행하는 경우
- 순차적 응집도(Sequential Cohesion): 한 기능의 출력값을 다음 기능의 입력에서 사용할 경우
- 교환적 응집도(Communicational Cohesion): 동일한 입출력을 사용하는 기능들이 묶인 경우
- 절차적 응집도(Procedural Cohesion): 순서에 따라 실행되는 여러 작업이 묶인 경우
- 시간적 응집도(Temporal Cohesion): 같은 시점에 실행되는 작업이 묶인 경우
- 논리적 응집도(Logical Cohesion): 비슷한 성격의 기능이나 특정 형태로 분류되는 요소들이 하나의 모듈에 있는 경우
- 우연적 응집도(Coincidental Cohesion): 관련 없는 기능들이 우연히 같은 모듈에 있는 경우
암호화 알고리즘
대칭키 암호화
- AES(Advanced Encryption Standard): 가장 널리 쓰이는 표준 블록 암호화 알고리즘이며, 보안성과 성능 모두 우수하다.
- DES(Data Encryption Standard): 초기 암호화 알고리즘이며, 현재는 보안이 취약해 거의 사용되지 않는다.
- 3DES: DES를 3번 반복해서 암호화하는 방식으로, DES보단 강력하지만 속도가 느리고 AES보다 성능이 낮다.
- RC4(Rivest Cipher 4): 데이터를 비트 단위로 암호화하는 스트림 암호화 알고리즘이며, 단순하고 빠르지만 예측 가능한 키 값으로 인해 사용되지 않는다.
- RC5(Rivest Cipher 4): 데이터를 고정된 크기로 암호화하는 블록 암호화 알고리즘이며, 유연하고 확장성이 있으나 AES에 밀려서 거의 사용되지 않는다.
비대칭키 암호화
- RSA(Rivest-Shamir-Adleman): 가장 널리 쓰이는 공개키 암호화 알고리즘이며, 소인수분해를 이용해 해독이 까다로워 보안성이 우수하다. 디지털 서명이나 SSL/TLS 등에 사용된다.
- ECC(Elliptic Curve Cryptography): 타원 곡선의 이산 로그 문제를 기반으로 한 암호화 알고리즘이며, RSA보다 짧은 키 길이로 성능이 더 우수하다. 성능이 중요한 모바일이나 IoT, 블록체인 환경에서 사용된다.
- DSA(Digital Signature Algorithm): 디지털 서명 전용 알고리즘이며, 서명 생성과 검증을 분리해서 안전하게 사용이 가능하다. 하지만 잘못된 랜덤 값 사용 시 개인키 유출 위험이 있다.
해시 함수
- SHA-256(Secure Hash Algorithm 256): 256비트의 길이를 가진 암호화 알고리즘이며, 충돌 가능성이 낮고 보안성이 높아 현재 가장 많이 사용된다. 블록체인이나 인증서 등에 사용된다.
- MD5(Message Digest 5): 128비트의 길이를 가진 암호화 알고리즘이며, 속도는 빠르지만 위조 가능성이 높아 충돌이 발생할 수 있어 보안에서 사용하지 않는다.
- SHA-1(Secure Hash Algorithm 1): 160비트의 길이를 가진 암호화 알고리즘이며, MD5보단 낫지만 여전히 보안상의 위험이 있기 때문에 대신 SHA-256을 사용하고 있다.
다이어그램(Diagram)
- 클래스 다이어그램(Class Diagram):
- 클래스들 간의 속성, 메소드, 관계 등을 표현
- 객체 지향 설계에서 사용
- 시퀀스 다이어그램(Sequence Diagram):
- 객체들 간의 시간 순서를 표현
- 객체가 어떤 타이밍에 어떤 요청을 주고 받는지를 시각화
- 유스케이스 다이어그램(Use Case Diagram)
- 사용자와 시스템의 상호작용을 표현
- 시스템이 제공하는 기능을 중심으로 구성
- 활동 다이어그램(Activity Diagram)
- 조건 분기, 반복 등을 표현
- 프로세스 흐름을 도식화
- 상태 다이어그램(State Diagram)
- 객체나 시스템이 가질 수 있는 상태 변화를 표현
- 특정 이벤트에 따라 상태가 어떻게 바뀌는지 시각화
- 컴포넌트 다이어그램(Component Diagram)
- 시스템의 모듈 간 구조를 표현
- 컴포넌트 간 의존성, 인터페이스를 나타냄
- 배치 다이어그램(Deployment Diagram)
- 하드웨어 및 시스템 배치 구조를 표현
- 서버에 어떤 컴포넌트가 배치되는지 시각화
- ERD(Entity Relationship Diagram)
- 테이블 간의 관계를 표현
- 데이터베이스 설계 시 사용
데드락(Dead Lock)
두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
해당 조건 중 하나라도 깨지면 데드락이 발생하지 않는다.
- 상호 배제(Mutual Exclusion): 자원은 한 번에 하나의 프로세스만 사용할 수 있다.
- 점유 대기(Hold and Wait): 자원을 가진 상태에서 다른 자원을 기다린다.
- 비선점(No Preemption): 자원을 요청한 프로세스가 스스로 반납할 때까지 강제로 뺏을 수 없다.
- 순환 대기(Circular Wait): 프로세스들이 원형으로 자원을 기다리고 있는 상태 (A → B → C → A 형태).
비용 산정 모형
- COCOMO 모형(Constructive Cost Model)
- LOC를 기반으로 만들어진 비용 산정 모델
- Boehm이 만들었으며, 프로젝트 규모에 따라 Organic(50KLOC), Semi-detached(50 ~ 300KLOC), Embedded(300~KLOC)으로 나뉜다.
- Putnam 모형(SLIM Model)
- 소프트웨어 개발 노력과 기간을 예측하는 비용 산정 모델
- Rayleigh 곡선을 기반으로 하여, 프로젝트에 투입되는 인력이 시간에 따라 어떻게 변화하는지를 수학적으로 모델링한다.
- Function Point(FP)
- 코드 양이 아니라 기능 수를 기준으로 하는 비용 산정 모델
- 사용자 관점에서 기능(입출력 등)을 평가하여 규모 추정
- 델파이 기법(Delphi)
- 전문가들의 의견을 반복적으로 수렴하여 비용이나 일정 등을 예측하는 정성적 비용 산정 기법
- 합의에 도달할 때까지 반복하여 데이터가 부족한 상황에서 유용하다.
- 산정 경험 기반 모형(Analogous Estimation)
- 과거에 수행했던 유사한 프로젝트의 데이터를 기반으로 현재 프로젝트의 비용이나 기간을 추정하는 방식
- 과거 데이터에 많이 의존하기 때문에, 데이터의 유사도에 따라 정확도가 달라진다.
EAI (Enterprise Application Integration)
- Point-to-Point: 1:1로 직접 연결하는 단순 통합 방식이며, 구조가 복잡하다.
- Hub & Spoke: 중앙 허브가 모든 시스템과 연결되어 제어하는 중앙 집중식 방식이며, 구조가 단순하고 확장이 쉽다.
- Message Bus: 미들웨어를 통해 연결되는 미들웨어 통합 방식이며, 유연하고 분산 구조에 적합하다.
- Hybrid: 그룹 내부는 Hub & Spoke로, 그룹 간에는 Message Bus를 사용하는 복합 방식이며, 실제 기업에서 자주 사용된다.
파티션(Partition)
하나의 데이터베이스 테이블 또는 인덱스를 여러 개의 작은 단위(파티션)로 나누어 저장하는 것
장점
- 성능 향상: 필요한 파티션만 조회하므로 조회 속도가 빨라진다.
- 가용성 향상: 일부 파티션에 문제가 생겨도 나머지는 정상 작동할 수 있다.
- 백업 가능: 전체가 아닌 파티션 단위로 백업 및 복구가 가능하다.
- 경합 감소: 여러 파티션에 접근이 분산되어 락 충돌이 감소한다.
파티셔닝 종류
- 범위 분할(Range Partitioning)
- 특정 범위 값(예: 날짜, 숫자 등)에 따라 분할
- 예시) 2020년, 2021년, 2022년
- 해시 분할(Hash Partitioning)
- 특정 열의 해시값을 기준으로 균등하게 분할
- 예시) user_id % 4로 4개 분할
- 리스트 분할(List Partitioning)
- 미리 정의한 리스트 값에 따라 분할
- 예시) 지역이 서울, 부산, 대전 등
- 복합 분할(Composite Partitioning)
- 범위, 해시, 리스트 중 2개 이상을 결합
- 예시) 먼저 연도 기준으로 나눈 뒤, 해시로 다시 나누기
DBMS 유형
- 계층형 DBMS
- 데이터를 트리 구조로 저장하며, 빠른 검색은 가능하지만 유연성이 떨어진다.
- 예시) IBM IMS
- 망형 DBMS
- 데이터 간 다대다 관계로 표현이 가능하며, 구조가 복잡하지만 유연성은 계층형보다 좋다.
- 예시) IDMS
- 관계형 DBMS(RDBMS)
- 데이터를 테이블 형태로 저장하며, SQL을 사용하고 가장 널리 사용된다.
- 예시) Oracle, MySQL, PostgreSQL
- 객체지향 DBMS(OODBMS)
- 데이터를 객체 형태로 저장하며, 프로그래밍 언어와의 통합성이 좋다.
- 예시) db4o, ObjectDB
- 키-값 DBMS(NoSQL 계열)
- 데이터를 Key-Value 쌍으로 저장하며, 단순하고 빠르기 때문에 대규모 분산 시스템에 적합하다.
- 예시) Redis, DynamoDB
- 문서 DBMS
- JSON, XML 같은 문서 형식으로 저장하며, 비정형 데이터 처리에 유리하다.
- 예시) MongoDB
- 그래프 DBMS
- 데이터를 노드-간선 구조로 저장하며, 관계 중심의 검색(소셜 네트워크 등)에 강하다.
- 예시) Neo4j
XML(eXtensible Markup Language)
- 데이터를 저장하고 구조화하기 위한 마크업 언어이며, 데이터 자체를 표현하는 데 초점을 맞춘 언어이다.
- HTML 문법이 호환되지 않는 문제와 SGML의 복잡함을 해결하기 위해 개발되었다.
- 사용자가 직접 문서의 태그를 정의할 수 있고, 다른 사용자가 정의한 태그를 사용할 수 있다.
- 트리 구조로 구성되어 있어 상위 태그는 여러 개의 하위 태그를 가질 수 있다.
SGML(Stand Generalized Markup Language): 텍스트, 이미지, 비디오 등을 포함하는 멀티미디어 전자문서들을 다른 기종의 시스템들과 정보 손실 없이 효율적으로 전송, 저장하기 위한 언어
SOAP(Simple Object Access Protocol)
웹 서비스에서 서로 다른 시스템 간에 데이터를 주고받을 수 있게 해주는 XML 기반의 표준화된 웹 서비스 프로토콜이다.
- HTTP 기반에서 동작하기 때문에 프록시와 방화벽의 영향 없이 통신할 수 있다.
- 최근엔 SOAP보다 REST가 간단함, 유연성, 성능에서 더 좋기 때문에 REST를 선호하고 있다.
REST(Representational State Transfer): 분산 시스템을 설계하기 위한 소프트웨어 아키텍처 스타일이며 HTTP에서 사용된다.
WSDL(Web Services Description Language)
- 웹 서비스의 기능, 데이터 형식, 통신 방식 등을 기술한 XML 기반의 문서이며, SOAP과 같이 사용되어 클라이언트와 서버의 통신을 정의해준다.
- UDDI의 기초가 되고, 클라이언트는 WSDL 파일을 읽어 서버에서 어떠한 조작이 가능한지 파악할 수 있다.
- UDDI는 SOAP과 WSDL 기반의 구조에 맞춰 설계되지만, REST에서는 등록/검색 체계를 필요로 하지 않기 때문에 잘 사용되진 않는다.
UDDI(Universal Description, Discovery and Integration): 웹 서비스를 등록하고 검색할 수 있게 해주는 온라인 주소록
개발 도구
소프트웨어를 설계, 구현, 테스트, 유지보수하는데 사용하는 도구들
- 빌드 도구: 작성 코드의 컴파일 및 배포를 수행한다.(Maven, Gradle, Ant)
- 구현 도구: 실제 코드를 작성하는데 필요한 작업을 지원하는 도구(VsCode, IntelliJ, Eclipse)
- 테스트 도구: 코드의 오류나 성능을 확인하는 도구(Postman, Selenium)
- 형상 관리 도구: 작성한 코드의 버전 관리와 변경 추적을 위한 도구(Git, GitHub, SVN)
IPSec(IP Security)
인터넷 프로토콜에서 데이터를 안전하게 주고 받기 위한 보안 프로토콜 모음이며, 주로 VPN에서 사용된다.
목적
- 기밀성(암호화): 누가 중간에 보더라도 내용을 알 수 없게 한다.
- 무결성(변조 방지): 데이터가 중간에 바뀌지 않는다.
- 인증(정체 확인): 송신자와 수신자의 신원 정보를 확인한다.
주요 프로토콜
- AH(Authentication Header): 암호화 없이 송수신자의 인증과 무결성만 제공한다.
- ESP(Encapsulating Security Payload): 인증, 무결성, 암호화를 제공한다.
동작 모드
- 전송 모드(Transport Mode): IP 헤더는 그대로 두고 데이터 부분만 암호화한다.
- 터널 모드(Tunnel Mode): 전체 IP 패킷을 통째로 암호화해서 새로운 IP 헤더로 포장한다.
728x90