GRE CS (Computer Science) Subject Test 에 대해 by object

종종 여기 검색으로 오시는 분 중에 GRE Subject으로 검색하시는 분이 많은데 정작 여기에 관한 제대로 된 글이 없기에 신년맞이 (여긴 아직 12월 31일) GRE CS Subject에 관한 글을 써보자.



1. GRE Subject Test

유학 준비하시는 분들이라면 GRE General Test는 모두 잘 알 것이다. 한마디로 지랄같은 시험이다. 무식한 단어를 무식하게 외워야하는 시험이지만 그래도 그 무식한 단어를 외우면 다 피가되고 살이 되니까 즐거운 맘으로 공부하도록 최면을 걸어야한다. 그리고 몇몇 전공, 대표적으로 전산학과에서는 GRE Subject Test라는 또 다른 시험 성적을 요구하는 학교가 많다. 적어도 Recommended는 되니까 좋은 성적이 서브젝 점수가 있으면 좋은 영향은 미칠 것 같다. 이런 어정쩡한 태도를 보이는 이유는 다음에서 곧 설명된다.

나는 이공계에서 GRE General 점수는 정말 중요하지 않다고 생각한다. 해커스 같은 곳에 가보면 (요즘은 덜 하지만) 과거 정말 GRE 점수에 목매는 사람이 많았다. 그러나 정말 그렇게 중요하지는 않다. 다른 요소는 다 우수한데 GRE만 나쁘다고 떨어지는 경우도 별로 없을 뿐더러, 다른 것들은 다 별로인데 GRE만 좋다고해서 좋은 학교에 붙는 것은 더더욱 아니기 때문이다.

마찬가지로 Subject Test도 그러한 것 같다. 많은 분들이 (나를 포함하여) 낮은 학부 학점을 매꾸기 위해 좋은 서브젝 점수가 도움이 될까 궁금해하는데, 겪어보니 꼭 그런 건 아닌 것 같다. 그럼에도 불구하고 좋은 서브젝 점수는 최소한 감점은 되지 않으니까 좋은 점수를 받기 위해 노력하는 것은 중요하다. 또, 석박사 과정을 시작하더라도 수업듣고 퀄 시험을 봐야하는데, 서브젝 공부를 충실히 한다면 수업에도 아주 큰 도움이 된다. 그러니까 단순히 좋은 서브젝 점수를 위해서뿐만 아니라 학부 시절에 공부한 기초 전산 과목을 총정리 하는 맘으로 공부를 하는 것이 중요하다.



2. 시험구성 및 점수

일단 GRE 홈페이지에 나와있는 기출 문제를 보고 연구를 해야한다. (실제 이 문제는 2002년 12월에 쳤던 시험이다. 물론 5~6문제는 실제 문제와는 다른 문제가 나와있다.) 그리고 공식적으로 출제 비율을 ETS는 밝히고 있다. 체감으로 느껴도 정말 좋은 서브젝 점수를 받기 위해선 기본 전산 과목 어느 하나도 놓칠 수 없다. 오토마타/알고리즘은 물론, 프로그래밍 언어론, 컴퓨터 구조, 운영체제, 이산수학을 모두 충실히 공부해야한다. 적어도 해당 학부 수업에서 A를 받을 정도의 노력은 해야한다. 그리고 요즘에는 수치해석, 네트웍, 보안과 같은 다른 응용 분야도 종종 출제되는데 이건 그냥 상식으로 쳐야하는 것 같다. 물론 해당 과목 수업을 열심히 들었다면 괜찮겠지만 코어 과목을 마스터하지 않았는데 응용 과목까지 공부하기에는 벅찰 것이다.

서브젝 시험은 70문제를 170분에 푼다. 막상 시험을 쳐보면 시간이 상당히 부족하다. 그리고 틀리면 1/4점의 감점이 있다. 그래서 모르면 비우는 것이 좋을 때도 있다. 수능이나 토플처럼 미리 연습문제를 많이 풀 수 있는 기회가 서브젝 시험에서는 거의 없다. 그래서 시간 분배를 잘 생각해야한다. 잘 풀리지 않으면 과감히 뛰어 넘어야한다. 쉬운 초반 문제와 어려운 후반 문제의 점수는 똑같이 1점이니까 어려우면 과감히 포기해야한다.

