정보처리 실무 · 학습 노트
시험 직전 압축본
핵심 규칙을 읽고, 답을 가린 채 떠올리고, 해당 과목 문제로 확인하세요.
읽는 복습에서 쓰는 복습으로
먼저 핵심 규칙을 읽고, ‘답 가리고 확인’에서 답을 직접 떠올리세요. 막히면 상세 학습으로 돌아갑니다. 아래 핵심은 단원별 첫 개념과 이번 보강을 압축한 것이며, 전체 규칙도 펼쳐볼 수 있습니다.
코드 읽기의 기본
- 매번 같은 순서로 푼다
- 추적표의 열: 실행 줄 / i / 주요 변수 / 배열 / 출력 누적
- 정수 나눗셈과 나머지
- C·Java: -7 / 3 = -2, -7 % 3 = -1. Python: -7 // 3 = -3, -7 % 3 = 2.
- 연산자·단락 평가
- C·Java의 &&와 ||는 결과가 정해지면 오른쪽을 실행하지 않는다. &와 |는 비트 연산과 구별한다.
- 반복문과 재귀
- 재귀 함수는 내려갈 때의 호출과 돌아올 때의 계산을 분리한다.
- 복잡도와 자료구조
- DFS는 재귀·스택, BFS는 큐. BST 중위 순회는 키를 정렬된 순서로 방문한다.
- 트리 순회
- 루트 A, 왼쪽 B(자식 D,E), 오른쪽 C라면 전위 ABDEC / 중위 DBEAC / 후위 DEBCA.
“매번 같은 순서로 푼다”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
추적표의 열: 실행 줄 / i / 주요 변수 / 배열 / 출력 누적 머릿속으로 끝까지 계산하면 중간 변경을 놓치기 쉽다. 출력에 공백과 줄바꿈이 있는지 따로 표시한다.
“정수 나눗셈과 나머지”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
C·Java: -7 / 3 = -2, -7 % 3 = -1. Python: -7 // 3 = -3, -7 % 3 = 2. C에서 double x = 7 / 2;의 x는 3.0이다. 저장할 때 변환해도 이미 잘린 소수 부분은 돌아오지 않는다.
“연산자·단락 평가”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
C·Java의 &&와 ||는 결과가 정해지면 오른쪽을 실행하지 않는다. &와 |는 비트 연산과 구별한다. Python에는 ++가 없다. ^는 세 언어 모두 거듭제곱이 아니라 XOR이다. Python 거듭제곱은 **.
“반복문과 재귀”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
재귀 함수는 내려갈 때의 호출과 돌아올 때의 계산을 분리한다. C·Java의 for에서 continue 뒤에도 증감식은 실행된다. while에서는 직접 작성한 증감문을 건너뛸 수 있다.
“복잡도와 자료구조”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
DFS는 재귀·스택, BFS는 큐. BST 중위 순회는 키를 정렬된 순서로 방문한다. 연속한 두 반복문은 O(n)+O(n)=O(n)이다. 중첩 여부와 실제 반복 범위를 확인한다.
“트리 순회”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
루트 A, 왼쪽 B(자식 D,E), 오른쪽 C라면 전위 ABDEC / 중위 DBEAC / 후위 DEBCA. 함수 이름이 traverse라고 해서 순회 종류를 알 수 없다. 실제 출력문의 위치로 판정한다.
전체 핵심 12개 펼치기
- 매번 같은 순서로 푼다
- 추적표의 열: 실행 줄 / i / 주요 변수 / 배열 / 출력 누적
- 정수 나눗셈과 나머지
- C·Java: -7 / 3 = -2, -7 % 3 = -1. Python: -7 // 3 = -3, -7 % 3 = 2.
- 연산자·단락 평가
- C·Java의 &&와 ||는 결과가 정해지면 오른쪽을 실행하지 않는다. &와 |는 비트 연산과 구별한다.
- 반복문과 재귀
- 재귀 함수는 내려갈 때의 호출과 돌아올 때의 계산을 분리한다.
- 복잡도와 자료구조
- DFS는 재귀·스택, BFS는 큐. BST 중위 순회는 키를 정렬된 순서로 방문한다.
- 트리 순회
- 루트 A, 왼쪽 B(자식 D,E), 오른쪽 C라면 전위 ABDEC / 중위 DBEAC / 후위 DEBCA.
- 기본 정렬 알고리즘 손 추적
- 버블 정렬 1회전 후에는 가장 큰 값이 배열 맨 뒤에 위치한다. 선택 정렬은 한 회전에 교환이 최대 1번뿐이다.
- 처음 읽는 코드: 변수·값·식·문장
- 초기값 → 실행 순서 → 최종 출력. =와 ==를 분리한다.
- 진법 변환과 비트의 자리값
- AND: 둘 다 1 / OR: 하나라도 1 / XOR: 서로 다름 / NOT: 반전.
- 배열·스택·큐·연결 리스트
- push/pop은 스택, enqueue/dequeue는 큐. 스택 top과 큐 front를 기록한다.
- 정렬·탐색의 과정과 복잡도
- 버블·선택·삽입 평균 O(n²), 병합 O(n log n), 퀵 평균 O(n log n)·최악 O(n²).
- 재귀 호출표와 DFS·BFS
- 재귀는 호출 스택을 그리고, BFS는 큐 내용을 회차별로 적는다.
C 언어
- 자료형과 출력
- 문자 하나는 'A', 문자열은 "A". char s[]="WEB"는 W,E,B,\0의 4칸이다.
- 포인터 첫걸음
- 선언의 *는 포인터 선언, 식의 *는 역참조다. p와 *p는 전혀 다르다.
- 배열과 포인터 산술
- int a[3]={4,8,12}; p=a; → *p=4, *(p+2)=12.
- 증감식 읽는 법
- p 변화와 배열 원소 변화를 별도 열에 기록한다.
- 문자열과 이차원 배열
- int a[2][3]에서 a+1은 다음 행, *(*(a+1)+2)는 a[1][2].
- 함수 인자와 static
- 일반 지역변수는 호출마다 별개, 지역 static은 생존 기간이 프로그램 전체다.
- 배열 포인터와 포인터 배열 최종 구별
- int a[2][3]; int (*p)[3]=a; p[1][2]는 a[1][2].
“자료형과 출력”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
문자 하나는 'A', 문자열은 "A". char s[]="WEB"는 W,E,B,\0의 4칸이다. int의 바이트 수를 무조건 4라고 단정하지 말 것. sizeof 결과는 문제에서 주어진 환경을 따른다.
p=&x 뒤 *p=9를 실행하면 x는?
9. p는 같은 x 칸을 가리킨다.
“배열과 포인터 산술”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
int a[3]={4,8,12}; p=a; → *p=4, *(p+2)=12. sizeof(a)는 실제 배열 선언이 보이는 곳에서 전체 배열 크기지만 함수의 int a[] 매개변수는 포인터로 조정된다.
“증감식 읽는 법”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
p 변화와 배열 원소 변화를 별도 열에 기록한다. printf("%d %d", i++, i++)처럼 같은 변수의 순서 없는 변경은 C에서 정의되지 않은 동작이다. 임의의 정답을 암기하지 않는다.
“문자열과 이차원 배열”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
int a[2][3]에서 a+1은 다음 행, *(*(a+1)+2)는 a[1][2]. C 문자열은 +로 이어 붙일 수 없다. 문자열 비교는 strcmp 결과가 0인지 확인한다.
“함수 인자와 static”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
일반 지역변수는 호출마다 별개, 지역 static은 생존 기간이 프로그램 전체다. 주소를 전달해 원본을 바꾸는 관용 표현을 보고 C 자체가 참조 전달이라고 쓰지 않는다.
a={{1,2,3},{4,5,6}}에서 *(*(p+1)+1)은?
5. p+1은 두 번째 행, +1은 그 행의 두 번째 원소다.
전체 핵심 16개 펼치기
- 자료형과 출력
- 문자 하나는 'A', 문자열은 "A". char s[]="WEB"는 W,E,B,\0의 4칸이다.
- 포인터 첫걸음
- 선언의 *는 포인터 선언, 식의 *는 역참조다. p와 *p는 전혀 다르다.
- 배열과 포인터 산술
- int a[3]={4,8,12}; p=a; → *p=4, *(p+2)=12.
- 증감식 읽는 법
- p 변화와 배열 원소 변화를 별도 열에 기록한다.
- 문자열과 이차원 배열
- int a[2][3]에서 a+1은 다음 행, *(*(a+1)+2)는 a[1][2].
- 함수 인자와 static
- 일반 지역변수는 호출마다 별개, 지역 static은 생존 기간이 프로그램 전체다.
- 구조체와 연결 자료구조
- 연결 리스트에서는 선언 순서가 아니라 next 화살표를 따른다. 트리는 left/right와 재귀 호출 순서를 그린다.
- 비트 연산과 switch
- break가 없으면 다음 case까지 계속 실행되는 fall-through를 확인한다.
- 문자열 처리 함수
- dest 버퍼는 복사·연결 후 결과를 담을 만큼 충분히 커야 한다.
- C 기호 사전과 실행 뼈대
- printf 사용에는 stdio.h, strlen·strcmp에는 string.h를 포함한다.
- 형 변환·정수 나눗셈·문자 코드
- 변환을 언제 했는지 괄호로 확인한다. 실수 저장 변수라고 계산도 실수인 것은 아니다.
- 전위·후위 증가와 조건·반복
- 각 문장이 끝난 뒤 i와 대입된 변수를 따로 적는다.
- 배열 초기화·주소·이중 포인터
- 주소 화살표 pp → p → x. **pp를 바꾸면 x가 바뀐다.
- 문자열 함수·널 문자·입력 주소
- strcmp(a,b)==0이면 내용이 같다. strcmp가 반드시 -1 또는 1을 반환하는 것은 아니다.
- 지역·전역·static과 메모리 수명
- 이름의 보이는 범위(scope)와 객체의 생존 기간(lifetime)은 별개다.
- 배열 포인터와 포인터 배열 최종 구별
- int a[2][3]; int (*p)[3]=a; p[1][2]는 a[1][2].
Java
- 실행 뼈대와 타입
- 정수 나눗셈은 0 방향 절삭. boolean에 0이나 1을 직접 넣지 않는다.
- ==와 equals
- new String("OK") 두 개는 내용이 같아도 별도 객체다. 배열 내용 비교에는 Arrays.equals를 사용한다.
- 필드 접근과 오버라이딩
- Parent p = new Child(); → 필드는 Parent, override 메서드는 Child.
- 오버로딩과 형 변환
- 반환 타입만 다르게 해서는 오버로딩이 되지 않는다.
- 생성자와 초기화
- 정적 초기화는 클래스 초기화 시 한 번. 인스턴스 필드 초기화와 생성자는 객체마다 수행한다.
- static·매개변수·배열
- 배열 길이는 a.length, 문자열 길이는 s.length().
- 필드·static·인스턴스 메서드 판정표
- A x = new B(): x.field와 x.staticMethod()는 A, 재정의된 x.method()는 B.
“실행 뼈대와 타입”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
정수 나눗셈은 0 방향 절삭. boolean에 0이나 1을 직접 넣지 않는다. Java의 조건식은 boolean이어야 한다. C처럼 if(1)을 쓰지 않는다.
“==와 equals”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
new String("OK") 두 개는 내용이 같아도 별도 객체다. 배열 내용 비교에는 Arrays.equals를 사용한다. 문자열 리터럴 풀 때문에 "OK" == "OK"가 true인 사례를 모든 문자열에 일반화하지 않는다.
메서드와 필드 중 실제 객체 타입으로 선택되는 것은?
오버라이딩된 인스턴스 메서드.
“오버로딩과 형 변환”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
반환 타입만 다르게 해서는 오버로딩이 되지 않는다. Object x="a";를 f(x)에 넣으면 f(String)이 아니라 f(Object)가 선택된다.
“생성자와 초기화”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
정적 초기화는 클래스 초기화 시 한 번. 인스턴스 필드 초기화와 생성자는 객체마다 수행한다. 부모 생성자에서 재정의된 메서드를 호출하면 자식 필드의 명시적 초기화 전 기본값을 볼 수 있다. 호출 순서를 적는다.
“static·매개변수·배열”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
배열 길이는 a.length, 문자열 길이는 s.length(). 향상된 for에서 기본형 변수 x에 대입해도 원래 배열 원소가 바뀌지 않는다.
상위 참조가 하위 객체를 가리킬 때 모든 멤버가 하위 것으로 선택되는가?
아니다. 필드와 static 숨김은 선언 타입, 재정의 인스턴스 메서드는 실제 타입이다.
전체 핵심 17개 펼치기
- 실행 뼈대와 타입
- 정수 나눗셈은 0 방향 절삭. boolean에 0이나 1을 직접 넣지 않는다.
- ==와 equals
- new String("OK") 두 개는 내용이 같아도 별도 객체다. 배열 내용 비교에는 Arrays.equals를 사용한다.
- 필드 접근과 오버라이딩
- Parent p = new Child(); → 필드는 Parent, override 메서드는 Child.
- 오버로딩과 형 변환
- 반환 타입만 다르게 해서는 오버로딩이 되지 않는다.
- 생성자와 초기화
- 정적 초기화는 클래스 초기화 시 한 번. 인스턴스 필드 초기화와 생성자는 객체마다 수행한다.
- static·매개변수·배열
- 배열 길이는 a.length, 문자열 길이는 s.length().
- 문자열 +와 예외
- print는 줄바꿈 없음, println은 끝에 줄바꿈. finally는 정상 반환·예외 경로에서도 보통 실행된다.
- 추상 클래스·인터페이스·제네릭
- extends / implements / abstract / final을 구별한다. final 변수는 재대입 불가다.
- 인터페이스의 default·static 메서드
- 구현 클래스가 default 메서드를 재정의하면 일반 메서드와 같은 동적 바인딩 규칙에 따라 재정의한 쪽이 호출된다.
- Java 기호·타입·배열 생성
- 배열 a.length / 문자열 s.length() / 리스트 list.size().
- 산술·증감·단락·삼항 연산
- C와 달리 Java의 식 평가 순서는 정해져 있다. 언어별로 규칙을 분리한다.
- 접근 제어·this·super·final
- this.x는 현재 객체 필드, super.x는 부모 필드. static 문맥에는 현재 객체 this가 없다.
- 업캐스팅·다운캐스팅·다형성
- 필드·static 선택은 선언 타입, 오버라이딩된 인스턴스 메서드는 실제 객체 타입.
- String 메서드와 StringBuilder
- "ABCDE".substring(1,4) → "BCD". charAt(0) → 'A'.
- 예외의 전달·catch 순서·finally
- 출력 순서는 try에서 실행한 부분 → 맞는 catch → finally → 이어지는 코드.
- 컬렉션·제네릭·박싱
- List remove(int)는 위치 삭제, remove(Object)는 값 삭제.
- 필드·static·인스턴스 메서드 판정표
- A x = new B(): x.field와 x.staticMethod()는 A, 재정의된 x.method()는 B.
Python
- 기본 문법과 출력
- True, False, None의 대소문자를 지킨다. len(a), type(a), int("12"), str(12)를 읽을 수 있어야 한다.
- range와 슬라이싱
- range(5,0,-2)는 5,3,1. "ABCDE"[1:5:2]는 "BD".
- 리스트·튜플·집합·딕셔너리
- a.append(x)는 한 원소, a.extend(xs)는 여러 원소를 추가한다. dict.items()는 키와 값의 쌍이다.
- 별칭과 얕은 복사
- [[0]*2]*3은 동일한 내부 리스트를 세 번 참조한다. 독립 행은 [[0]*2 for _ in range(3)].
- 컴프리헨션과 함수
- [x*x for x in range(5) if x%2] → [1,9].
- 문자열과 딕셔너리 순회
- for k in d는 키 순회. k[-1]은 키 문자열의 마지막 문자이고 d[k][0]은 값의 첫 원소다.
- 기본 인자와 반복 리스트 공유
- 기본 인자 []는 호출마다 새로 만들어지지 않는다. [[0]*2 for _ in range(2)]는 행이 독립적이다.
“기본 문법과 출력”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
True, False, None의 대소문자를 지킨다. len(a), type(a), int("12"), str(12)를 읽을 수 있어야 한다. input()의 결과는 문자열이다. 숫자로 계산하려면 변환이 필요하다.
"ABCDE"[::-2]는?
ECA. 위치4,2,0.
“리스트·튜플·집합·딕셔너리”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
a.append(x)는 한 원소, a.extend(xs)는 여러 원소를 추가한다. dict.items()는 키와 값의 쌍이다. 집합의 표시 순서를 정답으로 가정하지 않는다. 정렬 결과를 물으려면 sorted(set)을 쓴다.
“별칭과 얕은 복사”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
[[0]*2]*3은 동일한 내부 리스트를 세 번 참조한다. 독립 행은 [[0]*2 for _ in range(3)]. 복사한 바깥 리스트에 append하는 것과 내부 원소를 바꾸는 것을 구분한다.
“컴프리헨션과 함수”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
[x*x for x in range(5) if x%2] → [1,9]. 함수의 기본 인자에 []를 쓰면 함수 정의 때 만들어진 리스트가 호출 사이 공유된다.
“문자열과 딕셔너리 순회”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
for k in d는 키 순회. k[-1]은 키 문자열의 마지막 문자이고 d[k][0]은 값의 첫 원소다. 기존 키의 값을 갱신해도 그 키의 삽입 위치는 바뀌지 않는다. 없는 키의 d[k]는 KeyError, d.get(k,기본값)은 기본값.
a=[[0]*2]*2; a[0][1]=7 이후 a는?
[[0, 7], [0, 7]]. 두 행이 같은 내부 리스트를 가리킨다.
전체 핵심 21개 펼치기
- 기본 문법과 출력
- True, False, None의 대소문자를 지킨다. len(a), type(a), int("12"), str(12)를 읽을 수 있어야 한다.
- range와 슬라이싱
- range(5,0,-2)는 5,3,1. "ABCDE"[1:5:2]는 "BD".
- 리스트·튜플·집합·딕셔너리
- a.append(x)는 한 원소, a.extend(xs)는 여러 원소를 추가한다. dict.items()는 키와 값의 쌍이다.
- 별칭과 얕은 복사
- [[0]*2]*3은 동일한 내부 리스트를 세 번 참조한다. 독립 행은 [[0]*2 for _ in range(3)].
- 컴프리헨션과 함수
- [x*x for x in range(5) if x%2] → [1,9].
- 문자열과 딕셔너리 순회
- for k in d는 키 순회. k[-1]은 키 문자열의 마지막 문자이고 d[k][0]은 값의 첫 원소다.
- 논리·정렬·나눗셈
- 빈 문자열·빈 컨테이너·0·None은 거짓 취급. //는 floor, %는 나눗셈 항등식을 만족한다.
- 언패킹과 다중 대입
- 언패킹 대상 개수와 오른쪽 값 개수가 맞아야 한다. * 붙은 이름은 하나만 쓸 수 있다.
- / · // · % · ** : 기호부터 이해하기
- 몫 //, 나머지 %, 제곱 **. 7 / 2 = 3.5, 7 // 2 = 3, 7 % 2 = 1.
- 대입·자료형·변환과 입력
- = 대입 / == 값 비교 / int("12") 숫자 변환 / str(12) 문자열 변환.
- 들여쓰기·조건문·조건식
- 블록은 들여쓰기로 결정된다. ==, !=, <, <=, >, >=는 비교 연산자.
- and · or · not과 단락 평가
- 0 or 7 → 7 / 3 and 8 → 8 / not [] → True.
- for·while·break·continue·반복 else
- range(시작, 끝, 간격)의 끝은 포함하지 않는다. while은 종료 조건이 바뀌는지 확인한다.
- 인덱스와 슬라이스를 손으로 적기
- ABCDE[1:4] → BCD / [::2] → ACE / [4:0:-2] → EC.
- 리스트 메서드·삭제·반환값
- append([2,3]) → 중첩 리스트 한 개 추가 / extend([2,3]) → 원소 두 개 추가.
- 딕셔너리·집합·튜플의 함정
- in은 딕셔너리에서 키 포함 검사. 집합 & 교집합, | 합집합, - 차집합, ^ 대칭차.
- 함수·return·지역 이름·lambda
- 인자 → 매개변수 → 본문 → 반환값 → 호출자 순서로 추적한다.
- 문자열 split·join·replace와 출력 형식
- 문자열은 불변이다. 변환 결과를 대입하지 않으면 원본 이름의 값은 그대로다.
- 컴프리헨션·enumerate·zip·map
- 중첩 컴프리헨션은 왼쪽 for가 바깥 반복, 오른쪽 for가 안쪽 반복.
- ==·is·얕은 복사·깊은 복사
- 바깥 리스트의 append와 내부 리스트의 append를 구별한다.
- 기본 인자와 반복 리스트 공유
- 기본 인자 []는 호출마다 새로 만들어지지 않는다. [[0]*2 for _ in range(2)]는 행이 독립적이다.
SQL
- 문장 종류와 기본 틀
- UPDATE t SET col=값 WHERE 조건; DELETE FROM t WHERE 조건; INSERT INTO t(col) VALUES(값);
- SELECT 논리 처리 순서
- WHERE는 개별 행을, HAVING은 그룹을 거른다. ORDER BY 없이는 출력 순서를 보장하지 않는다.
- NULL과 집계
- SUM·AVG는 NULL을 제외한다. 값 10,NULL,20의 AVG는 15이다.
- 조인과 행 개수
- 같은 키가 왼쪽 2행·오른쪽 3행이면 해당 키의 조인 결과는 6행.
- 서브쿼리와 집합 연산
- 부서별 평균보다 큰 급여: e.salary > (SELECT AVG(x.salary) FROM emp x WHERE x.dept=e.dept).
- 제약조건과 도메인
- CREATE DOMAIN score_t AS INTEGER CHECK (VALUE BETWEEN 0 AND 100); PostgreSQL에서 지원하는 예다.
- 빈 집합·NULL·COUNT 마지막 점검
- WHERE는 TRUE만 남긴다. FALSE와 UNKNOWN은 모두 제외한다.
“문장 종류와 기본 틀”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
UPDATE t SET col=값 WHERE 조건; DELETE FROM t WHERE 조건; INSERT INTO t(col) VALUES(값); DROP은 객체 제거, DELETE는 행 삭제, TRUNCATE는 전체 행 제거. 롤백 가능 여부는 DBMS·트랜잭션 조건에 따라 달라 일반화 금지.
“SELECT 논리 처리 순서”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
WHERE는 개별 행을, HAVING은 그룹을 거른다. ORDER BY 없이는 출력 순서를 보장하지 않는다. 집계한 COUNT(*) 조건을 WHERE에 직접 쓰지 않는다. SELECT 별칭의 사용 가능 위치는 DBMS에 따라 차이가 있다.
“NULL과 집계”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
SUM·AVG는 NULL을 제외한다. 값 10,NULL,20의 AVG는 15이다. NOT IN의 비교 대상에 NULL이 있으면 UNKNOWN 때문에 기대한 행이 사라질 수 있다. NOT EXISTS와 구별한다.
“조인과 행 개수”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
같은 키가 왼쪽 2행·오른쪽 3행이면 해당 키의 조인 결과는 6행. LEFT JOIN 뒤 WHERE b.col=값을 쓰면 NULL로 채워진 행이 제거된다. ON에 조건을 넣는 것과 결과가 다르다.
“서브쿼리와 집합 연산”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
부서별 평균보다 큰 급여: e.salary > (SELECT AVG(x.salary) FROM emp x WHERE x.dept=e.dept). 스칼라 서브쿼리가 여러 행을 반환하면 오류가 날 수 있다. ANY·ALL과 단순 =를 구별한다.
“제약조건과 도메인”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
CREATE DOMAIN score_t AS INTEGER CHECK (VALUE BETWEEN 0 AND 100); PostgreSQL에서 지원하는 예다. CHECK만으로 NULL을 항상 차단하지 않는다. 필수값에는 NOT NULL을 함께 둔다. CREATE DOMAIN은 모든 DBMS가 지원하지 않는다.
3 NOT IN (1,NULL)은 TRUE인가?
UNKNOWN이다. 3<>1 AND 3<>NULL에서 두 번째가 UNKNOWN이므로 WHERE에서 제외된다.
전체 핵심 16개 펼치기
- 문장 종류와 기본 틀
- UPDATE t SET col=값 WHERE 조건; DELETE FROM t WHERE 조건; INSERT INTO t(col) VALUES(값);
- SELECT 논리 처리 순서
- WHERE는 개별 행을, HAVING은 그룹을 거른다. ORDER BY 없이는 출력 순서를 보장하지 않는다.
- NULL과 집계
- SUM·AVG는 NULL을 제외한다. 값 10,NULL,20의 AVG는 15이다.
- 조인과 행 개수
- 같은 키가 왼쪽 2행·오른쪽 3행이면 해당 키의 조인 결과는 6행.
- 서브쿼리와 집합 연산
- 부서별 평균보다 큰 급여: e.salary > (SELECT AVG(x.salary) FROM emp x WHERE x.dept=e.dept).
- 제약조건과 도메인
- CREATE DOMAIN score_t AS INTEGER CHECK (VALUE BETWEEN 0 AND 100); PostgreSQL에서 지원하는 예다.
- 패턴과 뷰·인덱스
- LIKE '김%' / ORDER BY score DESC, id ASC / CREATE VIEW v AS SELECT ...
- CASE 조건식과 NULL 대체
- ELSE를 생략하면 어떤 WHEN도 참이 아닌 행은 NULL이 된다.
- 테이블에서 SELECT 결과 만들기
- SELECT 열 FROM 테이블 WHERE 조건 ORDER BY 열 ASC/DESC;
- INSERT·UPDATE·DELETE·DDL·권한
- INSERT INTO t(열목록) VALUES(값목록); UPDATE t SET 열=값 WHERE 조건; DELETE FROM t WHERE 조건;
- GROUP BY·HAVING을 실제 행으로 풀기
- 행 나열 → WHERE 제거 → 그룹 묶기 → 집계 → HAVING → 출력·정렬.
- NULL의 3값 논리와 NOT IN
- NULL은 0도 빈 문자열도 아니다. UNKNOWN은 WHERE에서 남지 않는다.
- 조인의 곱셈·ON과 WHERE·셀프 조인
- 조인은 키별로 매칭 행들을 나열하고 미매칭 행을 따로 추가한다.
- ANY·ALL·EXISTS·집합 연산
- >ANY: 하나만 만족 / >ALL: 모두 만족. NULL·빈 집합은 별도로 해석한다.
- 윈도 함수·순위·뷰·인덱스
- 점수 90,90,80: RANK 1,1,3 / DENSE_RANK 1,1,2.
- 빈 집합·NULL·COUNT 마지막 점검
- WHERE는 TRUE만 남긴다. FALSE와 UNKNOWN은 모두 제외한다.
데이터베이스 이론
- 관계 모델과 키
- 최소성은 속성을 하나라도 빼면 더 이상 유일하게 식별하지 못한다는 뜻이다.
- 무결성과 설계 단계
- 개념 설계는 ER 모델, 논리 설계는 관계 스키마, 물리 설계는 저장 구조·접근 경로를 구체화한다.
- 함수 종속과 정규화
- 복합키 (학번,과목)에서 학번→학생이름은 부분 종속. 학번→학과코드→학과명은 이행 종속의 전형.
- BCNF와 분해
- R(학생,과목,교수), (학생,과목)→교수, 교수→과목이면 후보키 (학생,과목),(학생,교수). 3NF는 가능하지만 교수는 슈퍼키가 아니므로 BCNF 위반.
- ACID와 동시성
- Dirty Read는 미커밋 데이터 읽기, Non-repeatable Read는 같은 행 재조회 값 변화, Phantom Read는 같은 조건의 행 집합 변화.
- 회복·병행 제어·관계대수
- 관계대수 σ 선택=행, π 추출=열, ⋈ 조인, ÷ 디비전=모든 조건값과 관련된 대상.
- 격리 수준의 표준과 구현 차이
- 표준 Repeatable Read는 Phantom을 허용할 수 있으나 PostgreSQL 구현에서는 막는다.
“관계 모델과 키”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
최소성은 속성을 하나라도 빼면 더 이상 유일하게 식별하지 못한다는 뜻이다. 슈퍼키가 모두 후보키는 아니다. 외래키는 중복 가능하며 NOT NULL이 없다면 NULL이 허용될 수 있다.
“무결성과 설계 단계”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
개념 설계는 ER 모델, 논리 설계는 관계 스키마, 물리 설계는 저장 구조·접근 경로를 구체화한다. 성능을 위해 중복을 허용하는 반정규화는 일관성 유지 비용을 키울 수 있다.
학번→학과코드→학과명에서 학과명은 학번에 어떤 종속인가?
이행 함수 종속.
“BCNF와 분해”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
R(학생,과목,교수), (학생,과목)→교수, 교수→과목이면 후보키 (학생,과목),(학생,교수). 3NF는 가능하지만 교수는 슈퍼키가 아니므로 BCNF 위반. 정규형을 묻는다면 만족하는 가장 높은 단계를 답한다. 무손실 분해와 종속성 보존은 서로 다른 성질이다.
“ACID와 동시성”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
Dirty Read는 미커밋 데이터 읽기, Non-repeatable Read는 같은 행 재조회 값 변화, Phantom Read는 같은 조건의 행 집합 변화. 격리 수준마다 허용 현상이 다르다. 모든 트랜잭션이 항상 완벽한 직렬 실행처럼 보인다고 일반화하지 않는다.
“회복·병행 제어·관계대수”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
관계대수 σ 선택=행, π 추출=열, ⋈ 조인, ÷ 디비전=모든 조건값과 관련된 대상. 잠금 단위가 커지면 관리 비용은 줄지만 동시성이 낮아지기 쉽다. 2PL이 교착상태 자체를 없애지는 않는다.
같은 조건 SELECT를 다시 실행했더니 새 행이 생겼다. 현상 이름은?
Phantom Read(팬텀 읽기). 기존 행 값의 변화인 Non-repeatable Read와 구별한다.
전체 핵심 14개 펼치기
- 관계 모델과 키
- 최소성은 속성을 하나라도 빼면 더 이상 유일하게 식별하지 못한다는 뜻이다.
- 무결성과 설계 단계
- 개념 설계는 ER 모델, 논리 설계는 관계 스키마, 물리 설계는 저장 구조·접근 경로를 구체화한다.
- 함수 종속과 정규화
- 복합키 (학번,과목)에서 학번→학생이름은 부분 종속. 학번→학과코드→학과명은 이행 종속의 전형.
- BCNF와 분해
- R(학생,과목,교수), (학생,과목)→교수, 교수→과목이면 후보키 (학생,과목),(학생,교수). 3NF는 가능하지만 교수는 슈퍼키가 아니므로 BCNF 위반.
- ACID와 동시성
- Dirty Read는 미커밋 데이터 읽기, Non-repeatable Read는 같은 행 재조회 값 변화, Phantom Read는 같은 조건의 행 집합 변화.
- 회복·병행 제어·관계대수
- 관계대수 σ 선택=행, π 추출=열, ⋈ 조인, ÷ 디비전=모든 조건값과 관련된 대상.
- NoSQL과 CAP 정리
- 분할 내성은 분산 환경에서 사실상 항상 고려 대상이므로, 실제로는 분할 상황에서 일관성과 가용성 중 무엇을 우선할지 선택하는 문제로 이해한다.
- ER 모델·개체·속성·관계
- 개체→테이블 / 속성→열 / 관계→외래키·연결 테이블. 식별자와 참여 조건도 확인한다.
- 후보키의 유일성·최소성 찾기
- 후보키 = 유일성 + 최소성. 최소성은 “속성 개수가 가장 작다”와 다르다.
- 이상 현상과 1NF→2NF→3NF 분해
- 1NF 원자값 / 2NF 부분 종속 제거 / 3NF 비주요 속성의 이행 종속 제거.
- BCNF·4NF·5NF와 반정규화
- BCNF 함수 종속 / 4NF 다치 종속 / 5NF 조인 종속.
- 병행 제어·격리 수준·잠금
- Dirty Read 미커밋 값 / Non-repeatable Read 같은 행의 값 변화 / Phantom 같은 조건의 행 집합 변화.
- 로그·UNDO·REDO·관계대수와 분산 DB
- “모든 필수 과목을 수강한 학생” → 디비전. 관계해석은 원하는 조건을 표현하는 비절차적 관점.
- 격리 수준의 표준과 구현 차이
- 표준 Repeatable Read는 Phantom을 허용할 수 있으나 PostgreSQL 구현에서는 막는다.
요구사항·소프트웨어 설계
- 요구사항과 개발 모형
- 애자일은 짧은 반복과 피드백. 스크럼의 제품 백로그·스프린트 백로그·스프린트·회고를 구별한다.
- UML 관계와 다이어그램
- 일반화는 상속, 실체화는 인터페이스 구현, 연관은 연결, 의존은 사용. 집합은 빈 마름모, 합성은 찬 마름모를 전체 쪽에 표시한다.
- 응집도와 결합도
- 순차 응집은 앞 출력이 뒤 입력, 교환 응집은 같은 자료 사용. 스탬프 결합은 구조 전체 전달, 자료 결합은 필요한 자료 전달.
- 객체지향과 SOLID
- DIP는 고수준 정책이 저수준 구현의 구체 클래스에 직접 묶이지 않도록 추상에 의존한다.
- 생성 패턴 5개
- “관련 객체들의 제품군” → Abstract Factory. “복잡한 생성 순서” → Builder.
- 구조 패턴 7개
- “호환되지 않는 API 연결” Adapter / “추상·구현 계층 분리” Bridge / “대리인” Proxy.
- 스크럼 리뷰·회고와 책임 구별
- 리뷰는 제품 결과와 적응, 회고는 팀의 작업 방식 개선.
“요구사항과 개발 모형”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
애자일은 짧은 반복과 피드백. 스크럼의 제품 백로그·스프린트 백로그·스프린트·회고를 구별한다. “2초 이내 응답”은 비기능 요구. “주문을 취소한다”는 기능 요구다.
“UML 관계와 다이어그램”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
일반화는 상속, 실체화는 인터페이스 구현, 연관은 연결, 의존은 사용. 집합은 빈 마름모, 합성은 찬 마름모를 전체 쪽에 표시한다. 합성은 강한 소유 관계다. 화살표의 방향과 마름모가 있는 쪽을 뒤바꾸지 않는다.
“응집도와 결합도”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
순차 응집은 앞 출력이 뒤 입력, 교환 응집은 같은 자료 사용. 스탬프 결합은 구조 전체 전달, 자료 결합은 필요한 자료 전달. 외부 결합은 외부 형식·프로토콜·장치 의존, 공통 결합은 공통 전역자료 공유, 내용 결합은 내부 구현 직접 참조·수정이다.
“객체지향과 SOLID”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
DIP는 고수준 정책이 저수준 구현의 구체 클래스에 직접 묶이지 않도록 추상에 의존한다. 의존성 주입 DI는 DIP 구현을 도울 수 있는 기법이지 같은 용어가 아니다.
“생성 패턴 5개”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
“관련 객체들의 제품군” → Abstract Factory. “복잡한 생성 순서” → Builder. Singleton이 자동으로 스레드 안전을 보장하지는 않는다. Factory Method와 Abstract Factory의 초점을 구별한다.
객체에 기능을 감싸서 추가하는 구조 패턴은?
Decorator.
협업 방식과 도구를 돌아보고 다음 스프린트의 개선을 정하는 이벤트는?
Sprint Retrospective(스프린트 회고).
전체 핵심 18개 펼치기
- 요구사항과 개발 모형
- 애자일은 짧은 반복과 피드백. 스크럼의 제품 백로그·스프린트 백로그·스프린트·회고를 구별한다.
- UML 관계와 다이어그램
- 일반화는 상속, 실체화는 인터페이스 구현, 연관은 연결, 의존은 사용. 집합은 빈 마름모, 합성은 찬 마름모를 전체 쪽에 표시한다.
- 응집도와 결합도
- 순차 응집은 앞 출력이 뒤 입력, 교환 응집은 같은 자료 사용. 스탬프 결합은 구조 전체 전달, 자료 결합은 필요한 자료 전달.
- 객체지향과 SOLID
- DIP는 고수준 정책이 저수준 구현의 구체 클래스에 직접 묶이지 않도록 추상에 의존한다.
- 생성 패턴 5개
- “관련 객체들의 제품군” → Abstract Factory. “복잡한 생성 순서” → Builder.
- 구조 패턴 7개
- “호환되지 않는 API 연결” Adapter / “추상·구현 계층 분리” Bridge / “대리인” Proxy.
- 행위 패턴 11개
- 옵저버는 발행자와 구독자, 전략은 정렬·결제 방식 교체, 상태는 상태 변화에 따른 동작 변화로 떠올린다.
- UI와 아키텍처
- 계층형은 책임별 층, 클라이언트-서버는 요청·서비스 분리, 파이프-필터는 처리 단계의 흐름.
- 이벤트 기반 아키텍처와 CQRS
- 이벤트 기반 구조는 발행자와 구독자를 느슨하게 결합해 확장에 유리하지만 전체 흐름 추적이 어려워질 수 있다.
- 개발 모형·애자일·스크럼의 흐름
- 나선형의 핵심 단서 위험 분석. 리뷰는 제품, 회고는 작업 과정.
- 요구 도출·명세·검증·추적성
- 기능 요구: 수행할 기능 / 비기능 요구: 품질·제약·성능 수준.
- UML 관계를 화살표와 수명으로 구별
- 빈 마름모 집합 / 채운 마름모 합성 / 빈 삼각형 일반화·실체화.
- UML 다이어그램의 질문 단서
- 구조: 클래스·객체·패키지·컴포넌트·배치·복합 구조. 행위: 유스케이스·활동·상태·상호작용.
- 응집도·결합도를 사례로 판단
- 응집 약→강: 우연·논리·시간·절차·통신·순차·기능. 결합 약→강: 자료·스탬프·제어·외부·공통·내용.
- SOLID를 위반 사례로 이해
- 단일 책임·개방 폐쇄·리스코프 치환·인터페이스 분리·의존 역전.
- 디자인 패턴을 상황으로 연결하기
- 패턴 선택은 구현 모양보다 해결하려는 목적을 본다.
- MVC·계층·UI 설계와 서버 책임
- UI 원칙 직관성·유효성·학습성·유연성. 책임 분리는 변경 영향을 줄인다.
- 스크럼 리뷰·회고와 책임 구별
- 리뷰는 제품 결과와 적응, 회고는 팀의 작업 방식 개선.
테스트·품질
- 테스트 수준과 목적
- Verification은 명세에 맞게 만들었는가, Validation은 실제 목적·사용자 요구에 맞는가.
- 블랙박스 기법
- 유효 정수 1~100의 경계 후보: 0,1,2,99,100,101.
- 화이트박스 커버리지
- A OR B에 (T,F),(F,T)는 각 조건 T/F를 포함하지만 전체 결과는 두 번 모두 T라 결정 커버리지가 부족하다.
- 통합 테스트 도구
- 스텁=호출되는 가짜 하위 모듈, 드라이버=호출해 주는 가짜 상위 모듈.
- 복잡도·오라클·성능
- 참 오라클 전체 결과, 샘플링 일부 입력, 휴리스틱 일부+추정, 일관성 이전/다른 결과 비교. 성능은 처리량·응답시간·경과시간·자원 사용률.
- 품질과 유지보수
- 수정 유지보수=결함 수정, 적응=환경 변화, 완전=기능·성능 개선, 예방=미래 장애 예방.
“테스트 수준과 목적”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
Verification은 명세에 맞게 만들었는가, Validation은 실제 목적·사용자 요구에 맞는가. 재테스트는 수정된 결함의 해결 확인, 회귀는 주변 기존 기능이 깨지지 않았는지 확인이다.
“블랙박스 기법”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
유효 정수 1~100의 경계 후보: 0,1,2,99,100,101. 대표값 50만 검사하면 경계 오류를 놓친다. 경계값과 동등 분할을 혼동하지 않는다.
“화이트박스 커버리지”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
A OR B에 (T,F),(F,T)는 각 조건 T/F를 포함하지만 전체 결과는 두 번 모두 T라 결정 커버리지가 부족하다. 실제 언어의 단락 평가 때문에 평가되지 않은 조건이 생길 수 있다. 논리 조합표와 실제 평가 횟수를 구분한다.
“통합 테스트 도구”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
스텁=호출되는 가짜 하위 모듈, 드라이버=호출해 주는 가짜 상위 모듈. 목·스텁의 실무 용법과 시험의 통합 순서 문제를 섞지 말 것.
“복잡도·오라클·성능”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
참 오라클 전체 결과, 샘플링 일부 입력, 휴리스틱 일부+추정, 일관성 이전/다른 결과 비교. 성능은 처리량·응답시간·경과시간·자원 사용률. 복잡도에서 E는 간선, N은 노드. 프로그램 줄 수를 N으로 넣지 않는다.
“품질과 유지보수”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
수정 유지보수=결함 수정, 적응=환경 변화, 완전=기능·성능 개선, 예방=미래 장애 예방. 최신 표준과 구판 8특성 목록을 동일하다고 단정하지 않는다. 주어진 표준 연도와 보기의 표현을 확인한다.
전체 핵심 12개 펼치기
- 테스트 수준과 목적
- Verification은 명세에 맞게 만들었는가, Validation은 실제 목적·사용자 요구에 맞는가.
- 블랙박스 기법
- 유효 정수 1~100의 경계 후보: 0,1,2,99,100,101.
- 화이트박스 커버리지
- A OR B에 (T,F),(F,T)는 각 조건 T/F를 포함하지만 전체 결과는 두 번 모두 T라 결정 커버리지가 부족하다.
- 통합 테스트 도구
- 스텁=호출되는 가짜 하위 모듈, 드라이버=호출해 주는 가짜 상위 모듈.
- 복잡도·오라클·성능
- 참 오라클 전체 결과, 샘플링 일부 입력, 휴리스틱 일부+추정, 일관성 이전/다른 결과 비교. 성능은 처리량·응답시간·경과시간·자원 사용률.
- 품질과 유지보수
- 수정 유지보수=결함 수정, 적응=환경 변화, 완전=기능·성능 개선, 예방=미래 장애 예방.
- 정적 분석과 TDD·BDD
- TDD 순서: 실패하는 테스트 작성 → 통과시키는 최소 코드 → 리팩터링.
- 동등 분할·경계값·결정 테이블
- 동등 분할 대표값, 경계값 경계 안팎, 결정 테이블 조건 조합.
- 문장·결정·조건·MC/DC를 표로 확인
- 각 테스트의 A·B·판정 결과를 표로 적고 기준을 따로 검사한다.
- 순환 복잡도·테스트 수준·통합 순서
- E 간선, N 노드. 코드 줄 수로 노드를 세지 않는다.
- 정적·동적 테스트와 결함 관리
- Verification: 명세대로 만들었나 / Validation: 사용자에게 필요한 것을 만들었나.
- 성능 테스트·오라클·품질
- 결함 수정=수정 / OS 변화 대응=적응 / 기능 개선=완전 / 미래 문제 예방=예방.
네트워크
- OSI 7계층
- 허브 L1, 일반 L2 스위치 L2, 라우터 L3. TCP/IP 4계층은 네트워크 접근·인터넷·전송·응용.
- TCP·UDP와 주요 프로토콜
- HTTP 80, HTTPS 443, SSH 22, DNS 53, SMTP 25. DNS는 UDP와 TCP 모두 사용. DHCP는 주소 설정, ARP는 로컬 IPv4 주소에 대응하는 링크 계층 주소 확인.
- 서브넷의 기본
- /24=256주소, /26=64주소, /28=16주소. 마지막 옥텟 마스크 192,224,240은 블록 크기 64,32,16.
- 손으로 계산하는 예
- 네트워크 .64 / 브로드캐스트 .127 / 호스트 .65~.126 / 사용 가능 62개.
- 라우팅과 오류·흐름 제어
- Stop-and-Wait는 확인 후 다음 전송, Sliding Window는 여러 프레임을 허용. Go-Back-N은 오류 이후 연속 재전송, Selective Repeat는 필요한 것만 재전송.
- HDLC와 주소 변환
- NAT는 주소 변환, PAT는 포트를 함께 사용. 사설 IPv4: 10/8, 172.16/12, 192.168/16.
- 서브넷 범위를 블록으로 검산
- 192.168.10.130/26: 네트워크 .128, 브로드캐스트 .191, 통상 사용 호스트 .129~.190(62개).
“OSI 7계층”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
허브 L1, 일반 L2 스위치 L2, 라우터 L3. TCP/IP 4계층은 네트워크 접근·인터넷·전송·응용. 실제 장비는 여러 계층 기능을 통합할 수 있다. 문제에 별도 조건이 없다면 전통적 분류로 푼다.
“TCP·UDP와 주요 프로토콜”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
HTTP 80, HTTPS 443, SSH 22, DNS 53, SMTP 25. DNS는 UDP와 TCP 모두 사용. DHCP는 주소 설정, ARP는 로컬 IPv4 주소에 대응하는 링크 계층 주소 확인. HTTPS라고 항상 TCP만 쓰는 것은 아니다. HTTP/3는 QUIC/UDP를 사용한다. 시험이 묻는 프로토콜 범위를 확인한다.
“서브넷의 기본”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
/24=256주소, /26=64주소, /28=16주소. 마지막 옥텟 마스크 192,224,240은 블록 크기 64,32,16. /31 점대점과 /32는 일반적인 -2 규칙의 예외다. 서브넷의 크기와 사용 가능한 호스트 수를 구별한다.
이 주소의 전체 주소 수와 일반 호스트 수는?
64주소, 62호스트.
“라우팅과 오류·흐름 제어”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
Stop-and-Wait는 확인 후 다음 전송, Sliding Window는 여러 프레임을 허용. Go-Back-N은 오류 이후 연속 재전송, Selective Repeat는 필요한 것만 재전송. CRC는 오류 검출이지 암호화·인증이 아니다. RIP의 16홉은 도달 불가다.
“HDLC와 주소 변환”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
NAT는 주소 변환, PAT는 포트를 함께 사용. 사설 IPv4: 10/8, 172.16/12, 192.168/16. 172.x 전체가 사설은 아니다. 172.16.0.0~172.31.255.255 범위다.
192.168.10.77/27의 네트워크와 브로드캐스트는?
192.168.10.64 / 192.168.10.95. 77은 64~95 블록에 속한다.
전체 핵심 14개 펼치기
- OSI 7계층
- 허브 L1, 일반 L2 스위치 L2, 라우터 L3. TCP/IP 4계층은 네트워크 접근·인터넷·전송·응용.
- TCP·UDP와 주요 프로토콜
- HTTP 80, HTTPS 443, SSH 22, DNS 53, SMTP 25. DNS는 UDP와 TCP 모두 사용. DHCP는 주소 설정, ARP는 로컬 IPv4 주소에 대응하는 링크 계층 주소 확인.
- 서브넷의 기본
- /24=256주소, /26=64주소, /28=16주소. 마지막 옥텟 마스크 192,224,240은 블록 크기 64,32,16.
- 손으로 계산하는 예
- 네트워크 .64 / 브로드캐스트 .127 / 호스트 .65~.126 / 사용 가능 62개.
- 라우팅과 오류·흐름 제어
- Stop-and-Wait는 확인 후 다음 전송, Sliding Window는 여러 프레임을 허용. Go-Back-N은 오류 이후 연속 재전송, Selective Repeat는 필요한 것만 재전송.
- HDLC와 주소 변환
- NAT는 주소 변환, PAT는 포트를 함께 사용. 사설 IPv4: 10/8, 172.16/12, 192.168/16.
- URL·가상 네트워크
- SDN은 제어 평면과 데이터 평면 분리, NFV는 네트워크 기능을 소프트웨어로 가상화.
- HTTP 상태 코드와 무상태성
- 401은 인증(누구인지) 실패, 403은 인가(권한) 실패로 구분한다.
- 계층·캡슐화·주소·포트
- 비트→프레임→패킷→세그먼트/데이터그램→응용 데이터.
- TCP 연결·흐름 제어·혼잡 제어
- SYN→SYN/ACK→ACK. 흐름=수신자, 혼잡=네트워크.
- DNS·DHCP·ARP·ICMP와 포트
- DNS 이름 / DHCP 설정 / ARP IPv4-MAC / ICMP 진단.
- 서브넷 /23·VLSM·호스트 수 역산
- 50호스트→64주소 블록→/26→사용 가능 62. 네트워크·브로드캐스트는 제외.
- 라우팅·IPv6·오류 검출
- IPv4 32비트 / IPv6 128비트. CRC는 검출, 해밍 코드 등은 조건에 따라 정정도 가능.
- 서브넷 범위를 블록으로 검산
- 192.168.10.130/26: 네트워크 .128, 브로드캐스트 .191, 통상 사용 호스트 .129~.190(62개).
운영체제
- 프로세스와 스레드
- 상태: 생성→준비→실행→대기→준비→종료. 문맥 교환은 실행 상태 저장·복구.
- 스케줄링 공식
- HRN 우선순위=(대기+서비스)/서비스. 숫자가 큰 작업을 먼저 선택한다.
- SRT 손풀이
- 대기 A=9-0-6=3, B=3-1-2=0, C=4-2-1=1. 평균 4/3.
- 페이지 교체
- 처음 빈 프레임에 적재할 때도 페이지 부재다. LRU는 적중 때도 최근 사용 순서를 바꾼다.
- 메모리와 교착상태
- 예방은 조건을 깨기, 회피는 안전 상태 유지(은행가), 탐지는 발생 확인, 회복은 중단·선점 등.
- 동기화·디스크·RAID
- RAID 0 스트라이핑·복구 중복 없음 / 1 미러링 / 5 분산 패리티·디스크 1개 장애 대응 / 6 이중 패리티·2개 장애 대응.
- 선점 계산에서 도착·완료·응답 분리
- SRT는 최초 실행시간이 아니라 매 시점의 남은 실행시간으로 선택한다.
“프로세스와 스레드”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
상태: 생성→준비→실행→대기→준비→종료. 문맥 교환은 실행 상태 저장·복구. 대기는 CPU를 기다리는 준비 상태와 다르다. I/O 완료를 기다리는 상태다.
“스케줄링 공식”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
HRN 우선순위=(대기+서비스)/서비스. 숫자가 큰 작업을 먼저 선택한다. SRT는 원래 총 실행시간이 아니라 현재 남은 시간을 비교한다. 동률 처리 규칙은 문제 조건을 따른다.
이 예의 A 응답시간은?
0. A는 도착 즉시 최초 실행했다. 대기시간3과 다르다.
“페이지 교체”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
처음 빈 프레임에 적재할 때도 페이지 부재다. LRU는 적중 때도 최근 사용 순서를 바꾼다. FIFO는 적중했다고 적재 순서가 바뀌지 않는다. OPT는 미래 참조열이 있어야 계산할 수 있다.
“메모리와 교착상태”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
예방은 조건을 깨기, 회피는 안전 상태 유지(은행가), 탐지는 발생 확인, 회복은 중단·선점 등. 교착 회피와 예방을 같은 뜻으로 쓰지 않는다. 스래싱은 페이지 교체가 과도하여 유효 작업이 줄어드는 현상이다.
“동기화·디스크·RAID”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
RAID 0 스트라이핑·복구 중복 없음 / 1 미러링 / 5 분산 패리티·디스크 1개 장애 대응 / 6 이중 패리티·2개 장애 대응. RAID는 백업을 대체하지 않는다. 삭제·오염이 복제되는 것은 별도 문제다.
P1(도착0,실행8), P2(도착1,실행2)를 SRT로 실행하면 평균 대기시간은?
1. P1은 0~1, P2는 1~3, P1은 3~10. 대기는 P1=2, P2=0이다.
전체 핵심 14개 펼치기
- 프로세스와 스레드
- 상태: 생성→준비→실행→대기→준비→종료. 문맥 교환은 실행 상태 저장·복구.
- 스케줄링 공식
- HRN 우선순위=(대기+서비스)/서비스. 숫자가 큰 작업을 먼저 선택한다.
- SRT 손풀이
- 대기 A=9-0-6=3, B=3-1-2=0, C=4-2-1=1. 평균 4/3.
- 페이지 교체
- 처음 빈 프레임에 적재할 때도 페이지 부재다. LRU는 적중 때도 최근 사용 순서를 바꾼다.
- 메모리와 교착상태
- 예방은 조건을 깨기, 회피는 안전 상태 유지(은행가), 탐지는 발생 확인, 회복은 중단·선점 등.
- 동기화·디스크·RAID
- RAID 0 스트라이핑·복구 중복 없음 / 1 미러링 / 5 분산 패리티·디스크 1개 장애 대응 / 6 이중 패리티·2개 장애 대응.
- 세마포어 동작 추적
- 뮤텍스는 점유한 주체가 있는 상호배제 도구, 세마포어는 개수 기반의 신호 도구로 구분한다.
- CPU 스케줄링 계산의 출발점
- 도착·완료·최초 실행을 시간축에서 읽고 공식을 적용한다.
- RR·HRN·기아·에이징
- RR은 큐 회전, HRN은 큰 비율 우선, 에이징은 오래 기다린 작업 배려.
- FIFO·LRU·OPT 페이지 교체 추적표
- FIFO 적중 시 순서 유지 / LRU 적중 시 최근 사용 갱신.
- 페이징·주소 변환·단편화
- 페이징 고정 크기·내부 단편화 / 세그먼트 가변 크기·외부 단편화.
- 교착·안전 상태·세마포어
- 안전 상태는 완료 가능한 순서가 존재. 불안전 상태가 즉시 교착이라는 뜻은 아니다.
- 디스크 이동량·파일·UNIX 권한·RAID
- 이동량은 인접 방문 위치 차이 절댓값의 합. chmod 754 → rwxr-xr--.
- 선점 계산에서 도착·완료·응답 분리
- SRT는 최초 실행시간이 아니라 매 시점의 남은 실행시간으로 선택한다.
보안·신기술
- 보안 목표와 접근통제
- DAC 소유자 재량 / MAC 보안 등급·정책 강제 / RBAC 역할 / ABAC 속성 기반.
- 암호·해시·전자서명
- AES 대칭 / RSA 공개키 / SHA-256 해시. 기밀 전송은 수신자 공개키 암호화, 서명은 송신자 개인키 서명.
- 웹 공격
- SQLi는 매개변수화 질의, XSS는 출력 문맥에 맞는 인코딩, CSRF는 토큰·쿠키 정책·출처 검증, SSRF는 대상 제한으로 대응.
- 네트워크 공격
- DDoS는 다수 출발지, DRDoS는 반사 서버들을 이용. ARP 스푸핑은 IP-MAC 대응을 속인다.
- 악성코드와 운영 보안
- IDS 탐지 / IPS 차단 / WAF 웹 요청 방어 / DLP 정보 유출 방지 / NAC 네트워크 접근통제.
- 관리체계·개발 보안
- 비밀번호는 평문이나 빠른 단순 해시만으로 보관하지 않고 salt와 적절한 비밀번호 해싱을 사용한다.
- 공격명을 쓰기 전에 실행 주체 확인
- 브라우저 스크립트=XSS, 사용자 권한 요청=CSRF, DB 질의 변조=SQLi, 서버의 대리 요청=SSRF.
“보안 목표와 접근통제”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
DAC 소유자 재량 / MAC 보안 등급·정책 강제 / RBAC 역할 / ABAC 속성 기반. 감사 로그·부인 방지·책임 추적은 CIA와 관련되지만 같은 용어가 아니다.
“암호·해시·전자서명”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
AES 대칭 / RSA 공개키 / SHA-256 해시. 기밀 전송은 수신자 공개키 암호화, 서명은 송신자 개인키 서명. 해시만으로 송신자 인증이 되지 않는다. MAC/HMAC은 공유 비밀키로 무결성과 인증을 제공한다.
“웹 공격”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
SQLi는 매개변수화 질의, XSS는 출력 문맥에 맞는 인코딩, CSRF는 토큰·쿠키 정책·출처 검증, SSRF는 대상 제한으로 대응. CORS는 인증·인가를 대신하지 않는다. XSS와 CSRF를 “스크립트 공격”으로 뭉뚱그리지 않는다.
“네트워크 공격”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
DDoS는 다수 출발지, DRDoS는 반사 서버들을 이용. ARP 스푸핑은 IP-MAC 대응을 속인다. 공격의 결과가 서비스 거부라고 해서 전부 같은 세부 이름은 아니다. 패킷·주소·연결의 단서를 읽는다.
“악성코드와 운영 보안”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
IDS 탐지 / IPS 차단 / WAF 웹 요청 방어 / DLP 정보 유출 방지 / NAC 네트워크 접근통제. 백신이나 WAF 하나만으로 모든 공격을 막는다고 쓰지 않는다. 통제의 범위가 다르다.
“관리체계·개발 보안”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
비밀번호는 평문이나 빠른 단순 해시만으로 보관하지 않고 salt와 적절한 비밀번호 해싱을 사용한다. salt는 같은 비밀번호의 동일 해시 노출과 사전 계산 공격을 줄이지만 그 자체가 비밀키는 아니다.
서버의 URL 가져오기 기능을 악용해 내부 관리 주소에 요청한다. 공격은?
SSRF. 요청의 실행 주체가 서버다.
전체 핵심 16개 펼치기
- 보안 목표와 접근통제
- DAC 소유자 재량 / MAC 보안 등급·정책 강제 / RBAC 역할 / ABAC 속성 기반.
- 암호·해시·전자서명
- AES 대칭 / RSA 공개키 / SHA-256 해시. 기밀 전송은 수신자 공개키 암호화, 서명은 송신자 개인키 서명.
- 웹 공격
- SQLi는 매개변수화 질의, XSS는 출력 문맥에 맞는 인코딩, CSRF는 토큰·쿠키 정책·출처 검증, SSRF는 대상 제한으로 대응.
- 네트워크 공격
- DDoS는 다수 출발지, DRDoS는 반사 서버들을 이용. ARP 스푸핑은 IP-MAC 대응을 속인다.
- 악성코드와 운영 보안
- IDS 탐지 / IPS 차단 / WAF 웹 요청 방어 / DLP 정보 유출 방지 / NAC 네트워크 접근통제.
- 관리체계·개발 보안
- 비밀번호는 평문이나 빠른 단순 해시만으로 보관하지 않고 salt와 적절한 비밀번호 해싱을 사용한다.
- 신기술 묶음
- 블록체인=분산 원장·합의·연결 구조 / 디지털 트윈=실물과 대응하는 디지털 모델 / SIEM=보안 이벤트 수집·상관분석.
- 클라우드 네이티브·생성형 AI 확장 용어
- RAG는 모델을 재학습하는 것이 아니라 검색한 문서를 프롬프트에 덧붙여 근거로 쓰는 방식이다. 제로 트러스트의 핵심은 "절대 신뢰하지 말고 항상 검증하라".
- 기밀성·무결성·가용성과 인증·인가
- CIA 기밀성·무결성·가용성. 신원 확인→권한 검사→기록·감사.
- 대칭키·공개키·해시·서명·인증서
- AES·DES·3DES·SEED·ARIA 대칭키 / RSA 공개키 / SHA 계열 해시.
- 접근통제 모델·Bell-LaPadula·Biba
- BLP 기밀성: 상위 읽기·하위 쓰기 금지 / Biba 무결성: 하위 읽기·상위 쓰기 금지.
- 공격 단서로 XSS·CSRF·SQLi·SSRF 구별
- SQLi 매개변수화 / XSS 출력 문맥 인코딩 / CSRF 토큰·출처·쿠키 정책 / SSRF 대상·네트워크 제한.
- DoS·사회공학·악성코드 용어
- DDoS 다수 출발지 / DRDoS 반사·증폭. 공격 이름은 패킷·전파·유도 단서로 판별.
- 개발 보안·TOCTOU·장비·관리
- 위협은 잠재 원인, 취약성은 약점, 위험은 발생 가능성과 영향의 관점.
- 신기술을 서비스·구조·목적으로 묶기
- 블록체인 분산 원장 / 디지털 트윈 실물 대응 모델 / IoT 연결 사물 / MSA 작은 서비스 분리.
- 공격명을 쓰기 전에 실행 주체 확인
- 브라우저 스크립트=XSS, 사용자 권한 요청=CSRF, DB 질의 변조=SQLi, 서버의 대리 요청=SSRF.
통합 구현·배포
- 연계와 인터페이스
- JSON은 데이터 교환 형식, XML은 태그 기반 구조, SOAP는 XML 기반 메시지 프로토콜, REST는 자원 중심 제약의 아키텍처 스타일.
- 미들웨어와 트랜잭션 연계
- 동기는 응답 대기, 비동기는 요청과 결과 처리를 분리. 송수신 전문의 헤더·데이터·종료 구조와 오류 처리를 구분한다.
- 형상 관리와 배포
- Git commit은 로컬 이력, push는 원격 반영. 릴리스 노트는 변경·수정·알려진 문제·영향을 전달한다.
- 패키징과 문서·DRM
- DRM 구성: 콘텐츠 제공자, 배포자, 클리어링 하우스, 소비자, 패키저, 컨트롤러 등을 역할로 이해한다.
- 추가 단답 점검
- Full 백업 전체 / Incremental 직전 백업 이후 / Differential 마지막 전체 백업 이후 변경분.
- IaC와 GitOps
- IaC는 수동으로 콘솔에서 서버를 설정하는 대신 코드로 재현 가능하게 만든다. GitOps는 배포 상태를 Git 커밋 이력으로 추적할 수 있게 한다.
- 안전성과 멱등성 답안 구별
- GET·HEAD는 안전/멱등, PUT·DELETE는 멱등, POST는 일반적으로 멱등 보장이 없다.
“연계와 인터페이스”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
JSON은 데이터 교환 형식, XML은 태그 기반 구조, SOAP는 XML 기반 메시지 프로토콜, REST는 자원 중심 제약의 아키텍처 스타일. REST를 JSON 형식의 다른 이름으로 쓰지 않는다. HTTP API라고 모두 REST 제약을 충족하는 것도 아니다.
“미들웨어와 트랜잭션 연계”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
동기는 응답 대기, 비동기는 요청과 결과 처리를 분리. 송수신 전문의 헤더·데이터·종료 구조와 오류 처리를 구분한다. 비동기라고 처리 성공이 보장되지 않는다. 재시도·중복 처리·순서 정책을 설계해야 한다.
“형상 관리와 배포”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
Git commit은 로컬 이력, push는 원격 반영. 릴리스 노트는 변경·수정·알려진 문제·영향을 전달한다. 버전 관리 도구를 쓰는 것만으로 변경 승인·감사까지 포함하는 형상 관리 전체를 수행한 것은 아니다.
“패키징과 문서·DRM”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
DRM 구성: 콘텐츠 제공자, 배포자, 클리어링 하우스, 소비자, 패키저, 컨트롤러 등을 역할로 이해한다. 릴리스 노트는 기능 변경 안내이며 설치 절차 전체를 대신하지 않는다.
“추가 단답 점검”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
Full 백업 전체 / Incremental 직전 백업 이후 / Differential 마지막 전체 백업 이후 변경분. 증분 복구에는 전체 백업과 이후 필요한 증분 체인이 필요하다. 차등은 마지막 전체와 마지막 차등이 핵심이다.
“IaC와 GitOps”의 핵심 규칙과 헷갈리는 지점을 설명해 보세요.
IaC는 수동으로 콘솔에서 서버를 설정하는 대신 코드로 재현 가능하게 만든다. GitOps는 배포 상태를 Git 커밋 이력으로 추적할 수 있게 한다. IaC를 사용한다고 코드 자체의 품질(테스트·리뷰)이 자동으로 보장되는 것은 아니다.
DELETE의 첫 응답은 204, 다음은 404이면 멱등성이 깨졌는가?
아니다. 멱등성은 응답 코드의 동일성이 아니라 의도된 서버 효과로 판단한다.
전체 핵심 12개 펼치기
- 연계와 인터페이스
- JSON은 데이터 교환 형식, XML은 태그 기반 구조, SOAP는 XML 기반 메시지 프로토콜, REST는 자원 중심 제약의 아키텍처 스타일.
- 미들웨어와 트랜잭션 연계
- 동기는 응답 대기, 비동기는 요청과 결과 처리를 분리. 송수신 전문의 헤더·데이터·종료 구조와 오류 처리를 구분한다.
- 형상 관리와 배포
- Git commit은 로컬 이력, push는 원격 반영. 릴리스 노트는 변경·수정·알려진 문제·영향을 전달한다.
- 패키징과 문서·DRM
- DRM 구성: 콘텐츠 제공자, 배포자, 클리어링 하우스, 소비자, 패키저, 컨트롤러 등을 역할로 이해한다.
- 추가 단답 점검
- Full 백업 전체 / Incremental 직전 백업 이후 / Differential 마지막 전체 백업 이후 변경분.
- IaC와 GitOps
- IaC는 수동으로 콘솔에서 서버를 설정하는 대신 코드로 재현 가능하게 만든다. GitOps는 배포 상태를 Git 커밋 이력으로 추적할 수 있게 한다.
- EAI 유형·ESB·연계 흐름
- 직접 연결 P2P / 중앙 연결 허브 / 공통 통로 버스. 송신→변환→전달→검증→반영.
- REST·HTTP·SOAP·WSDL·UDDI
- REST 스타일 / HTTP 통신 의미 / JSON·XML 형식 / SOAP 메시지 / WSDL 기술 / UDDI 탐색.
- 미들웨어·DB 연결·서버 흐름
- RPC 호출 / MOM 메시지 / ORB 객체 / TP 모니터 트랜잭션 / WAS 응용 실행.
- 형상 관리·빌드·배포 전략
- CI 통합·검증 / 전달 배포 가능 / 자동 배포 운영 반영. Blue-Green 두 환경, Canary 일부, Rolling 순차.
- 백업·복구·RPO·RTO·패키징·DRM
- RPO 데이터 손실 허용 / RTO 복구 소요 목표. 증분 직전 이후, 차등 전체 이후.
- 안전성과 멱등성 답안 구별
- GET·HEAD는 안전/멱등, PUT·DELETE는 멱등, POST는 일반적으로 멱등 보장이 없다.
답안을 내기 전
- 출력의 공백·줄바꿈·대소문자·소수 자릿수
- SQL의 NULL·중복·미매칭 행과 ORDER BY 조건
- 계산의 도착시간·선점·단위·반올림 조건
- 빈칸 순서, 요구한 한글·영문 용어, 모순되는 복수 답안