탑싯 2020 문제풀이(전 영역)

해잉·2022년 6월 23일
1

기술 영역

1.

최근 코로나-19 확산으로 인해 재택근무를 위한 환경으로 부각되고 있는 데스크톱 가상화(VDI, Virtual Desktop Infrastructure)에 대한 설명으로 올바르지 않은 것을 고르시오.
(1) 사용자의 데스크톱은 입출력을 위한 장치로만 사용된다.
(2) 사용자의 업무수행을 위한 데이터, 문서 등은 데스크톱에 저장된다.
(3) 서버에서 애플리케이션 실행결과가 데스크톱 환경에 이미지 형태로 전송된다.
(4) 클라이언트, 세션관리자, 가상머신(VM), 스토리지 등의 논리적 계층 구조로 구성된다.

해설
데스크톱 가상화(VDI)환경에서 사용자의 업무 수행을 위한 애플리케이션, 데이터, 문서 등은 서버에 저장되고, 서버에서 실행된 애플리케이션 실행 결과가 데스크톱 환경에 이미지 형태로 전송되어 사용자의 데스크톱은 입출력을 위한 장치로만 사용된다.

2.

[보기]에서 (ㄱ) 공통적으로 들어갈 알맞은 용어를 적으시오.

  • A 기업은 고객의 비밀번호의 안전한 관리를 일방향 암호화하여 저장하기로 결정
  • 고객의 비밀번호만 해쉬함수를 적용하여 저장, 관리하게 되면 레인보우(Rainbow) 공격 등에 취약하기 때문에 비밀번호에 (ㄱ) 값을 추가하여 해쉬 함수를 적용하고, (ㄱ) 값은 안전하게 보관하기로 결정

해설
답 : SALT
고객의 비밀번호 등의 안전한 관리를 위해 SHA-256 이상의 안전한 해쉬 함수를 사용해야 하며, 비밀번호에만 해쉬 함수를 적용할 경우 레인보우(Rainbow) 등과 같은 공격에 취약하기 때문에 SALT 값과 같은 임의의 문자열을 추가하여 해쉬함수를 적용하고, 사용된 SALT 값은 안전하게 보관해야 한다.

3.

[보기]의 DDL(Data Definition Langauge)문을 참고하여 아래 질문에 답하시오.
1) [보기]는 뷰(View)를 생성하기 위한 DDL문이다. 데이터베이스 뷰의 개념에 대해 서술하시오.(15점)

CREATE VIEW VIP고객 (고객아이디, 고객성명, 핸드폰번호)
	AS SELECT 고객아이디, 고객성명, 핸드폰번호
    	FROM 고객
        WHERE 등급 = 'VIP'
WITH CHECK OPTION;

해설
기본 테이블인 '고객' 테이블에서 등급이 VIP인 고객의 고객아이디, 고객성명, 핸드폰번호를 추출하여 VIP고객이라는 이름의 뷰를 생성한다.
뷰는 데이터 베이스에서 하나 이상의 기본 테이블로부터 유도되어 물리적으로는 존재하지 않는 논리적 가상 테이블이다.

2) [보기]의 밑줄 친 부분의 의미에 대해 서술하시오.(15점)

WITH CHECK OPTION;

해설
"VIP고객"뷰에서 등급이 VIP인 고객정보는 변경할 수 있지만, 등급이 VIP가 아닌 고객정보를 추가/변경/삭제가 불가하도록 제한한다.

뷰를 생성할 때 WITH CHECK OPTION을 사용하면, 뷰를 생성할 때의 조건에 해당하는 데이터에 대해서만 추가/변경/삭제가 가능하도록 제한한다.

[보기]의 클래스 다이어그램을 참고하여 아래 질문에 답하시오.
1. [보기-A]를 [보기-B] 설계 변경에 적용한 리팩토링 기법을 설명하시오.(10점)
2. [보기-B]의 SavingAccount 추상 클래스를 JAVA 코드로 구현하시오.(30점)

해설1
상위 클래스 추출(Extract Super Class)
여러 클래스에 포함된 유사한 기능의 필드나 메서드를 추출하여 상위클래스를 생성하고 공통 상위 클래스로 공유하도록 하는 리팩토링 기법

+) 하위 클래스가 가지는 공통된 필드, 메서드를 모아서 상위 클래스를 하나 만들고 하위 클래스는 상위 클래스로부터 상속받아 사용할 수 있도록 재사용성을 극대화하고 중복을 최소화하기 위해서 사용하는 리팩토링 기법

해설2

  • 클래스의 <<abstract>> 스테레오타입
  • 메서드의 {abstract} 프로퍼티
  • 접근제한자
  • 필드 타입, 메서드의 파라미터와 리턴 타입
abstract class SavingAccount
{
	protected int period;
    protected double rate;
    protected double money;
    public abstract double clacInterest();
}

+) UML 클래스의 표현

  • 가장 윗 부분: 클래스의 이름
  • 중간 부분: 속성 (클래스의 특징)
  • 마지막 부분: 연산 (클래스가 수행하는 책임)
  • 속성과 연산의 가시화를 정의한다.
    * UML에서는 접근제어자를 사용해 나타낸다.