점수는 원점수를 구한 뒤에 일반적인 GRE 점수처럼 백분위 점수로 다시 계산된다. 점수 예는 위의 PDF 파일 뒷면에 나와있지만 실제는 그 보다 좀 낮은 백분위 점수가 나올 것이다. 06년 12월 시험에서는 53개를 맞추고 12개를 틀리고 5개를 비워서 50점의 원점수를 받았는데 87%를 받았다. 그런데 PDF 상으로는 95%로 나와있다. 그런데 문제 한 두개가 백분위 점수에 영향을 많이 준다. 06년 11월 시험에는 생각치도 않은 97%라는 매우 좋은 성적이 나왔는데, 58개를 맞추고 9개를 틀리고 3개를 비워서 56점을 기록하였다. 그러니까 5문제 더 맞춰도 백분위 점수는 10%가 왔다갔다 할 만큼 차이가 크다. 아무리 잘 풀어도 최소 5개 이상은 틀릴 수 밖에 없다. 따라서 아예 모르는 것은 비우고 푼 문제 중에서 최대한 실수를 줄이는 것이 매우 중요하다.

보통 80%만 넘으면 리포팅 무조건 해야할 만큼 괜찮은 성적이라 생각한다. 2002년에도 서브젝 시험을 봤었는데 (오토마타, 컴퓨터 구조를 공부하지 않아서 점수는 70% 정도였다) 유난히 그 때 시험이 어려워서 같이 시험을 본 스터디 분들도 (같이 준비하신 분들도 다 똑똑하고 대단한 분들이었음에도 불구) 대부분 80%대가 많았다. 그래도 좋은 학교에 진학하신 것을 보면 역시 서브젝은 중요하지 않거나 80%만 되어도 문제가 없는 것 같다. (여담으로 좋은 CS 학교로 가기는 해가 갈 수록 힘들어지고 있다. 그래서 3~4년전 어드미션 포스팅을 절대 신뢰해서는 안 된다.)

그런데 막상 시험을 치고 보면 80%를 맞기도 정말 힘들다. 위에서도 언급했지만 70%와 80%는 정말 한 끗 차이일 수 있다. 문제 3~4개로 70%와 80%가 갈릴 만큼 실수를 줄이고 아는 문제를 확실히 푸는 것이 훨씬 중요하다. 45문제 정도는 맞춰야 원 점수 40점 정도를 기록할 수 있다. 왜냐면 아무리 제대로 풀어도 10문제 가까이는 틀릴 확률이 높기 때문이다. 70문제 중에서 60여 문제를 풀고 그 중에서 45개 정도를 맞추는 것도 상당히 벅차다. 그러니까 충실히 공부를 해야만 한다. 별다른 대책은 없다. 더구나 연습할 문제양이 많지 않기에 더더욱 공부를 충실히 해야 한다.

시험 초반 십여 문제는 몸 풀기 문제다. 가벼운 지식을 묻는다. 틀리지 않도록 노력해야 한다. 간단하게 소팅 알고리즘의 시간 복잡도를 묻거나 간단한 코드를 주고 최종 결과값을 묻는 문제가 대부분이다. 그리고 뒤로 갈 수록 어려워진다. 70문제를 집중해서 풀기란 정말 힘들다. 다시한번 시간 및 체력(!) 관리가 중요하다.

체감 상으로는 알고리즘과 오토마타의 비중이 꽤 높은 것 같다. NP 개념이 명확치 않으면 풀 수 없는 문제가 최소 4~5문제는 된다. 오토마타에 나오는 각종 Language의 특성도 확실히 알아야 한다. PL 같은 경우에는 C 같은 코드를 주어지고 각종 개념을 묻는 문제가 많다. 흔히 말하는 "족보"에서 비슷한 문제가 5~6문제는 나오기 때문에 열심히 족보를 보고 유형을 예측해서 공부하는 것도 중요하다. 하나 재밌는 것은 06년 11월과 12월 시험을 모두 쳤었는데, 12월 시험에 11월 시험에서 봤던 문제와 동일한 문제가 더러 나왔다는 것이다. 문제는!! 정답을 모르는 터라 그다지 도움이 되지 않고 똑같이 고생할 뿐이다. 또, 시차를 이용 미국에서 치는 사람은 한국에서 친 사람들의 정보를 이용하여 도움을 얻을 수도 있다; 문제가 완전히 동일하지 않은 것으로 알고 있다.

