21-1
아래 Python 프로그램을 실행한 결과를 적으시오.
class Route:
stops = ["Yeosu", "Ulsan", "Namwon", "Gunsan", "Iksan"]
r = Route()
tag = ''
for s in r.stops:
tag = s[0] + tag
print(tag)IGNUY
[해설]
stops는 클래스 변수라 인스턴스 r을 통해서도 그대로 읽힌다. s[0]은 각 문자열의 첫 글자다.
- 반복마다 첫 글자를 기존 tag의 앞에 붙인다(s[0] + tag).
- Y → UY → NUY → GNUY → IGNUY
첫 글자들이 역순으로 쌓여 IGNUY가 출력된다.
21-1
다음 설명에 해당하는 언어를 영문 약어로 적으시오.
- 웹 서비스를 외부에 공개할 때 그 서비스를 어떻게 호출하는지 적어 둔 명세다.
- 서비스 이름, 접근 위치(URL), 주고받는 메시지 형식, 사용하는 프로토콜 등을 담는다.
- XML 문법으로 작성되며, UDDI에 등록되고 SOAP과 함께 쓰인다.
WSDL
[해설]
웹 서비스의 이름·위치·메시지 형식·프로토콜을 XML로 기술하는 것은 WSDL(Web Services Description Language)이다.
- SOAP: XML 메시지를 HTTP 등으로 주고받는 통신 규약
- UDDI: 웹 서비스 정보(WSDL)를 등록·검색하는 저장소
- WSDL: 서비스 호출 방법을 적은 명세서
21-1
빈칸 ( ㉮ )에 공통으로 들어갈 공격 기법을 적으시오.
- ( ㉮ )은(는) 말 그대로 '세션을 가로챈다'는 뜻이다.
- 공격자는 RST 패킷 등으로 피해자와 서버 사이의 정상 연결을 끊은 뒤, 다시 연결될 때 피해자 대신 자신이 그 연결을 차지한다.
- ( ㉮ )은(는) 세션 관리의 취약점을 노리는 공격이다.
세션 하이재킹(Session Hijacking)
[해설]
세션 하이재킹(Session Hijacking)은 인증이 끝난 정상 세션을 가로채 사용자 행세를 하는 공격이다.
공격자는 RST 패킷으로 기존 연결을 끊고 TCP 순서 번호를 맞춰 끼어든다. 웹에서는 세션 ID(쿠키)를 훔쳐 같은 효과를 낸다.
이 과정에서 생기는 비정상적인 ACK 폭주(ACK Storm)가 탐지 단서가 된다. 대응책은 SSH·TLS 같은 암호화 통신과 세션 ID 주기적 재발급이다.
21-1
데이터베이스 설계 단계에 관한 설명이다. 빈칸 ①~③에 알맞은 단계를 [보기]에서 골라 적으시오.
- ( ① ): 사용할 DBMS의 특성과 성능을 따져 데이터가 실제로 저장될 구조(레코드 형식, 인덱스, 접근 경로 등)를 정한다. 테이블 정의서 같은 명세가 나온다.
- ( ② ): 현실 세계를 추상화해 DBMS와 무관한 개념 구조로 표현한다. 대표 산출물은 E-R 다이어그램이다.
- ( ③ ): 목표 DBMS가 따르는 데이터 모델(관계형 등)에 맞춰 스키마를 설계하고, 정규화와 트랜잭션 인터페이스 설계를 수행한다.
[보기] 개념적 설계, 구현, 논리적 설계, 물리적 설계, 요구사항 분석
① 물리적 설계
② 개념적 설계
③ 논리적 설계
[해설]
데이터베이스 설계는 요구사항 분석 → 개념적 설계 → 논리적 설계 → 물리적 설계 → 구현 순서로 진행한다.
- 물리적 설계는 사용할 DBMS에 맞춰 레코드 형식·인덱스·접근 경로 같은 실제 저장 구조를 정한다.
- 개념적 설계는 DBMS와 무관하게 현실 세계를 추상화하며, 대표 산출물은 E-R 다이어그램이다.
- 논리적 설계는 관계형 같은 목표 데이터 모델에 맞춰 스키마를 만들고 정규화를 수행한다.
외우는 요령: DBMS와 무관하면 개념적 설계, 데이터 모델에 맞추면 논리적 설계, DBMS의 저장 구조를 정하면 물리적 설계다.
21-1
아래 Java 프로그램의 출력 결과를 적으시오.
public class Main {
public static void main(String[] args) {
int[][] grid = { {12, 7}, {3, 9, 21, 5}, {40} };
System.out.println(grid.length);
System.out.println(grid[1].length);
System.out.println(grid[2][0]);
System.out.println(grid[1][2]);
System.out.println(grid[0][1]);
}
}3
4
40
21
7
[해설]
grid는 행의 길이가 제각각인 가변 배열이며, 인덱스는 0부터 센다.
- grid.length — 행의 개수이므로 3이다.
- grid[1].length — 둘째 행 {3, 9, 21, 5}의 원소 수이므로 4다.
- grid[2][0] — 셋째 행 {40}의 첫 원소이므로 40이다.
- grid[1][2] — 둘째 행의 셋째 원소이므로 21이다.
- grid[0][1] — 첫째 행의 둘째 원소이므로 7이다.
println은 값을 찍을 때 줄을 바꾸므로 한 줄에 하나씩 출력된다.
21-1
요구사항을 성격에 따라 나눈 것이다. 빈칸 ①, ②에 알맞은 요구사항 유형을 적으시오.
- ( ① ) 요구사항: 시스템이 무엇을 해야 하는지, 즉 제공해야 할 기능과 서비스를 정의한다. (예: 회원은 주문 내역을 조회할 수 있어야 한다.)
- ( ② ) 요구사항: 기능 그 자체가 아니라 성능·보안·가용성처럼 시스템이 갖춰야 할 품질이나 구축상의 제약을 정의한다. (예: 조회 응답은 2초 안에 와야 한다.)
① 기능
② 비기능
[해설]
요구사항은 시스템이 무엇을 하는지(기능)와 그 일을 어떤 품질로 어떤 제약 아래 하는지(비기능)로 나뉜다.
- 기능 요구사항 — 주문 내역 조회처럼 시스템이 제공할 기능과 서비스를 정한다.
- 비기능 요구사항 — 응답 2초 이내처럼 성능·보안·가용성 같은 품질과 제약을 정한다.
외우는 요령: "~할 수 있어야 한다"는 동작이면 기능 요구사항이고, 수치나 품질 기준이면 비기능 요구사항이다.
21-1
다음 설명에 해당하는 기술을 영문 약어로 적으시오.
- 운영체제에서 서로 독립된 프로세스들이 데이터를 주고받거나 동작을 맞추기 위해 쓰는 방법을 통틀어 이른다.
- 구현 수단으로 공유 메모리, 파이프, 소켓, 메시지 큐, 세마포어 등이 있다.
IPC
[해설]
독립된 프로세스들이 데이터를 주고받거나 동작을 맞추는 기법을 통틀어 IPC(Inter-Process Communication)라고 한다.
프로세스는 서로 메모리 공간이 분리돼 있다. 그래서 커널이 제공하는 공유 메모리·파이프·소켓·메시지 큐·세마포어 같은 통로를 거쳐야 데이터를 주고받을 수 있다.
21-1
다음 설명에 해당하는 접근 통제 방식을 적으시오.
- 객체에 대한 접근 허용 여부를 사용자 개인이나 그가 속한 그룹의 식별자(ID)를 기준으로 판단한다.
- 객체의 소유자나 접근 권한을 가진 사용자가 자기 재량으로 다른 사용자에게 권한을 넘겨줄 수 있다.
임의적 접근 통제(DAC)
[해설]
임의적 접근 통제(DAC, Discretionary Access Control)는 사용자나 그룹의 신원(ID)을 기준으로 접근 허용 여부를 판단한다.
객체 소유자가 자기 재량으로 다른 사용자에게 권한을 넘겨줄 수 있어서 '임의적'이라고 부른다. 유닉스 파일 권한(소유자·그룹·기타의 rwx)이 대표적인 예다.
혼동 주의: 보안 등급을 비교해 시스템이 강제로 정하는 방식은 MAC, 직무 역할에 따라 권한을 주는 방식은 RBAC다.
21-1
아래 Java 프로그램을 실행했을 때 출력되는 내용을 적으시오.
public class Main {
public static void main(String[] args) {
int k, t;
for (k = 10, t = 0; k > 0; k -= 3) {
t += k;
System.out.print(k);
if (k - 3 > 0)
System.out.print("+");
else
System.out.print("=" + t);
}
}
}10+7+4+1=22
[해설]
for 문은 k를 10부터 3씩 줄이며 k > 0인 동안 반복하고, 매번 t에 k를 더한 뒤 k를 출력한다. 다음 값 k−3이 양수면 '+'를, 아니면 '='와 누적합 t를 출력한다.
k=10 → t=10, 10+ 출력
k=7 → t=17, 7+ 출력
k=4 → t=21, 4+ 출력
k=1 → t=22, 1−3 < 0이므로 1=22 출력
print는 줄을 바꾸지 않아 출력이 한 줄로 이어지고, 최종 결과는 10+7+4+1=22다.
21-1
다음 설명에 해당하는 솔루션을 영문 약어로 적으시오.
- 기업 안에서 서로 다른 플랫폼 위에 구축된 여러 애플리케이션을 연결해, 정보를 전달·연계·통합할 수 있게 한다.
- 구축 유형으로 Point-to-Point, Hub & Spoke, Message Bus, Hybrid 등이 있다.
EAI
[해설]
기업 내 이기종 애플리케이션을 통합하는 솔루션은 EAI(Enterprise Application Integration)이다.
- Point-to-Point: 애플리케이션을 1:1로 직접 연결
- Hub & Spoke: 가운데 허브가 중계(허브 장애 시 전체 영향)
- Message Bus: 미들웨어(버스)를 두고 확장성을 확보
- Hybrid: 그룹 내부는 허브, 그룹 간은 버스 방식
웹 서비스 기반으로 서비스 단위 통합을 하는 방식은 ESB로 구별된다.
21-1
블랙박스 테스트 기법에 관한 예시이다. ①, ②에 해당하는 기법의 이름을 각각 적으시오.
- ① 입력 조건이 '1 이상 100 이하'일 때, 오류가 몰리기 쉬운 경계 근처인 0, 1, 100, 101을 테스트 값으로 고른다.
- ② 입력 값을 같은 결과가 기대되는 몇 개의 묶음(유효 구간·무효 구간)으로 나누고, 묶음마다 대표값 하나씩만 골라 검사한다.
① 경계값 분석
② 동등 분할
[해설]
두 기법 모두 내부 코드를 보지 않고 입력과 출력 명세만 보고 테스트 값을 고르는 블랙박스 테스트 기법이다.
- 경계값 분석 — 오류가 몰리기 쉬운 경계값과 그 바로 안팎의 값(0, 1, 100, 101)을 고른다.
- 동등 분할 — 입력을 유효 구간과 무효 구간으로 나누고, 구간마다 대표값 하나만 검사한다.
동등 분할은 동치 분할(Equivalence Partitioning)이라고도 한다. 이 밖의 블랙박스 기법으로는 원인-결과 그래프, 오류 예측, 비교 검사가 있다.
21-1
다음 설명에 해당하는 프로토콜을 영문 약어로 적으시오.
- 하드디스크가 없는 단말처럼 자신의 IP 주소를 보관하지 못하는 호스트가 사용한다.
- 자신의 물리 주소(MAC 주소)를 담은 요청을 브로드캐스트하면, 서버가 그에 대응하는 IP 주소를 알려 준다.
- IP 주소로 MAC 주소를 찾는 프로토콜과 반대 방향으로 동작해 '역순' 주소 결정 프로토콜이라 부른다.
RARP
[해설]
RARP(Reverse Address Resolution Protocol)는 자기 MAC 주소를 브로드캐스트해 RARP 서버로부터 자기 IP 주소를 받아 오는 프로토콜이다.
디스크가 없는 단말은 부팅할 때 자기 IP 주소를 모르기 때문에 이 방식으로 주소를 얻는다. 이름의 Reverse는 IP 주소로 MAC 주소를 찾는 ARP와 방향이 반대라는 뜻이다.
혼동 주의: RARP는 서브넷 마스크와 게이트웨이를 알려 줄 수 없어 오늘날에는 BOOTP와 DHCP로 대체되었다.
21-1
아래 C 프로그램의 실행 결과를 적으시오.
#include <stdio.h>
struct Item {
char code[8];
int qty;
};
int main(void) {
struct Item box[] = { {"AX", 14}, {"BQ", 27}, {"CM", 9}, {"DT", 33} };
struct Item *p = box;
p += 2;
printf("%s\n", p->code);
p--;
printf("%d\n", p->qty);
return 0;
}CM
27
[해설]
구조체 포인터에 정수를 더하면 구조체 크기 단위로 이동한다. p는 box[0]에서 출발한다.
- p += 2 → box[2]를 가리킴 → p->code는 "CM"
- p-- → box[1]로 한 칸 되돌아옴 → p->qty는 27
출력은 CM과 27 두 줄이다.
21-1
테스트 단계에 관한 설명이다. 빈칸 ①, ②에 알맞은 것을 [보기]에서 골라 기호로 적으시오.
- ( ① ): 함수·서브루틴 같은 개별 모듈이 제 기능을 하는지 따로 떼어 확인한다.
- ( ② ): 모듈들을 결합하면서 모듈 사이의 인터페이스가 올바르게 동작하는지 확인한다.
[보기] ㉠ 단위 테스트 ㉡ 알파 테스트 ㉢ 인수 테스트 ㉣ 시스템 테스트 ㉤ 통합 테스트 ㉥ 회귀 테스트
① ㉠
② ㉤
[해설]
테스트는 단위 → 통합 → 시스템 → 인수 순서로 범위를 넓혀 가며 진행한다.
- 단위 테스트는 함수·서브루틴 같은 개별 모듈을 따로 떼어 기능이 맞는지 검사한다.
- 통합 테스트는 모듈을 결합하면서 모듈 사이 인터페이스의 오류를 찾는다.
혼동 주의: 통합된 시스템 전체가 요구사항을 만족하는지 보는 것은 시스템 테스트이고, 수정 후 기존 기능을 다시 확인하는 것은 회귀 테스트다.
21-1
IP 주소 체계에 관한 설명이다. 빈칸 ①, ②에 알맞은 숫자를 적으시오.
- IPv6 주소는 총 ( ① )비트이며, 16비트씩 8개 필드로 나눠 16진수로 표기한다.
- IPv4 주소는 총 32비트이며, ( ② )비트씩 4개 부분(옥텟)으로 나눠 점으로 구분한 10진수로 표기한다.
① 128
② 8
[해설]
IPv6 주소 길이는 128비트로, IPv4 주소 고갈 문제를 해결하려고 도입되었다.
IPv4는 32비트를 4개 옥텟으로 나누므로 한 부분은 8비트이고, 각 부분은 0~255 값을 가진다.
21-1
다음 설명에 해당하는 데이터 모델링 기법을 적으시오.
- 정규화를 마친 엔터티·속성·관계를 대상으로 한다.
- 조회 성능을 높이고 개발·운영을 단순하게 하려고, 일부러 데이터를 중복시키거나 테이블을 합치거나 나눈다.
- 정규화 원칙을 의도적으로 위배하므로 데이터 일관성 관리 부담이 늘어난다.
반정규화(De-normalization)
[해설]
성능을 위해 정규화된 모델에 중복·통합·분리를 적용하는 것은 반정규화(De-normalization)다. 비정규화·역정규화라고도 한다.
- 테이블 통합·분할(수평·수직)
- 중복 테이블 추가(집계·이력 테이블)
- 중복 컬럼·파생 컬럼 추가
조인이 줄어 조회가 빨라지는 대신, 중복 데이터를 맞추는 갱신 비용이 커진다.
21-1
[재고] 테이블에 아래 SQL 문을 실행했을 때 출력되는 값을 숫자로만 적으시오.
[재고]
| 번호 | 수량 |
|---|---|
| 110 | 60 |
| 220 | 30 |
| 330 | 80 |
| 440 | 20 |
| 550 | 90 |
SELECT COUNT(*) FROM 재고
WHERE 번호 >= 300 AND 수량 >= 50 OR 번호 = 220;3
[해설]
논리 연산자는 AND가 OR에 앞서 계산되므로 조건은 (번호 >= 300 AND 수량 >= 50) OR 번호 = 220이다.
- 앞 괄호를 만족: 330(80), 550(90)
- 번호 = 220: 220(수량 30)도 포함
- 110은 번호가, 440은 수량이 조건에 못 미쳐 제외
해당 행은 220·330·550으로 COUNT(*) 결과는 3이다. OR를 먼저 묶어 계산하면 220이 빠져 2가 나오니 주의한다.
21-1
모듈 결합도에 관한 설명이다. 빈칸 ①~③에 알맞은 것을 [보기]에서 골라 기호로 적으시오.
- ( ① ): 한 모듈이 다른 모듈 내부의 변수나 기능을 직접 가져다 쓴다.
- ( ② ): 모듈 사이의 인터페이스로 배열·구조체·객체 같은 자료구조가 통째로 넘어간다.
- ( ③ ): 매개변수를 거치지 않고, 모듈 밖에 선언된 전역 변수를 함께 참조하고 고치면서 서로 영향을 주고받는다.
[보기] ㉠ 공통 결합도 ㉡ 내용 결합도 ㉢ 스탬프 결합도 ㉣ 외부 결합도 ㉤ 자료 결합도 ㉥ 제어 결합도
① ㉡
② ㉢
③ ㉠
[해설]
모듈 결합도는 모듈끼리 서로 의존하는 정도이며, 약할수록 좋은 설계다.
- 내용 결합도 — 다른 모듈 내부의 변수·기능을 직접 참조하는, 가장 강한 결합.
- 스탬프 결합도 — 배열·구조체 같은 자료구조를 통째로 넘기는 결합.
- 공통 결합도 — 매개변수 없이 전역 변수를 함께 참조·수정하는 결합.
결합도는 약한 것부터 자료 → 스탬프 → 제어 → 외부 → 공통 → 내용 순이다.
혼동 주의: 외부 결합도는 외부에서 선언한 데이터·통신 프로토콜을 참조하는 것이고, 전역 변수를 공유하는 것은 공통 결합도다.
21-1
아래 [도서] 릴레이션의 카디널리티(Cardinality)와 차수(Degree)를 각각 구하시오.
[도서]
| 도서번호 | 제목 | 저자 | 출판연도 |
|---|---|---|---|
| B301 | 자료구조 입문 | 한서진 | 2018 |
| B302 | 운영체제 이해 | 강도현 | 2020 |
| B303 | 네트워크 기초 | 윤채원 | 2019 |
| B304 | 데이터베이스 설계 | 정민호 | 2021 |
| B305 | 소프트웨어 공학 | 임하율 | 2017 |
(1) 카디널리티
(2) 차수
(1) 5
(2) 4
[해설]
카디널리티는 튜플(행)의 수로, B301~B305의 5다.
차수는 속성(열)의 수로, 도서번호·제목·저자·출판연도의 4다. 헤더 행은 튜플 수에 넣지 않는다.
21-1
데이터 모델의 구성 요소 세 가지에 관한 설명이다. 빈칸 ①~③에 알맞은 구성 요소를 적으시오.
- ( ① ): 데이터베이스에 저장된 실제 데이터를 처리(검색·삽입·삭제·갱신)하는 작업을 명세한다.
- ( ② ): 논리적으로 표현된 개체 타입들 사이의 관계, 즉 데이터가 어떤 모양으로 짜여 있는지를 나타낸다.
- ( ③ ): 데이터 무결성을 지키기 위해 저장될 수 있는 값에 거는 논리적 제약으로, 개체 무결성·참조 무결성 등이 있다.
① 연산(Operation)
② 구조(Structure)
③ 제약 조건(Constraint)
[해설]
데이터 모델은 구조·연산·제약 조건 세 가지 요소로 이루어진다.
- 연산은 저장된 데이터를 검색·삽입·삭제·갱신하는 작업을 명세한다.
- 구조는 개체 타입 사이의 관계, 즉 데이터가 어떤 모양으로 짜여 있는지를 나타낸다.
- 제약 조건은 개체 무결성·참조 무결성처럼 저장될 수 있는 값에 거는 논리적 제한이다.
외우는 요령: 구조는 정적인 성질, 연산은 동적인 성질, 제약 조건은 무결성을 지키는 규칙이다.