| 구분 | 설명 | 기대 효과 |
|---|---|---|
| 정의 | 기존 코드의 외부 동작은 그대로 유지하면서 내부 구조만 체계적으로 개선 | 코드 기능 유지 + 내부 가독성↑ (en.wikipedia.org, lvivity.com) |
| 목적① 유지보수성 강화 | 복잡함 감소, 코드 읽기·이해 쉬워짐 | 버그 수정·기능 추가·테스트 효율↑ |
| 목적② 기술 부채 완화 | 중복 제거, 네이밍·구조 정리 | 향후 변경·확장 시 재작업·비용 감소 |
| 목적③ 확장성·재사용성 개선 | 작은 모듈 추출, 책임 분리, 추상화 도입 | 기능 추가보다 구조 변경 부담↓ |
| 목적④ 코드 가독성 향상 | 메소드·변수 이름 의미있게 변경, 중복 제거 | 신규/이전 개발자 온보딩 쉬워짐 |
| 목적⑤ 성능 개선 (부수적) | 불필요한 복잡성 제거 시 가벼워짐 | 런타임 성능 약간 개선 가능 |
| 기법 예시 | 메소드/클래스 추출, 이름 변경, 중복 코드 통합, 조건문 간소화 등 | 구조 개선 위한 대표적 마이크로 리팩토링 |
| 주의사항 | 외형 변화에 집중하되 기능은 그대로 유지 작업 전 단위 테스트 필수 | 리팩토링 시 기능 변경·버그 유입 방지 |
| 언제? | 기능 추가 전, 코드 리뷰 시, 기술 부채 발생 시 등 | 적용 시기 잘 설정하면 장기 효율 극대화 |
| 항목 | 설명 |
|---|---|
| 정의 | IP 패킷의 오류 및 진단 처리를 위한 제어 메시지 프로토콜 |
| 역할 | 네트워크의 상태를 점검하고 오류를 알리는 제어 메시지 전달 |
| 계층 | OSI 7계층 중 네트워크 계층 |
| 특징 | - 데이터 전송이 아닌 오류 통지/상태 보고 전용 - 연결 없이 전송하는 비연결형 프로토콜 |
| 주요 메시지 유형 | - Echo Request/Reply (→ ping 명령)- Destination Unreachable - Time Exceeded |
| IP와의 관계 | IP와 함께 작동, 오류를 IP로 알리는 구조 |
| 예시 사용 | - ping 명령어 (목적지 도달 확인)- traceroute 명령어 (경로 추적) |
| 구분 | 설명 |
|---|---|
| 정의 | 데이터베이스의 논리적 구조와 제약 조건을 정의한 명세 |
| 목적 | 데이터의 구성, 관계, 제약 조건 등을 설계하고 문서화 |
| 포함 요소 | 테이블, 속성(컬럼), 도메인, 관계, 키, 인덱스, 제약조건 등 |
| 종류 | - 외부 스키마 (External): 사용자 관점의 뷰 - 개념 스키마 (Conceptual): 전체 DB의 논리적 구조 - 내부 스키마 (Internal): 실제 물리적 저장 구조 |
| 변경 주기 | 구조 중심이므로 자주 변경되지 않음 |
| 관련 용어 | - 인스턴스: 실제 데이터 - 스키마: 데이터 구조 (틀) |
| 예시 | CREATE TABLE 문 등을 통해 정의CREATE TABLE 회원 (ID INT PRIMARY KEY, 이름 VARCHAR(20)); |
| 구분 | 설명 |
|---|---|
| 정의 | 컴퓨터 간 데이터 통신을 위한 약속(규칙) 즉, 송수신 간에 메시지를 어떻게 보낼지 정한 규칙 |
| 주요 역할 | - 데이터 전송 순서 및 형식 지정 - 오류 제어, 흐름 제어 - 데이터 재전송, 수신 확인 등 |
| 구성 요소 | - 구문(Syntax): 데이터 형식 - 의미(Semantics): 각 필드의 의미와 역할 - 시간(Synchronization): 전송 속도, 순서 등 |
| 예시 프로토콜 | - TCP/IP (인터넷 통신) - HTTP/HTTPS (웹) - FTP (파일 전송) - SMTP/IMAP (메일) 등 |
| OSI 7계층별 프로토콜 | - 응용계층: HTTP, FTP, DNS - 전송계층: TCP, UDP - 네트워크계층: IP, ICMP - 데이터링크계층: Ethernet 등 |
| 종류 | - 비연결형: UDP 등 - 연결형: TCP 등 |
| 비유 | 두 사람이 전화통화할 때 말하는 방식·규칙에 해당 |
| 항목 | 설명 |
|---|---|
| 기호 | A ÷ B |
| 정의 | 릴레이션 A에서 릴레이션 B에 있는 모든 값에 대해 대응되는 값들만 선택 |
| 전제 조건 | - A의 속성 ⊇ B의 속성 - 즉, A가 B의 속성을 모두 포함하고 있어야 함 |
| 결과 | A에서 B의 모든 튜플과 짝지을 수 있는 속성만 추출됨 |
| 예시 | 예: "모든 과목을 수강한 학생"을 찾을 때 |
| 개념적으로 | - B는 조건 역할 - A는 전체 데이터 - B의 모든 조건을 만족시키는 A의 튜플만 결과에 포함 |
| 항목 | 설명 |
|---|---|
| 정의 | 소스코드의 모든 **조건문(if, switch 등)의 각 분기(참/거짓)**이 최소 1회 이상 수행되도록 테스트 케이스를 설계하는 기준 |
| 목적 | 프로그램의 제어 흐름 상 모든 분기를 테스트하여 누락된 로직 없이 테스트할 수 있도록 함 |
| 포함 범위 | 조건문의 True, False 분기 모두 포함 |
| 장점 | - 단순 조건 커버리지보다 더 정밀한 테스트 가능 - 주요 로직 분기 경로 오류 발견 가능 |
| 한계 | - 조건문 내부의 개별 조건식 조합까지는 검사하지 않음 (복합 조건 검사에는 조건 커버리지 필요) |
| 예시 코드 | if (A > 0) { ... } else { ... }→ A > 0인 경우, A ≤ 0인 경우 모두 테스트 필요 |
| 관계 기준 | - 문장 커버리지보다 강력함 - 조건 커버리지, 경로 커버리지보다 약함 |
| 보장 범위 | 모든 **제어 흐름 그래프의 간선(edge)**이 한 번 이상 수행되었는지 검사 |
| 구문 | 설명 |
|---|---|
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 | 각 과목별로 최소 점수와 최대 점수를 조회함 → AS 최소점수, AS 최대점수는 컬럼명 별칭 설정 |
FROM 성적 | 데이터가 저장된 테이블: 성적 테이블로부터 조회 |
GROUP BY 과목이름 | 동일한 과목이름을 가진 행들끼리 그룹화 |
HAVING AVG(점수) >= 90 | 그룹화된 결과 중에서 평균 점수가 90 이상인 과목만 필터링HAVING은 GROUP BY 이후 조건 필터링 시 사용 |
| 항목 | 설명 |
|---|---|
| 정의 | 식별된 **형상 항목(코드, 문서 등)**에 대한 변경 요청을 검토·승인·기록·반영하는 활동 |
| 목적 | 변경 사항이 무질서하게 반영되지 않도록 관리하고, **기준선(Baseline)**의 일관성과 무결성 유지 |
| 주요 활동 | - 변경 요청 수신 - 영향도 분석 - 변경 승인 여부 결정 - 변경 내용 문서화 및 반영 |
| 담당 조직 | 형상 통제 위원회 (CCB, Configuration Control Board) |
| 결과물 | - 변경 요청서 (CR, Change Request) - 변경 통보서 - 형상 변경 이력 문서 |
| 형상 관리 단계 중 위치 | 1. 형상 식별 → 2. 형상 통제 → 3. 형상 상태 보고 → 4. 형상 감사 |
| 중요성 | - 프로젝트 진행 중 발생하는 수많은 변경 요구사항을 공식적으로 통제 - 혼선 방지 및 책임 추적성 확보 |
| 항목 | 설명 |
|---|---|
| 정의 | 변수명 앞에 **자료형이나 목적을 나타내는 접두어(prefix)**를 붙여, 변수의 속성이나 의미를 명시하는 표기법 |
| 목적 | - 변수의 자료형이나 용도를 이름만 보고 파악 가능 - 코드 가독성 및 유지보수성 향상 |
| 기본 구조 | 접두어 + 변수이름 (예: strName, iCount, bFlag) |
| 예시 접두어 | - i: 정수형(int)- f: 실수형(float)- b: 논리형(bool)- str: 문자열(String)- arr: 배열(array)- p: 포인터(pointer) |
| 사용 예시 | - iScore → 정수형 점수- bActive → 활성화 여부를 나타내는 bool형- strUserName → 문자열 사용자 이름 |
| 장점 | - 코드만 보고도 변수 의미와 자료형 파악 가능 - 실수 방지 및 디버깅 효율 ↑ |
| 단점 | - 형 변화 시 변수명도 바꿔야 함 (유지보수 부담) - IDE 지원이 발전하면서 사용 빈도 감소 |
| 현재 추세 | 현대 언어(Java, Python 등)에서는 권장되지 않음 → 대신 의미 중심 네이밍을 선호 ( userAge, isLoggedIn 등) |
| 항목 | 설명 |
|---|---|
| 정의 | RIP의 단점을 보완한 링크 상태 기반의 IGP(내부 라우팅 프로토콜) |
| 동작 방식 | - 라우팅 정보에 거리, 링크 상태, 인접 노드 정보 반영 - 최단 경로를 실시간 계산하여 라우팅 |
| 최단 경로 탐색 알고리즘 | 다익스트라 알고리즘(Dijkstra) 사용 |
| 라우팅 정보 전파 | 변경 발생 시, 네트워크 내 모든 라우터에 변경 내용 전파 |
| 특징 | - 링크 상태 라우팅 - 자율 시스템(AS) 내에서 동작 - RIP보다 빠르고 효율적 |
| 사용 범위 | 대규모 네트워크에 적합 |
| 프로토콜 유형 | IGP (Interior Gateway Protocol) |
| 관리 단위 | 동일 자율 시스템(AS) 내부 |
| RFC | RFC 2328 (OSPFv2), RFC 5340 (OSPFv3 – IPv6 지원) |
| 방식 | 명칭 | 설명 | 장점 | 단점 |
|---|---|---|---|---|
| ① | Point to Point (1:1 연결) | 가장 기본적인 통합 방식. 애플리케이션을 직접 연결 (1:1) | 간단한 구조, 소규모에 적합 | 애플리케이션 수 증가 시 연결 복잡도 ↑ 변경 및 재사용 어려움 |
| ② | Hub & Spoke | 중앙 허브(Hub)를 통해 데이터 전송. Spoke는 개별 애플리케이션 | 구조 단순, 유지보수 용이 | 허브 장애 시 전체 시스템 영향 큼 |
| ③ | Message Bus | 미들웨어를 통해 애플리케이션 간 메시지 전달. 버스 구조 기반 | 확장성, 대용량 처리 가능 | 구현 및 관리 복잡도 ↑ |
| ④ | Hybrid | 내부는 Hub & Spoke, 외부는 Message Bus 방식 혼합 | 유연한 구조, 데이터 병목 최소화 | 설계 및 구현 복잡 |
| 항목 | 설명 |
|---|---|
| 정의 | 사용자가 별도의 설명 없이도 쉽게 이해하고 사용할 수 있어야 하는 설계 원칙 |
| 목표 | 사용자가 예측 가능한 방식으로 시스템을 조작하도록 유도 |
| 핵심 특징 | - 직접 경험이나 상식으로 이해 가능 - 학습 곡선이 짧음 - 사용 설명서 없이도 사용 가능 |
| 대표 예시 | - 휴대폰의 터치 인터페이스 - 아이콘 디자인 (휴지통 = 삭제) - 슬라이더 = 볼륨 조절 |
| 적용 분야 | UI/UX 디자인, 소프트웨어 인터페이스, 웹페이지, 앱 메뉴 구조 등 |
| 관련 원칙 | - 가시성(Visibility) - 피드백 제공(Feedback) - 일관성(Consistency) |
| 장점 | - 사용자의 시행착오 감소 - 학습 부담 최소화 - 사용자 만족도 및 신뢰도 향상 |
| 항목 | 설명 |
|---|---|
| 정의 | 객체가 생성될 때 자동으로 호출되어 멤버 변수 초기화 등을 수행하는 특수한 메서드 |
| 역할 | - 객체 변수 생성 시 초기값 설정 - 객체 생성과 동시에 자동 실행 |
| 이름 규칙 | 클래스 이름과 동일한 이름을 사용 (언어에 따라 다름) |
| 리턴 타입 | 리턴 타입 없음 (void도 사용하지 않음) |
| 종류 | - 기본 생성자: 매개변수 없음 - 매개변수 생성자: 매개변수로 초기값 전달 - 복사 생성자 (C++ 등) - 생성자 오버로딩 가능 (Java, C++ 등) |
| 예시 (Java) | java<br>public class Student {<br> String name;<br> int age;<br><br> // 생성자<br> Student(String n, int a) {<br> name = n;<br> age = a;<br> }<br>}<br> |
| 특징 | - 생성 시 1회만 호출 - 명시하지 않으면 기본 생성자 자동 생성(Java 기준) - 클래스 내부에 위치 |
| 소멸자와 차이점 | 생성자는 객체 생성 시 호출, 소멸자는 객체 소멸 시 호출됨 (C++ 등에서 사용) |
| 항목 | 내용 |
|---|---|
ALTER | 기존 테이블을 수정할 때 사용하는 SQL 명령 |
TABLE 학생 | 학생이라는 테이블을 대상으로 작업 |
ADD | 테이블에 새로운 열(컬럼)을 추가 |
주소 VARCHAR(20) | 추가할 컬럼의 이름은 주소, 자료형은 VARCHAR(20) (최대 20자 문자열) |