그리고 06년 11월 시험을 쳤을 때 너무 넓은 시험 범위로 상당히 당혹스러웠다. 정말 시험치고 났을 때는 80% 정도를 기대했을 정도로 문제가 어렵게 느껴졌었다. 특히 알고리즘에서는 끝부분에나 나오는 approximation에 대해서도 나오고, Real-time OS 과목에서나 나올법한 priority inversion에 대한 것도 나왔다. 그러니까 모든 범위를 커버하는 것은 사실상 불가능하다. 기본 과목에 역시 충실하여 개념을 확실히 머리 속에 가지고 있어야 한다.



3. 시험준비

자기가 학부 때 공부하였던 각종 교재로 공부하는 것이 가장 좋은 것 같다. 좀 엄하게 들리지만 그냥 교과서를 다 읽는 것이 좋다. 나 뿐만 아니라 많은 사람들이 좋다고 생각하는 수험도서(?)를 소개하면 다음과 같다.


(1) 알고리즘

Cormen, Leiserson, Rivest, and Stein, Introduction to Algorithms, 2nd ed., MIT Press, 2001

저자 이름을 따서 CLRS라고 불리는 책이다. 재수강하면서(...) 수업 시간에 다루는 챕터는 꼼꼼히 읽었는데 읽고나니 왜 이 책이 유명한지를 알 수 있었다. 정말 좋은 책이다. 알고리즘의 기초를 닦는데 참 좋은 책이다. 단순히 시험 뿐만 아니라 프로그래머에게도 꼭 읽어야 할 책이라고 생각한다. 공부해야 할 챕터는 먼저 기본적인 소팅/순위 추출/해쉬 테이블과 같은 자료구조론, Red-Black Tree와 같은 고급 자료구조, Greedy/Dynamic 같은 알고리즘 방법론, 매우 중요한 그래프 이론, 마지막으로 NP 개념이 있다. 그리고 뒤에 selected topics가 있는데, 절망적인 것은 여기에서도 시험이 나왔다. 06년 11월 시험에 simplex method에 대한 것이 나왔다. 앞에서도 말했듯이 여기까지 공부하기란 사실 매우 힘이 들기에 기본 챕터에 충실하는 것이 더 중요하다. 또, Red-Black Tree/B-Tree/Fibonacci Heap 같은 것은 이 녀석의 정확한 작동 방법은 알 필요 없고 그 특성만 정확하게 이해하면 된다. 이렇게 중요하고 중요하지 않는 부분을 잘 가려가며 공부하는 센스(?)도 필요하다.


(2) 오토마타

Introduction to the Theory of Computation, second edition, Michael Sipser
An Introduction to Formal Languages and Automata, Peter Linz

학교에서 수업은 두번째 교재로 하였는데, "오토마타" 자체를 공부하기에는 두번째 교재가 더 쉽고 더 좋은 것 같다. 첫번째 교재는 매우 유명한 교재이긴 하지만 오토마타 보다는 계산 이론에 더 중점을 두고 있다. 오토마타는 NFA, DFA, Push-down, 그리고 Turing Machine까지 각종 오토마타의 특징과 이것이 수용하는 언어의 성질에 대해 잘 알고 있으면 된다. 그리고 NPC 개념 및 Halting Problem의 증명 또한 빼놓지 않고 공부해야 한다.


(3) 프로그래밍 랭귀지

