실기 응시
과제와 프로젝트로 쉴시간없이 일하는 가운데, 지난달 초 신청해뒀던 정보처리기능사 실기 시험이 있었다는 사실이 생각났다. 날짜를 확인해보니 오늘이더라... 이걸 확인한게 어제였는데 그래서 부랴부랴 벼락치기를 해서 한 4시간 정도 공부한 뒤 응시했다.
시험이 끝나고 나니 확실히 내가 아는게 별로 없구나.. 대학교 4학년인데 기능사 실기도 합격 못할 수준이구나... 라는 걸 알게됬다.... 주변에서 말하는거 들어보니 고1도 보러 오는 시험이던데, 나는 대학교에서 운영체제, SQL 이런거 다 이미 수업을 들었던 건데 거의 기억 못하고 있고, 고1은 거의 합격한 분위기길래 마음이 아팠다. 시험도 대충 문제 보니까 한 2-3일만 했어도 합격할만큼 엄청 쉬웠던거같은데.. 하..
20문제 각 5점 배점에 60점 이상 합격이니까 8문제 이하로 틀려야 하는데 이미 8문제는 틀린 것 같다.. 그 문제들을 알아보자.
1. 삼항 연산자 문제
내가 연산자 우선순위에 대해 상당히 약하다는 것을 체감했다.
int a = 32;
int b = (a++ > 32) ? a + 32 : a + 64;
System.out.printf("%d", b);
a > 32가 먼저 되니까 false고, a + 64가 b에 들어가는데, 이 때 a++가 어디서 실행되냐에 따라 b가 96과 97중에 선택된다.
나는 여기에 96을 적었다. 하지만 실제로는 97이 나온다. 이는 '(a++>32)'가 작동하고, a를 재사용했으므로 재사용된 a에는 a++가 적용되어져있기 때문이다.
2. SQL Index 문제
중복 없는 INDEX를 만들기 위해서는 'CREATE UNIQUE INDEX' 명령어를 사용한다.
테이블과 똑같을 줄 알고 'CREATE DISTINCT INDEX'라고 작성했다 ㅋㅋ..
3. 프로토콜의 종류
telnet을 대체하기 위해 만들어졌고, 22번 포트를 사용하는 응용 프로그램 혹은 프로토콜을 맞추라는 문제가 있었다.
22번 포트를 보고 SFTP라고 적었는데, telnet을 대체한다는점, 응용 프로그램이라고 작성되어 있다는 점에서 SSH가 적당한 답변인 것 같다.
4. SQL 명령문의 작동 순서
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY의 작동순서를 정렬하는 것이었는데, GROUP BY-HAVING을 통해 한번 pre-filtered 된 테이블에서 WHERE 조건을 사용한다.. 고 기억하고있었다. 그래서 HAVING 조건으로 GROUP BY하고 여기서 WHERE 한다고 생각했다.
그러나 실제 작동 순서는
'FROM > ON > JOIN > WHERE > GROUP BY > HAVING > SELECT > DISTINCT > ORDER BY' 였다.
즉, 나는 완전히 반대로 작성해버린 것이였다...
5. DDL DML DCL 구분
이를 기억할 때, DDL은 테이블과 같이 큰 범위, DML은 데이터와 같이 작은 범위, DCL은 제어 권한 으로 기억했다.
그래서 CREATE, SELECT, UPDATE, DELETE 였나? 이렇게 4개 중 DDL을 고르는 문제였는데.
CREATE(테이블 생성), SELECT(테이블 선택) 으로 선택했다. 그런데 생각해보면 SELECT는 테이블이 아니라 열을 선택하는 것이었다. (테이블은 FROM으로 선택한다...)
※ DDL : CREATE, DROP, ALTER, TRUNCATE ...
DML : SELECT, INSERT, UPDATE, DELETE ...
DCL : GRANT, REVOKE, COMMIT, ROLLBACK ...
6. 데이터베이스 용어
Attribute가 Relation에서 가질 수 있는 모든 값의 집합이 무엇인가? 라는 서답형 질문이었다.
정말 하나도 모르겠어서 그냥 튜플이라고 적어서 제출했는데, 답은 도메인이라고 한다.
※ 튜플 : 하나의 레코드를 나타내는 행
도메인 : 하나의 Attribute가 취할 수 있는 같은 타입의 모든 원자 값 집합
7. 자료형 바이트 크기
int a = sizeof(int) + sizeof(char);
printf("%d", a);
int는 4바이트인게 명확한데, char이 몇바이트인가... 하는 생각에 빠졌다.
주로 사용하는 언어가 Java인데, Java에서는 char에 유니코드 값도 들어가서 2바이트로 되어있다.
근데 작성된 언어는 C라서 모르겠다.. 하고 그냥 Java에서 했던 대로 4+2로 6으로 제출했다.
C에서의 Char은 1 byte크기로, 정답은 5였다.
확실하게 틀린 문제들은 위의 7개다.
대충 복기해본 문제는 19문제로, 1문제를 제외한 모든 문제를 떠올렸는데, 마지막 한문제를 떠올릴수가없다..
그러면 7+1 = 8이니까 합격아니냐? 라고 할 수 있는데, 맞았다고 생각한것중에 틀리고 마지막 한문제도 틀렸으면 불합격이니까 사실상 경계선에 있으니 틀렸다고 생각하는게 마음이 편하다.
틀렸을수도 있는 문제중 하나는 대충
'프로그램코드 -> ? -> 목적코드 -> 링커 -> 실행코드' 의 구조에서 ?에 들어갈것을 고르라.. 는 문제였는데
잘 모르겠어서 목적코드가 asm이고 실행코드가 bin인가? 하고 대충 컴파일러 적어서 제출했는데,
검색해보면 대충 맞는것같은데 아닌것같기도하고...
※ 맞았을 것으로 추측되는 문제들
- (end-to-end, 흐름제어 를 하는 OSI 계층) : 전송계층
- (물리적인 설계 스키마) : 내부 스키마
- (사용자 편의를 위해, 아이콘이나 그림으로...) : GUI
- (pow(2, ceil(M_PI))) : 16
- (i%3==0&&i%7==0, 1<=i<=100, 에서 출력) : 21, 42, 63, 84에서 출력함
- (SELECT A.이름 A.번호 FROM A,B WHERE A.ID = B.ID AND B.KEY = 'C') : | 이름 | 번호 | 테이블 작성
- (run("3")은 run(int a)를 실행하는가? run(String a)를 실행하는가?) : String
- (i%3==0에서 break) : -
- (UNIX에서 파일 내용을 출력하는 커맨드) : cat
- (네트워크 망을 관리하는 프로토콜) : SNMP (이외에는 SGMP, Ipv6, FTP, HTTPS, RARP가 있었음)
- (윈도우에서 잠금 단축키) : Win+L(ock)
※ 알수없는 한문제..