비즈니스 영역

1.

다음 중 프로그램 저작권 보호 대상이 아닌 것은 무엇인가?
(1) 프로그램 소스코드
(2) 프로그램 목적코드
(3) 프로그램 구조 및 배열
(4) 문제 해결을 위한 절차나 방법으로서의 알고리즘

해설
프로그램 작성, 설정된 문제를 해결하기 위해서 사용한 프로그램 언어, 프로토콜, 알고리즘 해법 등은 보호의 대상에서 제외된다.

2.

[보기]는 1페이지 보고서의 일부이다. 보고서의 개선 사항으로 적절하지 않은 것은?

(1) 제목을 시스템 구축안으로 변경한다.
(2) 보고서에 작성 조직과 유관 조직을 추가한다.
(3) 현황/이슈 내용 중 훌륭한, 멋있는 등의 수식어구는 제외한다.
(4) 구축 절차를 수행 항목과 수행 기간으로 분류하여 표로 전환한다.

해설
원페이지 보고서에서는 문서의 내용을 바로 알 수 있도록 구성해야 한다. 제목만 보아도 바로 내용이 상상되게 끔 제목을 잘 잡는 것이 매우 중요하다. 수요자가 제목만 보고도 전체 내용이나 취지, 보고 성격을 알 수 있도록 내용을 최대한 포괄해야 하는데 되도록 20자 이내로 압축해서 표현하는 것이 좋다.

3.

[보기]는 SI업체 A사에서 발생가능한 위험에 대해 대응한 방식이다. A사의 위험 대응 전략은 무엇인지 고르시오.

A사는 차세대 프로젝트에서 인공지능 신기술에 대한 기술적 해결이 어려워, 인공지능 솔루션 공급사와 회의를 하여 공급사가 수행하기로 협의하고 프로젝트를 진행하기로 하였다.

(1) 회피(Avoid)
(2) 전가(Transfer)
(3) 완화(Mitigate)
(4) 수용(Accept)

해설
위험 대응 계획은 프로젝트 목표에 위협적인 요인은 경감시키고 기회는 증대시킬 수 있는 대안과 조치를 개발하는 프로세스이다. 부정적인 위험(위협)에 대한 전략은 회피, 전가, 완화, 수용으로 대응하고, 긍정적인 위험에 대한 전략은 활용, 분담, 증대, 수용으로 대응한다. A사는 고객사나 공급사로 영향력 및 대응의 주체를 제 3자에게 이동시키는 전가(Transfer) 전략을 활용하였다.

4.

[보기]의 [프로젝트 현황]에서 프로젝트 원가통제를 위한 CPI(Cost Performance Index)와 SPI(Schedule Performance Index) 각각 계산하여라.

해설
SPI = 0.9, CPI = 0.75

획득 가치 분석(Earned Value Management: EVM)

  • 범위, 일정, 자원의 측정치를 모두 결합하여, 성과와 진척열울 평가하는 방법론
  • 모든 분석 단위를 화폐로 계산하여 분석하는 방법

SPI : 프로젝트의 일정 효율을 계산
CPI : 프로젝트의 원가 효율을 계산

PV: 계획된 성과
EV: 획득한 성과
AC: 실제 사용 비용

SPI = EV / PV = 일정 성과 지수
CPI = EV / AC = 원가 성과 지수

SPI가 1보다 작으므로 일정지연이 예상되고 있다.
CPI가 1보다 작으므로 원가 초과가 예상된다.

5.

A사는 전년도에 도입한 CRM 시스템의 재무적 성과를 평가하기 위하여 ROI와 PP(Payback Period)를 활용하려고 한다. [보기]의 내용을 바탕으로 아래 물음에 답하시오.

* CRM 시스템 적용 결과 시스템 도입 전과 비교하여 40억원의 영업이익(순이익은 동일) 획득
* CRM 시스템 도입 위하여 개발 인건비 및 인프라 비용으로 150억원을 투자
* CRM 시스템 관련 50억원의 기타 비용 사용

1) A사의 CRM 시스템 도입 2개년 ROI를 구하시오. (15점)
2) A사의 CRM 시스템 도입시 PP(Payback Period)를 구하시오. (15점)

해설1
정답: 20%
재무적 성과평가의 한 종류인 ROI는 투자수익률로 총 비용 대비 순 효과의 비율을 구하는 재무적 방식이다.
ROI = 영업이익 / 투자비용 100
ROI = 40억원 / (150억원 + 50억원)
100 = 20%

해설2
정답: 5년
투자회수기간(Payback Period)는 투자비용을 언제 회수할 수 있는지에 초점을 맞추는 투자평가 기법으로 다른 요인들이 동일한 경우 투자회수시간이 짧을수록 좋은 투자로 평가합니다.
PP = 투자비용 / 연간이익
PP = (150억원 + 50억원) / 40억원 = 5년

6.

국내 프라이빗 클라우드 컴퓨팅 서비스 1위인 A기업은 퍼블릭 클라우드 컴퓨팅 영역으로의 사업 확장을 고려하고 있다. A기업은 IT전략 수립을 위해 비즈니스 환경 분석을 수행하고자 한다.
[보기1]의 상황을 참고하여 다음 (1), (2) 문제에 답하시오.