수업은 흔히 곰돌이 책이라고 불리는 Sethi의 책으로 하는데, 그냥 강의 노트만 봐도 큰 문제는 없다. C/C++/Java 중 어느 언어에라도 익숙하고 이들 언어의 특징만 잘 알아도 많은 부분은 커버된다. 그 중에서도 call-by-* 및 dynamic/static scope에 대한 개념은 정리해두자. 이런 Imperative language 및 OOP적 개념은 쉽지만 LISP으로 대표되는 funtional language는 별도로 공부를 하는 것이 좋다. 사실 나도 이 부분은 많이 약하다. Lambda calculus와 같은 개념도 정리를 하면 좋을 것이다. 위키만 해도 좋은 공부 자료가 된다. 기출 문제를 풀어보면 알겠지만, 대부분 PL 문제는 주어진 코드를 보고 머리 속으로 열심히 돌리는 것이다. 수학적 귀납법과 같은 사고에 익숙해져야 한다.


(4) 운영체제

Operating System Concepts, Abraham Silberschatz

말이 필요 없는 중요한 과목. 워낙 OS 수업을 학부 때 날림으로 배워서 서브젝 준비하면서 흔히 "공룡책"이라고 불리는 교재를 처음으로 읽었다. 각종 스케쥴링 정책과 개념, concurrent/thread 동기화 개념, deadlock, 캐쉬, 가상 메모리, 디스크 스케쥴링 정도가 주요 토픽이다. 그 외에 컴퓨터 시스템적인 부분의 개념도 익혀두는 것이 좋다.


(5) 컴퓨터구조 및 논리회로

Computer Organization and Design by David A. Patterson & John L. Hennessy

말이 필요 없는 컴퓨터 구조의 바이블이다. 이 두 저자 역시 매우 대단한 빅 네임이며 RISC의 개념을 정립하신 분이다. 주판책이라고도 불리지만 저자의 이름을 따 H&P 책이라고도 불린다. 명령어 구조가 간단한 RISC를 가지고 접근하기 때문에 이해하기가 매우 쉽다. ISA 부터 시작해서 실제 CPU를 어떻게 만드는지 자세히 나온다. 파이프라인의 개념은 가장 중요한 부분. OS과 겹치지만 캐쉬, 가상메모리 역시 중요하다. 그리고 최근 듀얼 코어가 뜨니까 멀티 프로세서에 대한 개념도 공부하는 것이 좋을 것 같다. 예를 들어 MESI 프로토콜과 같은 cache coherence protocol도 알아두는 것이 좋다. 그 외에 응용을 하여 파이프 라인이 깊을 때 어떤 문제가 있느냐와 같은 개념 문제도 나온다. 대학원 컴퓨터 구조에서 배우는 Out-of-OrderInstruction Level Parallelism은 직접적으로 나오지 않을 것 같다. 그래도 모르니 간단히 개념만 알아두는 것도 좋을 것이다.

그리고 Flip-Flop 같은 논리 회로도 당연히 시험 범위에 속한다. 2's complement, floating point 같은 데이터 표기법도 반드시 살펴봐야 한다. 간단한 ALU 그림을 주고 적절히 회로를 바꾸어 원하는 연산 결과가 나오도록 하는 시험 문제가 나온다. 굳이 로직 디자인 책을 전체적으로 복습하기에는 시간이 걸리니, 컴퓨터 구조 책에 있는 부록으로 간단히 정리하는 것이 좋은 것 같다.


(6) 이산수학

Discrete Mathematics and its Applications by Rosen

이산수학 역시 절대 놓쳐서는 안 되는 과목이다. 물론 이산수학 뒷부분에 가면 알고리즘과 자료구조론과 겹치는 부분이 많지만 predicate calculus (A는 B고 B가 C면 A는 C다와 같은 짓거리...), 경우의 수, generating functions, relation (특히 equivalent relation)은 단골 출제 범위이다. 지난 번 시험에는 Planar graph에 해당하는 문제도 나왔다.


(7) 기타과목

컴파일러: 컴파일러는 그림에 있는 "Dragon Book"이 가장 유명하나 사실 몇 문제 나오지 않는 녀석을 위해 이 책을 읽기란 쉽지 않다. 기본적인 컴파일링 과정은 당연히 알아야 한다. 그러나 특히 파싱 알고리즘을 이해하기가 쉽지 않다. 그래도 FOLLOW/FIRST, 간단한 LR 파싱 테이블은 공부하면 좋을 것이다. 시험 문제로는 LALR, SLR, LR 같은 언어의 특징을 묻는 것이 나오기도 하는데 별도로 컴파일러 수업을 듣지 않았다면 이해하기가 벅차다. 과감히 포기하는 것도 좋다. (...)

