정보처리기사 실기가 2020년 부터 답단형으로 출제가 되면서 굉장히 많은 변화가 있었습니다. 제가 정보처리기사를 취득했던 2015년에는 답항보기에서 문제에 해당되는 정답을 찾아서 적는 사실상 객관식 시험이었고, 이후 3년 간 답항보기가 없어진 필답형에서 현재는 단답형으로 변화했는데요. 난이도만 놓고 보면 필답형이었던 2016년도가 가장 어렵지 않았을까 생각이 되지만, 출제 방식이 단답형으로 변화되면서 시험 과목의 범위가 굉장히 넓어졌다는 것을 생각할 때 전공자가 아닌 분들에게는 굉장히 어려운 시험이라고 생각됩니다.
신기술과 전산영어를 어느 정도 보고 알고리즘과 데이터베이스만 공부하면 거의 통과였던 과거 시험과 달리, 현재는 소프트웨어 구축 사업에 해당되는 요구사항 확인부터 인터페이스 및 화면 설계, 프로그래밍, 보안까지 범위가 확연히 넓어진 걸 볼 수 있죠. 사실 필기에서는 과목 명칭이 소프트웨어 개발과 관련된 이름으로 변경되었을 뿐 문제 유형 자체는 크게 변화가 없었는데 실기에서 만큼은 굉장히 큰 변화가 있어서 이전에 취득한 사람들보다 더 많은 시간을 들여서 공부를 해야하는 것으로 보입니다.
많은 분들이 정보처리기사를 취득하는 이유가 개발자에게 가장 기본이 되는 자격증이면서, SI 프로젝트에 투입될 때 기술자 등급을 일명 정처기(정보처리기사) 자격증 취득 이후 경력으로 계산하기 때문인데요. 물론 이 자격증이 없다고 크게 문제가 되는 건 아니지만, 위에서 말한 것처럼 삼성 SDS나 LG CNS와 같이 SI 업체에 다닌다면 필수적이겠죠. 그래서 전공자는 당연하고 비전공자이면서 개발자로 전직하려는 분들이 자격증을 딴다면 첫번째로 따는 자격증이 아닐까 싶습니다.
이번 포스팅에서는 2021년 3회 시험에 출제된 정보처리기사 실기 문제를 기반으로 어떻게 공부해야할지, 출제 경향은 어떻게 되는지 쉽게 풀어보도록 하는 시간을 가져보겠습니다. 원래는 필기에 대한 부분부터 올리려고 했는데, 커뮤니티를 보니 필기보다 실기를 어려워하는 분들이 많은 것 같아 실기를 먼저 보도록 하죠. 영상으로 제작하면 더 쉽게 전달할 수 있지만, 그럴 능력은 되지 않기 때문에 텍스트로 최대한 읽기만 해도 쉽게 이해가 되도록 전달하려고 노력해보겠습니다. 일단 정보처리기사 실기에서는 배점이 똑같이 5점이면서 20문제가 출제되기 때문에, 가성비(?)를 따져서 확실히 공부해야 하는 부분과 시간이 없을 때 패스해야하는 부분을 집어가면서 말씀드려보죠.
기출 문제의 경우 chobopark이라는 개발자분께서 티스토리에 친절하게 복원해서 올려놓은 문제를 기반으로 풀이를 해보고자 합니다. 여러 기출 문제가 복원되어 있으니 공부하시는 분께서는 필수로 참고하시면 좋을 듯 합니다.
1. 다음 자바 코드에 대한 알맞은 출력값 쓰기
class Connection {
private static Connection _inst = null;
private int count = 0;
static public Connection get() {
if(_inst == null) {
_inst = new Connection();
return _inst;
}
return _inst;
}
public void count() { count ++; }
public int getCount() { return count; }
}
public class testcon {
public static void main(String[] args) {
Connection conn1 = Connection.get();
conn1.count();
Connection conn2 = Connection.get();
conn2.count();
Connection conn3 = Connection.get();
conn3.count();
System.out.print(conn1.getCount());
}
}
1번 문제의 경우 프로그래밍 언어 문제라고 할 수 있는 자바 코드가 출제되었습니다. 디자인 패턴을 확실히 공부하신 분들이라면 위의 코드가 어떤 패턴인지 보이실텐데, 싱글톤(Singleton) 패턴이죠. 하나의 객체를 여러 곳에서 참조할 수 있도록 만든 패턴입니다. 코드에서 객체(=인스턴스, instance)를 반환하는 get() 또는 getInstance() 함수가 존재하면 싱글톤 패턴이라고 보셔도 됩니다.
코드만 간략하게 설명하면 Connection이라는 클래스를 정의하면서 내부적으로 Conntection 객체를 _inst의 이름으로 static 키워드를 추가해서 변수로 두고 있죠. 보통 static이라는 것은 공유변수라고 생각하시면 되는데, 자바에서 객체를 생성할 때 new로 여러 개 생성해도 내부적으로 static이 붙은 변수를 공유해서 사용한다고 생각하시면 됩니다. 위의 코드는 Connection이라는 클래스의 get() 함수에서 객체 하나를 생성해서 _inst 변수에 저장해놓고, get() 함수를 부를 때마다 동일한 인스턴스가 반환하도록 짠 코드인데, 이렇게 하면 어디서든 동일한 인스턴스를 사용할 수 있겠죠.
싱글톤 패턴으로 만들어진 클래스는 결국 인스턴스가 하나이기 때문에 클래스 내부에 정의된 변수들도 계속 공유된다는 특징을 가지고 있습니다. Connection 클래스 내부에 정의된 count라는 이름의 int형 변수가 처음에 0으로 초기화되었는데, 아래의 main 함수에서 get()을 통해 count 변수를 +1하는 count() 함수를 3번 호출하였죠. 인스턴스 자체가 하나면서 공유되고 있으니, count 변수도 0→1→2→3으로 변화하면서 마지막 print 함수에서 getCount() 함수를 호출했을 때 나오는 답은 3이 될겁니다.
정처기 필기에서 흔히 생구행(생성, 구조, 행위)이라고 암기했었던 부분이고, 해당 패턴에는 어떤 종류가 있는지 외워가셔야 합니다. 생성 패턴에는 대표적으로 추상 팩토리, 프로토타입, 싱글톤이 있죠. 마찬가지로 구조 패턴과 행위 패턴에 있는 기법도 몇 가지는 외우고 계실 거라 생각합니다. 아직 이전 기출문제들을 분석하진 못했으나, 코드로 나온다면 그나마 출제될만 했던게 싱글톤이었고, 디자인 패턴은 코드가 아니더라도 단답형으로 출제될 가능성이 높으니 종류들과 특징은 반드시 외워가셨으면 합니다.
그리고 최근 정처기 실기에서는 필수적으로 코딩 문제가 3문제 이상 출제되면서, C언어와 자바를 알고 계셔야지 안정권으로 합격에 드실 수 있는데요. 코딩을 아예 모른다고 포기하기엔 리스크가 크기 때문에, 처음 공부하는 비전공자라고 하시더라도 자바는 필수적으로 공부해두시고 C언어는 기본적인 문법과 더불어 포인터에 대해서 확실히 공부해두셔야 할 것으로 보입니다.
2. 정보보안의 AAA에 대한 맞는 설명 고르기
1) 시스템에 접근하기 전에 사용자의 신원을 검증
2) 검증된 사용자에게 권한과 서비스 부여
3) 사용자의 사용 자원 정보 수집
2번은 보안에 대한 문제인데 위의 문제는 설명에 대한 보기가 주어지고 이를 선택하는 문제로 출제되었다고 합니다. 보통 보안의 3요소라고 해서 기무가(기밀성, 무결성, 가용성)가 출제되는데, 이전에 3요소에 대한 문제가 출제되어서 이번에는 AAA(인증, 인가, 계정관리/과금)에 대한 내용이 출제된 것으로 보입니다. 보통 Triple-A라고도 부르는 AAA에는 사용자가 누구인지 식별하는 인증(Authentication)과 식별된 사용자에게 자원을 사용할 수 있는 권한을 부여하는 인가(Authoriztion), 해당 자원을 사용하는 계정 정보를 관리하거나 과금하는 Accounting으로 구성되어 있습니다.
보안에 대한 문제는 출제자들이 단답형으로 내기에 굉장히 용이한 과목이기 때문에, 위에서 말씀드린 기무가나 AAA, 자산/위협/취약점/위험에 대한 정의들은 확실히 외우고 가시는 것을 추천드립니다. 물론 아래서 더 말씀드리겠지만 Spoofing이나 Sniffing, DDoS 같은 보안 위협에 대해서도 잘 알고 계셔야 보안 문제가 나와도 쉽게 넘어갈 수 있습니다.
3. 데이터베이스에서 Grant의 기능에 대해 간략히 설명
DB(데이터베이스) 문제로 DCL(Data Control Language, 데이터 제어어)에 속하는 Grant 명령어의 기능을 서술하는 문제입니다. Grant라는 의미가 승인하다, 부여하다인데, 그냥 간단하게 사용자(User)에게 DB에 접근하고 객체를 사용할 수 있도록 권한을 부여할 수 있는 명령어로 생각하시면 됩니다. 반대로 Revoke는 권한을 회수하는 기능을 하는 명령어로 알고 계시면 됩니다.
필기에서 데이터베이스 과목을 공부하셨다면 select와 insert 같은 DML과 create, alter, drop과 같은 DDL에 대해서 익히 알고 계실거라고 생각합니다. 이러한 명령어는 실제로 개발에서 DB를 사용할 때 흔히 보기 때문에 꼭 외우시고 계셔야 합니다. 또한 실기 문제에서는 다양한 상황을 주고 괄호 안에 알맞은 SQL을 작성하는 문제도 출제되고 있으니 반드시 공부하시길 바랍니다.
4. 아래 설명에서 괄호에 들어가는 내용 작성
( ) 스푸핑은 근거리 통신망에서 ( ) 메시지를 이용하여 상대방의 패킷을 중간에서 가로채는 중간자 공격 기법으로 데이터 링크 Layer의 ( ) 프로토콜을 사용한다.
4번 문제도 보안에 대한 문제인데, 설명에 오류가 있는 것으로 보입니다. 일단 스푸핑(Spoofing)에 대해 간략하게 설명하면 Spoof가 도용하다, 속이다라는 뜻으로, 타인의 신분을 위장하는 공격으로 생각하시면 됩니다. 좀 더 자세하게는 사용자 A와 B가 통신을 하고 있을 때, 해커 C가 A인척해서 B가 보내는 데이터를 가로채고 변조해서 A에게 보내는 네트워크 공격 기법이죠. 중간에서 공격한다라고 해서 MITM(Man in the Middle, 중간자 공격)으로 부르기도 합니다.
위에서 설명에 오류가 있다고 말씀드렸는데, 문제에서 스푸핑이라는 단어가 나왔으면 들어갈 수 있는 단어는 ARP, IP, MAC, DNS 정도로 답이 ARP(Address Resolution Protocol)가 되기 위해서는 데이터 링크 레이어가 아닌 네트워크 레이어가 되어야 하죠. 참고로 ARP는 3계층의 IP를 2계층의 MAC 주소로 바꿔주는 역할을 하는 프로토콜 입니다. 참고로 '물데네전세표응' 같은 OSI 7계층 순서와 각 계층의 네트워크 프로토콜은 필수적으로 외워두셔야 하고, 실제 문제에서는 공격에 대한 동작 과정 이미지가 같이 나왔다고 하니, Land Attack이나 Syn Flooding 같은 공격들의 특징도 같이 공부하시면 좋을 것으로 생각됩니다.
5. 다음 설명에 대한 Coupling 종류를 영문으로 작성
어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 결합도
해당 문제는 소프트웨어 공학에서 모듈화 부분의 결합도(Coupling)에 대한 문제로, 필기에서 결합도에 대한 문제가 나왔기 때문에 실기에서도 출제된 것으로 보입니다. 답은 'Control'로 사실 '제어 신호'라는 단어로 유추할 수 있지만, 결합도에 대해 처음보신다면 틀리셨을 것으로 생각합니다. 자료, 스탬프, 제어, 외부, 공통, 내용 결합도의 특징에 대해 공부하시고 시간이 된다면, 응집도(Cohension)의 종류도 외워두시면 다음에 출제될 때 맞을 수 있을 것으로 생각됩니다. 다만 중요도가 그렇게 높진 않아서 시간이 없다면 이 부분은 패스하도록 합시다.
6. OSI 7 계층에 대한 설명을 보고 올바른 답을 작성
1. 물리 계층을 통해 송수신되는 정보의 흐름/오류 제어 기능
2. 데이터를 목적지까지 전달하는 기능
3. 데이터 압축 기능
6번 문제는 네트워크 문제로 위에서 말씀드린 OSI 7계층의 이름과 특징을 외우고 계신다면, 쉽게 풀 수 있는 문제입니다. 물리 계층을 통해 정보의 흐름/오류 제어 기능을 하는 계층은 2계층인 데이터 링크(Data Link) Layer고, 데이터를 목적지까지 전달하는 라우팅의 기능을 가진 계층은 3계층인 네트워크(Network) Layer, 데이터 압축이나 암호화 기능을 담당하는 계층은 표현(Presentation) Layer죠.
여기서 헷갈릴 수 있는 건 2계층인 데이터 링크뿐만 아니라 전송(Transport) 계층에서도 흐름제어(Flow Control)과 오류제어(Error Control) 기능을 가지고 있다는 건데요. 문제의 설명에서 '물리 계층을 통해서'라는 말이 들어가 있기 때문에 2계층으로 보면 되며, '논리적으로 연결된', '양 단 간에'라는 말이 들어가 있으면 전송 계층으로 적으시면 됩니다. 네트워크 문제는 거의 항상 출제되기 때문에 꼭 공부해야 합니다.
7. 아래 설명에서 괄호에 들어가는 내용 작성
추상화는 눈에 보이지 않는 것을 개념적으로 표현하는 것으로, ( 1 )은 클래스 사이의 전체 또는 부분 같은 관계를 나타내고, ( 2 )는 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 IS-A 관계를 나타낸다.
7번은 소프트웨어 공학에서 나오는 UML(Unified Modeling Language, 통합 모델링 언어) 중 UML의 관계에 대해 물어보는 문제입니다. 실제 문제에서는 보기가 주어지고, 클래스 사이의 부분과 전체 관계를 나타내는 것은 집합관계(Aggregation), 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 IS-A 관계는 일반화(Generalization) 관계입니다. UML도 필기에서는 심심찮게 볼 수 있는 문제였는데, 실기에서는 자세하게 공부하시기 보다 시간이 있다면 집합, 연관, 포함, 의존 관계 등 UML 관계와 다이어그램 종류인 상태(State)나 시퀀스(Sequence), 클래스(Class) 다이어그램의 특징 정도만 공부해두셔도 충분할 것으로 생각됩니다.
8. 테스트케이스 구성요소에 대한 설명으로 괄호에 들어가는 내용 작성
문제 설명에 앞서서 간단히 배경 지식에 대해 설명하면, 테스트케이스(Test Case)는 개발한 프로그램이 정상적으로 동작하는지 확인하기 테스트 시나리오라고 보시면 됩니다. 테스트(Test) 시에 확인해야 할 부분을 상황(Case) 별로 작성한 표 정도로 생각하시면 되는데 보통 IT 기업에서 QA(Quality Assuracne, 품질 보증) 부서에서 하는 일이 테스트 시나리오를 만들고 테스트를 수행해서 정상적으로 동작하는지 확인하는 일입니다.
위의 문제는 소프트웨어 공학의 테스트 기법 중 테스트 케이스 작성 문제로 외우지 못하면 감으로 맞추기는 힘든 문제입니다. 복원 문제의 정답은 식별자 ID, 테스트 항목, 테스트 조건, 테스트데이터, 예상 결과인데, 테스트케이스 표준 문서에 나와 있는 것과 정처기 필기에 나오는 구성 요소가 조금 다르기 때문에, 공부하시는 책에 나와있는 대로 외우시면 될 것으로 보입니다. 테스트케이스 구성요소는 자주 보면 눈에 익겠지만, 이런 문제는 외우고 있으면 맞는거고 아니면 틀린다는 마음으로 보시는 것을 권장드립니다.
9. 아래 설명에서 괄호에 들어가는 내용 작성
( )를 통해 요구사항 명세를 입력 조건과 출력 조건 간 논리적 관계로 표현하고, 이를 기반으로 테스트케이스를 도출하며 원인(Cause)는 입력 조건을, 결과(effect)는 입력 조건의 결과를 의미한다.
위의 문제도 테스트 기법에 대한 문제이며, 프로그램 내부 코드가 아닌 외부 명세서를 보고 테스트하는 블랙 박스 테스트(Black-box Test) 기법 중 원인-결과 그래프(Cause-effect graph)에 대한 설명입니다. 블랙박스 테스트 기법에는 동등 분할, 경계값 분석, 의사결정 테이블(Decision table), 상태전이(State transition), 유즈케이스(Usecase) 테스트 기법 등이 있는데, 각 기법의 특징을 알지 못하더라도 설명에서 원인과 결과라는 단어에서 힌트를 얻어서 때려 맞출 수 있는 문제입니다.
9번 문제는 특히나 좀 지엽적인 문제로 볼 수 있는데, 합격률을 낮추기 위해 내는 문제로 보입니다. 일단 테스트 기법에서 위에서 말씀드린 블랙박스 테스트와 더불어 화이트박스 테스트(White-Box Test)에 대한 개념부터 보시고, 시간이 남으시면 해당 기법들의 종류에 대해서도 하나씩 보시는 것이 좋을 것 같습니다.
10. 아래 설명에서 괄호에 들어가는 내용 작성
( )는 블록 암호의 일종으로, 미국 NIST에서 국가 표준으로 정한 암호이며 64비트 평문을 64비트 암호화하는 대칭키 암호 알고리즘으로 비밀키는 56비트이다.
10번 문제는 보안 중 암호화에 관련된 문제로 국가 표준으로 정했다는 문장은 엄밀히 말해서 틀린 이야기이긴 하지만 '대칭키', '비밀키 56비트'라는 단어를 보고 DES(Data Encryption Standard)를 유추할 수 있어야 합니다. 현재 NIST에서 국가 표준으로 정한 암호 방식은 AES(Advanced Encryption Standard)로 블록 크기는 128비트, 키 길이 128, 192, 256비트를 키워드로 알고 계시면 됩니다.
정처기에서 보안이 출제되면서 암호화에 대한 문제를 종종 볼 수 있는데, 일단 암호화에서는 암호화를 수행하는 정보 단위의 분류에 따라 스트림 암호와 블록 암호로 나뉘고, 키의 형태에 따라 대칭키(=비밀키) 암호화와 비대칭키(=공개키) 암호화로 분류된다는 것을 알아야 합니다. 대칭키 암호화(DES, AES)의 경우 암호화와 복호화를 하는 키가 동일하고, 비대칭키는 말 그대로 암호화와 복호화 키가 다른(=비대칭)인 암호화 방식을 이야기합니다. 특히 공개키 방식으로도 부르는데 여기에는 대표적으로 RSA가 있다는 것을 알아두시면 좋습니다. 보안기사에서도 암호화에 대한 문제는 필수적으로 출제되기 때문에 정처기에서도 계속해서 출제될 것으로 보입니다.
여기까지 2021년 3회 정보처리기사 실기 기출 1번부터 10번까지 문제 및 간단한 해설과 함께 공부 방향에 대해서 말씀드렸고, 11번 부터는 다음 포스팅에서 이어가도록 하겠습니다. 감사합니다.
'Certificate' 카테고리의 다른 글
오탐과 미탐(False Positive, False Negative) (0) | 2022.07.31 |
---|---|
쉽게 풀어보는 정보처리기사 실기 기출 2021년 3회 (3) (2) | 2022.05.08 |
쉽게 풀어보는 정보처리기사 실기 기출 2021년 3회 (2) (0) | 2022.05.05 |
댓글