해설1
S : 프라이빗 클라우드 사업 영역에 대한 기술적 우위를 차지함
W : 프라이빗 클라우드를 주사업 영역으로 가지고 있어, 퍼블릭 클라우드 운영에 대한 인프라, 서비스 기반이 부족함
O : 2015년에 제정된 정부의 '클라우드 발전법', '클라우드 컴퓨팅 발전 기본 계획'으로 인해 공공 분야에서 클라우드에 대한 관심이 고조된 상태임.
T : AWS가 2016년 한국 내 클라우드 컴퓨팅 영역을 차지하기 위해 '서울 Region'을 가동하기 시작함.

해설2

  • 퍼블릭 클라우드 : 불특정 다수에게 IT 서비스를 인터넷을 통해 제공하는 형태
  • 프라이빗 클라우드 : 기업이 시스템 자원을 직접 소유하고 자신들의 회사 전용의 클라우드로 사용하는 형태

해설3

  • PaaS
  • 애플리케이션을 개발하거나 실행하기위한 시스템 기능을 서비스로 제공하며 데이터베이스, 개발 프레임워크, 실행 시에 필요한 라이브러리 및 모듈을 제공하는 클라우드 서비스 모델임

7.

최근 A회사에서는 기존 내부 직원용으로 사용하던 웹 응용프로그램을 대국민 서비스 용도로 변경하는 프로젝트를 진행 중에 있다. 프로젝트를 맡은 김PM은 '웹 접근성 및 호환성 준수', '모바일 지원', '보안성 강화'라는 3가지 목표를 가지고 업무를 수행하고자 한다. 다음 물음에 답하시오.
(1) '웹 접근성'과 '웹 호환성'의 개념을 각각 설명하시오. (30점)
(2) 김PM은 동일한 웹 응용프로그램을 PC뿐만 아니라 스마트폰이나 태블릿과 같은 모바일 기기에서도 동일하게 보여주기 위한 방법으로, '반응형 웹(Responsive Web)'과 '적응형 웹(Adaptive Web)'을 고려하고 있다. 반응형 웹과 적응형 웹의 개념을 각각 설명하시오. (30점)
(3) 김PM은 웹 응용프로그램의 보안성 검토를 요청한 결과, [보기]의 '수정 전'소스코드에서 SQL 삽입(Injection)공격에 취약점이 있다는 진단을 받았다. 이러한 보안 취약점은 시큐어 코딩(Secure Coding)을 통해 예방할 수 있다. [보기]의 소스코드를 '수정 후'와 같이 보안 취약점이 없도록 빈칸을 작성하시오. (preparedStatement 방식을 사용하도록 작성하며, 4줄 이내로 작성할 것) (40점)

해설

  • 웹 접근성 : 장애인, 고령자 등이 웹 사이트에서 제공하는 정보에 비장애인과 동등하게 접근하고 이해할 수 있도록 보장하는 것 or 인적, 환경적 요인에 제약 없는 웹 정보 접근
  • 웹 호환성 : 서비스 이용자 단말기의 하드웨어 및 소프트웨어 환경이 다른 경우에도 동등한 서비스를 제공하는 것 or 웹 브라우저 버전, 종류에 관계없는 웹 사이트 접근, 크로스 브라우징 or 웹표준 준수를 통한 브라우저 호환성 확보

해설2

  • 반응형 웹 : 한 번의 개발로 디스플레이 종류에 따라 화면 크기 및 해상도가 자동으로 조절돼 화면을 보여주는 방식

  • 적응형 웹 : 미리 정해진 몇 가지 화면 크기를 기준으로 두고 비율에 맞춰 페이지를 구성하는 방식

  • 반응형 웹과 적응형 웹의 차이점 : 반응형 웹은 한 번의 개발로 디스플레이 종류에 따라 화면 크기 및 해상도가 자동으로 조절되어 화면을 보여주는 방식인데 비해, 적응형 웹은 미리 정해진 몇 가지 화면 크기를 기준으로 두고 비율에 맞춰 페이지를 구성하는 방식이다

해설3

정답

String query = "SELECT * FROM ? WHERE Name = ?";
stmt = con.prepareStatement(query);
stmt.setString(1, tableName);
stmt.setString(1, name);
  • 안전한 코딩 기법
    - preparedStatement 클래스와 하위메소드 executeQuery(), exec8te(), executeUpdate()를 사용하는 것이 바람직하다.
    • preparedStatement 클래스를 사용할 수 없는 환경이라면, 입력 값을 필터링 처리한 후 사용한다. 필터링 기준은 SQL 구문제한, 특수문자 제한, 길이 제한을 복합적으로 사용한다.
    • 외부로부터 인자를 받는 preparedStatement 객체를 상수 스트림으로 생성하고, 인자 부분을 setXXX메소드로 설정하여, 외부의 입력이 쿼리문의 구조를 바꾸는 것을 방지하는 것이 필요하다.

출처
2020 TOPCIT 문제풀이 (전 영역)

0개의 댓글