네트웍: 네트웍이 종종 나온다. 내가 친 시험에서도 데이터 통신에서 나오는 내용이 나왔다. 수업을 듣지 않았으니 당연히 틀렸다. 그래도 간단히 네트웍 프로그래밍을 해봤다면 프로토콜 스택에서 각 레이어가 어떤 역할을 하는지 특징이 무엇인지 알면 좋을 것 같다. 그런데 시간의 압박으로 포기.

DB: 아는 바가 없어서 모른다. 문제가 나와도 primary key 개념을 묻는 것이었다. DB를 모르는 나도 알 정도니 걱정하지 않아도 된다.

보안 및 암호: 생각보다 보안에 관해서 시험 문제가 좀 나온다. Public key에 대한 개념 정도는 숙지하는 것이 좋다. 간혹 산수 문제도 나오는데 산수와 결부시켜 RSA 알고리즘 같은 것이 나올지도 모른다.

수치해석: 역시 수치해석과 확률 문제가 종종 나온다. Newton-method와 같은 유명한 방법론은 꼭 알아둬야하고, 확률은 Bayes' theorem 정도는 공부해야 할 것 같다. 이걸 알면 쉽게 풀 수 있는 확률 문제가 기출 문제에서 더러 발견할 수 있다. 그 외 생각나는 것으로는 Secant Method, LU 분해, Gauss-Jordan Elimination, Gauss-Seidel method 등이 있다. (참고)

그래픽: 무슨 Ray-tracing이나 Volume rendering 이런 것을 묻는 문제는 나오지 않을 것 같다. 프레임 버퍼 뭐 이런 용어는 나오지만 그냥 상식과 찍기로 극복을...



4. 마치면서...

서브젝 시험의 가장 큰 어려움은 풀어볼 문제가 별로 많지 않다는 것이다. 공식적으로 ETS에서 공개한 연습 문제 외에 중국 친구들이 몰래 유출하여 복원한 90년대 문제가 전부라고 할 수 있다. 기타 어느 미국 출판사에서 CS Subject 대비 문제지를 만들어놓은 것이 있는데 최근 출제 경향과는 별로 맞지도 않고 문제도 좋지 않다.

먼저 기출 문제를 푼 다음에 전체적인 감을 잡는 것이 중요하다. 그런데 기출 문제를 한번 풀어버리면 연습할 수 있는 소중한 세트 중 하나를 써버리는 셈이므로 맘을 다잡고 풀어보는 것이 좋다. 그런 뒤 자기가 약한 부분이나 미약한 개념을 책을 찾아서 공부하면 된다. 스터디를 조직해서 전체 계획을 짜서 진도나가는 것도 많은 도움이 된다.

학부 4학년에서 바로 준비를 할 경우에는 배운 내용이 머리 속에 비교적 많이 남아있어 수월하지만, 회사를 다니는 등 학교를 떠난지 오래되신 분이라면 준비에 상당한 시간이 걸린다. 최소 반년은 잡아야 전체적으로 한번 리뷰할 수 있을 정도로 범위가 상당히 많다. 나도 다행히 복학해서 알고리즘, 오토마타, 컴퓨터 구조 수업을 들은터라 그나마 수월하게 준비할 수 있었다. 2002년 회사 다니면서 반 장난으로 준비했던 시절을 떠올리면 정말 쉽지 않은 시험이다.

학점도 뛰어나지 않고 전산학도 복수전공으로 하여 50학점이 안되게 수업을 들었지만 처음 CS 서브젝을 준비하시는 분들에게 도움이 되었으면 좋겠다. 다시한번 스터디를 꼭 하는 것이 좋다고 생각한다. 각자 잘하는 분야가 있으니 도움도 주고 받으면서 동기 부여도 되고 여러모로 좋다. 또, 유학 준비 과정도 같이 할 수 있으니 더욱 좋다. 냉정하게 생각하면 같은 스터디 멤버도 경쟁자일 수 있지만, 생각보다 우리나라에서 CS 유학을 준비하는 사람은 그렇게 많지 않다. 우리의 경쟁자는 저 너머 있는 외국 친구들이니깐 최대한 정보를 공유하며 좋은 결과를 만들어냈으면 좋겠다.



