20-2
아래 [MEMBER] 테이블의 MNAME 속성에 IDX_MNAME이라는 이름의 인덱스를 만드는 SQL 문을 작성하시오.
[MEMBER]
| MID | MNAME | POINT | CITY |
|---|---|---|---|
| 501 | 안소율 | 320 | 수원 |
| 502 | 백연우 | 150 | 청주 |
| 503 | 류태오 | 480 | 포항 |
| 504 | 진다솜 | 90 | 목포 |
CREATE INDEX IDX_MNAME ON MEMBER(MNAME);
[해설]
인덱스를 생성하는 SQL 구문은 CREATE INDEX 인덱스명 ON 테이블명(컬럼명)이다.
이 문항에서는 인덱스명에 IDX_MNAME, 테이블명에 MEMBER, 컬럼명에 MNAME을 넣는다. 그러면 CREATE INDEX IDX_MNAME ON MEMBER(MNAME);이 된다.
혼동 주의: 중복을 막으려면 CREATE UNIQUE INDEX를 쓰고, 인덱스를 삭제할 때는 DROP INDEX를 쓴다.
20-2
다음 설명에 해당하는 GoF 디자인 패턴을 영문 전체 이름으로 적으시오.
- 객체들 사이에 일대다(1:N) 의존 관계를 정의한다.
- 한 객체의 상태가 바뀌면 그 객체를 구독하는 다른 객체들에게 알림이 가고 자동으로 갱신된다.
- 상태를 가진 쪽과 알림을 받는 쪽이 서로의 구체 클래스를 몰라도 되도록 느슨하게 결합한다.
Observer Pattern
[해설]
일대다 의존 관계에서 한 객체의 상태 변화를 구독자들에게 자동으로 알리는 GoF 행위 패턴은 Observer Pattern이다.
관찰 대상(Subject)은 등록된 옵서버 목록만 알고, 상태가 바뀌면 각 옵서버의 갱신 메서드를 호출한다. 서로의 구체 클래스를 몰라도 되므로 느슨한 결합이 된다.
GUI 이벤트 리스너나 발행-구독(Pub/Sub) 구조가 대표적인 활용 예다.
20-2
빈칸 ( ㉮ )에 공통으로 들어갈 프로토콜의 이름을 적으시오.
- ( ㉮ )는 XML 형식의 메시지를 HTTP·HTTPS·SMTP 등에 실어 주고받는 웹 서비스용 통신 규약이다.
- 메시지는 봉투(Envelope), 헤더(Header), 본문(Body)으로 구성된다.
- 구조가 무겁다는 단점 때문에 ( ㉮ ) 대신 RESTful 방식을 쓰는 경우가 많다.
SOAP
[해설]
XML 메시지를 HTTP·HTTPS·SMTP 등에 실어 주고받는 웹 서비스 프로토콜은 SOAP(Simple Object Access Protocol)이다.
메시지는 Envelope(전체를 감싸는 봉투)·Header(인증·트랜잭션 같은 부가정보)·Body(실제 요청·응답 데이터)로 이뤄진다. XML 봉투 구조가 무거워서, 실무에서는 HTTP 메서드와 URI만으로 자원을 다루는 REST를 더 많이 쓴다.
혼동 주의: SOAP 서비스의 명세 언어는 WSDL이고, 서비스를 등록·검색하는 저장소는 UDDI다.
20-2
트랜잭션 제어 명령 중 ROLLBACK의 의미를 서술하시오.
트랜잭션 수행 중 오류 등으로 작업을 완료할 수 없을 때, 그때까지의 변경을 취소하고 트랜잭션 시작 전(또는 지정한 SAVEPOINT) 상태로 되돌리는 명령이다.
[해설]
ROLLBACK은 COMMIT·SAVEPOINT와 함께 트랜잭션 제어어(TCL)에 속하며, 트랜잭션의 원자성을 지키는 명령이다.
오류 등으로 작업을 끝낼 수 없을 때 아직 확정되지 않은 변경을 모두 취소해 트랜잭션 시작 전 상태로 되돌린다.
SAVEPOINT를 지정해 두었다면 ROLLBACK TO 저장점 이름으로 그 지점까지만 부분 취소할 수 있다.
20-2
아래 Java 프로그램의 실행 결과를 적으시오.
class Counter {
private int base;
public Counter(int base) {
this.base = base * 3;
}
public void show() {
System.out.println("base=" + base);
}
}
class StepCounter extends Counter {
public StepCounter(int base) {
super(base + 2);
super.show();
}
@Override
public void show() {
System.out.println("step");
}
}
public class Main {
public static void main(String[] args) {
Counter c = new StepCounter(4);
}
}base=18
[해설]
자식 객체를 만들면 자식 생성자 첫 줄의 super(...)가 부모 생성자를 먼저 실행한다.
StepCounter(4)는 super(4 + 2)를 호출하므로 부모 생성자에서 base가 정해진다.
base = 6 × 3 = 18
이어서 호출되는 super.show()는 재정의된 자식 show()가 아니라 부모 show()를 직접 부른다. 그래서 "step"이 아니라 base=18이 출력된다.
혼동 주의: super. 없이 show()만 불렀다면 동적 바인딩 때문에 "step"이 출력된다.
20-2
다음 설명에 해당하는 웹 기술을 적으시오.
- 브라우저에 내장된 XMLHttpRequest 객체로 서버와 데이터를 주고받는다.
- 화면 전체를 다시 불러오지 않고, 바뀐 부분에 필요한 데이터만 받아 그 영역만 고친다.
- 요청을 보낸 뒤 응답을 기다리지 않고 사용자가 계속 페이지를 조작할 수 있어, HTML만으로는 어려운 상호작용을 구현한다.
AJAX
[해설]
XMLHttpRequest로 서버와 비동기 통신해 페이지 일부만 갱신하는 기술은 AJAX(Asynchronous JavaScript and XML)이다.
비동기라서 응답을 기다리는 동안에도 사용자가 페이지를 계속 조작할 수 있고, 바뀐 영역만 고쳐 전체 새로고침이 필요 없다.
검색어 자동 완성·새로고침 없는 댓글 등록이 대표 사례이며, 이름과 달리 오늘날에는 주로 JSON을 주고받는다.
20-2
다음 설명에 해당하는 소프트웨어 개발 방법론을 적으시오.
- 문서와 절차보다 사람 사이의 소통과 협업을 중시한다.
- 짧은 주기로 동작하는 결과물을 반복해서 내놓으며 요구사항 변화에 빠르게 대응한다.
- 단계를 순서대로 한 번씩만 거치는 폭포수(Waterfall) 모형과 대비되는 경량 방법론이다.
애자일(Agile)
[해설]
문서·절차에 앞서 사람 간 소통을 중시하고 짧은 주기로 반복·점진 개발하는 경량 방법론은 애자일(Agile)이다.
애자일은 변화 대응을 계획 준수에 앞세우며, 동작하는 결과물을 자주 내놓는다.
단계를 순서대로 한 번씩만 거치는 폭포수 모형과 정반대 성격이다.
혼동 주의: 스크럼(Scrum)·XP·칸반은 애자일을 실천하는 구체 기법이지, 방법론 전체의 이름이 아니다.
20-2
재해 복구 계획에서 쓰는 지표에 관한 설명이다. 아래 내용이 가리키는 용어를 영문 약어로 적으시오.
- 화재·정전·서버 장애 같은 사고로 서비스가 멈춘 순간을 기점으로 한다.
- 업무가 복구되어 정상 운영으로 돌아오기까지 허용되는 시간의 목표치다.
- 이 값이 짧을수록 더 비싼 복구 체계(핫 사이트 등)가 필요하다.
RTO(Recovery Time Objective)
[해설]
중단 시점부터 정상 가동까지의 목표 시간은 RTO(Recovery Time Objective, 목표 복구 시간)이다.
함께 나오는 RPO(Recovery Point Objective)는 시간이 아니라 데이터를 어느 시점까지 되살릴지, 곧 허용 가능한 데이터 손실 구간을 뜻한다.
RTO를 줄이려면 미러 사이트·핫 사이트처럼 대기 설비를 늘려야 하므로 비용과 맞바꾸는 관계다.
20-2
[학생] 테이블은 학번(VARCHAR), 이름(VARCHAR), 학년(NUMBER), 전공(VARCHAR), 학점(NUMBER), 이메일(VARCHAR) 속성으로 이루어져 있다.
[학생]
| 학번 | 이름 | 학년 | 전공 | 학점 | 이메일 |
|---|---|---|---|---|---|
| 21301 | 윤서진 | 1 | 경영학 | 3.8 | sj@univ.ac.kr |
| 21452 | 조하람 | 2 | 통계학 | 4.1 | hr@univ.ac.kr |
| 21517 | 남궁현 | 3 | 컴퓨터공학 | 3.5 | nh@univ.ac.kr |
| 21689 | 채유나 | 4 | 전자공학 | 4.3 | yn@univ.ac.kr |
| 21744 | 편도훈 | 3 | 수학 | 3.9 | dh@univ.ac.kr |
아래 조건을 모두 만족하는 SQL 문을 작성하시오.
- 3학년 또는 4학년인 학생의 학번과 이름을 조회한다.
- 조건절에는 반드시 IN 연산자를 사용한다.
SELECT 학번, 이름 FROM 학생 WHERE 학년 IN (3, 4);
[해설]
여러 값 중 하나와 일치하는지 검사할 때는 IN (값 목록)을 쓴다. 따라서 조건은 WHERE 학년 IN (3, 4)가 된다.
이는 WHERE 학년 = 3 OR 학년 = 4와 결과가 같다. 위 표에서는 남궁현·채유나·편도훈 세 행이 조회된다.
20-2
데이터베이스 설계 시 데이터 모델링은 아래 순서로 진행된다. 빈칸 ①~③에 들어갈 단계를 [보기]에서 골라 적으시오.
요구사항 분석 → ( ① ) → ( ② ) → ( ③ )
[보기] 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링
① 개념적 데이터 모델링
② 논리적 데이터 모델링
③ 물리적 데이터 모델링
[해설]
추상도가 높은 것부터 낮은 것 순서로 개념적 → 논리적 → 물리적 모델링을 거친다.
- 개념적: 업무 요구를 엔터티·관계로 추상화해 E-R 다이어그램을 그린다(DBMS 무관).
- 논리적: 관계 스키마로 변환하고 정규화를 수행한다(특정 DBMS 무관).
- 물리적: 특정 DBMS에 맞춰 테이블·인덱스·저장 구조를 정의한다.
20-2
웹 애플리케이션을 노리는 공격 기법 가운데 SQL 삽입(Injection)의 개념을 설명하시오.
입력값 검증이 미흡한 응용 프로그램의 취약점을 이용해, 입력란 등에 악의적인 SQL 구문을 끼워 넣어 실행시킴으로써 데이터베이스의 정보를 빼내거나 조작하는 공격이다.
[해설]
SQL 삽입(SQL Injection)은 입력값이 SQL 문에 그대로 이어 붙는 입력값 검증 미흡 취약점을 노리는 웹 공격이다.
공격자가 로그인 창 같은 입력란에 ' OR '1'='1 같은 구문을 넣으면 WHERE 조건이 항상 참이 된다. 그러면 인증을 우회하거나 DB 정보를 빼내고 조작할 수 있다.
대응책은 PreparedStatement(바인딩 변수) 사용, 입력값 검증·특수문자 필터링, 오류 메시지 노출 제한이다.
20-2
다음 설명에 해당하는 용어를 영문 약어로 적으시오.
- 누구나 자유롭게 쓸 수 있도록 공개된 데이터(Open Data)에, 웹상의 다른 데이터와 서로 연결되는 구조(Linked Data)를 결합한 개념이다.
- 데이터마다 고유 URI를 부여하고 RDF 형식으로 표현해, 전 세계의 공개 정보를 하나의 거대한 데이터 망처럼 엮는다.
LOD
[해설]
공개 데이터(Open Data)와 연결 데이터(Linked Data)를 합친 개념은 LOD(Linked Open Data)다.
각 데이터에 고유 URI를 붙이고 주어-서술어-목적어 형태의 RDF 형식으로 기술해, 웹 전체를 하나의 데이터 망으로 잇는다.
팀 버너스리가 시맨틱 웹을 구현하는 방법으로 제안한 개념이다.
20-2
아래 Python 프로그램의 실행 결과를 적으시오.
tags = {'서울', '대전', '부산'}
tags.add('광주')
tags.add('서울')
tags.remove('대전')
tags.update(['울산', '부산', '제주', '광주'])
print(len(tags), sorted(tags))5 ['광주', '부산', '서울', '울산', '제주']
[해설]
세트(set)는 중복을 허용하지 않는 자료형이라 이미 있는 값을 add·update로 넣어도 한 번만 남는다.
- 초기: {서울, 대전, 부산}
- add('광주') → 4개, add('서울') → 이미 있어 변화 없음
- remove('대전') → {서울, 부산, 광주}
- update로 울산·제주만 새로 추가되고 부산·광주는 중복이라 무시 → 5개
len은 5이다. 세트는 순서가 없으므로 sorted로 정렬한 리스트가 찍혀 ['광주', '부산', '서울', '울산', '제주']가 출력된다.
20-2
다음 설명에 해당하는 운영체제를 적으시오.
- 리눅스 커널 위에서 동작하는 휴대용 기기용 소프트웨어 스택으로, 운영체제·미들웨어·사용자 인터페이스·기본 앱(웹 브라우저, 이메일, 문자 메시지 등)을 포함한다.
- 개발자는 Java나 Kotlin으로 앱을 작성하며, 컴파일된 바이트코드를 실행하는 런타임과 라이브러리가 함께 제공된다.
- 구글이 주도해 오픈 소스로 공개했다.
안드로이드(Android)
[해설]
리눅스 커널 기반으로 구글이 오픈 소스로 공개한 모바일 소프트웨어 스택은 안드로이드(Android)이다.
운영체제·미들웨어·UI·기본 앱을 함께 제공하며, Java·Kotlin으로 작성한 앱의 바이트코드는 ART(Android Runtime)에서 실행된다.
혼동 주의: iOS는 리눅스가 아닌 다윈(XNU) 커널 기반이고 Swift·Objective-C를 쓴다.
20-2
빈칸 ( ㉮ )에 공통으로 들어갈 용어를 적으시오.
- 소프트웨어 개발 전 과정에서 산출물의 변경 사항을 식별·통제하고 이력을 추적하는 활동을 ( ㉮ )(이)라 한다.
- ( ㉮ )를 지원하는 대표 도구로 Git, SVN, CVS 등이 있다.
형상 관리(SCM)
[해설]
산출물의 변경을 식별·통제하고 이력을 추적하는 활동은 형상 관리(SCM, Software Configuration Management)이다.
절차는 형상 식별 → 형상 통제 → 형상 감사 → 형상 기록(보고) 순이다. Git은 분산형, SVN·CVS는 중앙 집중형 버전 관리 도구다.
20-2
다음 설명에 해당하는 테스트 도구의 종류를 적으시오.
- 프로그램을 실행하지 않은 채 소스 코드 자체를 검사한다.
- 코딩 표준 위반, 코딩 스타일, 코드 복잡도, 잠재 결함 등을 찾아낸다.
- PMD, Checkstyle, SonarQube 등이 이에 속한다.
정적 분석 도구
[해설]
프로그램을 실행하지 않고 소스 코드만 분석하는 테스트 도구는 정적 분석 도구(Static Analysis Tool)이다.
코딩 표준 위반·복잡도·잠재 결함을 실행 전에 찾아내며 PMD, Checkstyle, SonarQube가 대표적이다.
혼동 주의: 프로그램을 실제로 실행하며 메모리 누수·성능 병목을 찾는 것은 동적 분석 도구(Valgrind 등)이다.
20-2
아래 Java 프로그램이 실행되면 "Ring"이 출력된다. 밑줄 친 빈칸에 들어갈 키워드를 적으시오.
class Vehicle {
public String sound() {
return "...";
}
}
class Bike extends Vehicle {
@Override
public String sound() {
return "Ring";
}
}
public class Main {
public static void main(String[] args) {
Vehicle v = ________ Bike();
System.out.println(v.sound());
}
}new
[해설]
클래스로부터 객체(인스턴스)를 만들 때는 new 연산자로 생성자를 호출한다.
Bike 객체를 부모 타입 변수 v에 담는 것은 업캐스팅이다. 변수 타입이 Vehicle이어도 실제 객체가 Bike이므로 재정의(오버라이딩)된 Bike.sound()가 실행되어 "Ring"이 출력된다.
20-2
리눅스에서 a.txt 파일의 권한을 아래와 같이 설정하는 명령어를 한 줄로 작성하시오. 권한은 8진수 숫자로 지정한다.
| 대상 | 부여할 권한 |
|---|---|
| 소유자 | 읽기, 쓰기, 실행 |
| 그룹 | 읽기, 실행 |
| 그 외 사용자 | 실행 |
chmod 751 a.txt
[해설]
권한 변경 명령은 chmod이며, 읽기 r=4, 쓰기 w=2, 실행 x=1을 더해 대상별 숫자를 만든다.
- 소유자 rwx = 4+2+1 = 7
- 그룹 r-x = 4+0+1 = 5
- 그 외 --x = 0+0+1 = 1
따라서 chmod 751 a.txt이며, 결과 권한 문자열은 rwxr-x--x이다. 소유자를 바꾸는 chown과 혼동하지 않는다.
20-2
다음 설명에 해당하는 보안 프로토콜을 적으시오.
- OSI 3계층, 즉 IP 계층에서 패킷 단위로 보안을 제공하는 표준 기술이다.
- 인증 헤더(AH)로 무결성과 출처 인증을, 캡슐화 보안 페이로드(ESP)로 기밀성(암호화)을 보장한다.
- 터널 모드와 전송 모드를 지원해 VPN 구축에 널리 쓰인다.
IPSec
[해설]
AH와 ESP를 써서 IP 계층(네트워크 계층)에서 패킷 단위로 보안을 제공하는 표준은 IPSec(IP Security)이다.
- AH(인증 헤더)는 무결성과 출처 인증을 제공하지만 암호화는 하지 않는다.
- ESP(캡슐화 보안 페이로드)는 암호화로 기밀성을 제공한다.
- 터널 모드는 IP 패킷 전체를 감싸고, 전송 모드는 페이로드만 보호한다.
혼동 주의: SSL/TLS는 전송 계층 위에서 동작하고, IPSec은 그보다 아래인 3계층에서 동작한다.
20-2
UI(사용자 인터페이스) 설계 원칙을 정리한 것이다. 빈칸에 알맞은 원칙을 적으시오.
- 직관성: 처음 보는 사용자도 쉽게 이해하고 조작할 수 있어야 한다.
- ( ㉮ ): 사용자가 이루려는 목표를 정확하고 완벽하게 달성할 수 있어야 한다.
- 학습성: 누구나 사용법을 쉽게 익히고 기억할 수 있어야 한다.
- 유연성: 사용자의 요구를 최대한 받아들이고 실수를 최소화하며 대응할 수 있어야 한다.
유효성
[해설]
사용자의 목적을 정확·완벽하게 이루게 하는 원칙은 유효성이다.
UI 설계의 4대 원칙은 직관성·유효성·학습성·유연성으로 묶어 외운다. 쉽게 이해(직관성), 목표 달성(유효성), 쉽게 배움(학습성), 오류 수용(유연성)으로 구별한다.