5. 참고
[1] http://csuhak.info - 우리나라 제일(?)의 CS 유학 준비 싸이트. 그런데 황당하게 해커스에서는 csuhak 싸이트가 금지어라 사람들에게 알려줄 수가 없다. 한글로 막 풀어 써도 도우미가 댓글을 지운다. 아무쪼록 csuhak에서 많은 정보를 얻으세요.
[2] http://www.wikipedia.org - 위키 만큼 간편하게 개념을 찾아보기에 편한 곳이 없다.
[3] http://mathworld.wolfram.com/ - 수학에 관해서는 역시 이 보다 좋은 곳은 없다. 간단히 수학 공식이나 개념 정리에는 안성맞춤.
[4] 나와 스터디 멤버들이 복원한 2005년 11월/12월 시험 문제, 알아보기가 상당히 힘들지만 그래도 시험에 나온 토픽이라도 알 수 있느니 도움이 될 것 같다.

첨부파일 1: 2005_11.xls
첨부파일 2: 2005_12.xls

핑백

  • mjipeo.net » GRE Subject - Computer Science 2009-05-13 22:11:44 #

    ... 있는 상황에서, 그나마 힘을 주는 결과가 날아와 줘서 다행이다. 조지아텍에서 박사과정 중이신 김민장 씨가 관련 글에서 언급했듯이, 이 점수가 어드미션에 미치는 영향은 정말 미미할 것임을 알지만, 희미하고 얄팍하게 ... more

덧글

  • Gerald 2007/01/02 12:58 # 답글

    Happy new year !!

    올려주신 글들을 보고 다소 들뜬 유학에 대한 마음을 정리하고 단어 외우기에 매진하고 있습니다.. ^^

    GRE subject 시험은 안 치더러라도 저 위의 책은 봐야 대학원가서 고생 안할듯 합니다. 졸업한지가 8년쨰라...

    기억이 거의 없는게 가장 흠이군요 ㅠ.ㅠ
  • object 2007/01/02 14:24 # 답글

    감사합니다. 새해 복 많이 받으세요. 그래도 스슬 전공 공부 해보심이 어떨런지요.. ㅎㅎ
  • Heany 2007/01/21 16:10 # 삭제 답글

    안녕하세요 형
    CS Subject 검색하다가 여기까지 왔어요
    읽다보니 익숙한 내용이라 블로그 주소를 봤더니ㅎ
    잘 계시죠?
  • SweetCorn 2007/12/22 12:50 # 답글

    GRE CS가 목표는 아닙니다만, 많은 도움이 되는 글이네요 ㅎㅎ
  • 박상민 2008/01/10 08:21 # 답글

    저는 네번 등록하고 두번 시험을 봤습니다. 처음 두 번은 자다가 놓친거죠. -_-;

    한번은 70%대가 나오고, 한번은 80%대가 나왔습니다. 정말 공부 많이하고 문제도 거의 다 풀었는데 어떻게 그런 점수가 나왔는지는 잘 모르겠어요. 스터디하면서 제가 거의 선생님이었는데 제일 못봤으니...

    거의 GRE CS는 제출하지 않았는데, GT는 실수로 제출한 유일한 학교였습니다. UIUC에는 안 받는다는 General을 리포팅했구요. 그런데도 합격한 걸 보면 GRE는 General/Subject 모두 별 영향이 없는것 같습니다.
  • object 2008/01/10 09:54 # 답글

    GRE 따위는 정말 중요치 않어!!
  • Gloria_bri 2012/08/21 21:27 # 삭제 답글

    이제 막 학부 졸업 예정인데 아직도 이거할까 저거할까 고민고민하다 이글을 봤어요~
    유학도 만만하게 볼 게 아니구나, 경각심을 일깨워 주는 글이네요 :-)

    노력과 인내가 분명히 있었음이 보이네요, 잘 되신 것 같아서 참 좋아보여요 :-)
댓글 입력 영역