pc관련/C언어2019. 3. 9. 22:45

C 언어의 역사

여러분은 아마도 C언어의 시초가 무엇이고, 어떻게 해서 'C'라는 이름을 가지게 되었 는지에 대해서 많은 의문을 가지고 있을 것이다. C는 1972년 벨 연구소에서 데니스 리치(Dennis Ritchie)에 의해서 개발되었다. 이 언어는 우연히 개발된 것이 아니라 많은 컴퓨터에서 사용되는 UNIX 운영 체계를 제작하는데 사용한다는 특별한 목적을 가지고 개발되었다. 즉, C 언어는 처음부터 프로그래머들이 작업을 완료하는데 유용하게 사용할 수 있도록 고안되었다. 이처럼 C 언어는 뛰어난 기능과 융통성을 제공해 주었으므로 오래지 않아 벨 연구소 뿐만 아니라 다른 여러 곳으로 빠르게 보급되었다. 많은 프로그래머들은 모든 프로그램을 작성하기 위해서 C 언어를 사용하기 시작했다. 그러나 서로 다른 곳에서 C 언어를 사용하는 프로그래머들은 C 언어를 약간씩 수정하여 각자 자신만의 독특한 환경을 구성 하기 시작했고, 결과적으로 C 언어로 작성된 프로그램들 간에는 미묘한 차이가 생기게 되었으며, 그로 인해 많은 프로그래머들은 다른 곳에서 작성된 프로그램을 정상적으로 실행하기 위해 다시 수정해야 하는 상황이 발생했다. 이러한 문제점을 해결하기 위해서 미국의 국가 표준 협회(ANSI : American National Standard Institute)에서는 C에 대한 표준을 만들기 위해서 1983년 위원회를 결성했고, ANSI 표준 C(ANSI Standard C)라고 알려진 표준안을 발표했다. 이제, C 언어의 명칭에 대해서 알아보도록 하자. C 언어는 이전에 사용되던 B언어를 계승한다는 점에서 'C'라는 이름을 가지게 되었다. B 언어도 벨 연구소의 켄 톰슨 (Ken Thompson)에 의해서 개발된 것이다. B 언어의 명칭이 어떻게 정해졌는지는 (B = Bell Labs) 쉽게 추축할 수 있을 것이다

오늘날 컴퓨터 프로그램을 작성할 때에는 C, 파스칼(Pascal), 베이직(BASIC), 자바(Java) 와 같이 많은 고급 언어 중에서 필요한 것을 선택하여 사용할 수 있다. 이런 대부분의 프로그래밍 언어는 특정 작업을 처리하는 데 있어서 최상의 환경을 제공해 준다. 그러나 많은 컴퓨터 전문가들은 다음과 같은 몇 가지 이유를 예로 들어서 여러 가지 프로그래밍 언어 중에서도 C 언어가 가장 뛰어나다고 주장한다


- C 언어는 강력한 기능을 제공하며 융통성을 발휘하는 언어이다. C 언어를 사용하여 수행할 수 있는 작업의 종류에는 아무런 제한이 없다. 프로그래밍 언어 자체에는 전혀 제한 사항이 없다. C 언어는 운영체제(operating system), 문서 작성기(word processor),  스프레드시트(spreadsheet)와 같은 응용 프로그램을 제작하는 데 사용될 수 있으며, 심지어는 다른 언어의 컴파일러를 개발하기 위해서도 사용될 수 있다

- C 언어는 전문적인 프로그래머들이 가장 선호하는 프로그래밍 언어이다. 그래서 시중  에는 매우 다양한 C 컴파일러와 유용한 유틸리티 프로그램이 존재한다


- C 언어는 이식성이 뛰어나다. 이식성(portable)이 뛰어나다는 것은, 예를 들어 IBM PC  와 같은 컴퓨터 시스템에서 작성된 C 프로그램이 DEC VAX 시스템과 같은 시스템에서 도 거의 수정 없이 컴파일되고 실행될 수 있다는 것을 뜻한다. 이식성은 앞에서 설명했던 C 컴파일러에 대한 여러 가지 규칙을 제안하는 C 언어의 ANSI 표준에 의해서 더욱 높아 지게 된다. 


- C 언어는 키워드(keyword)라는 몇 개의 단어만을 사용하여 프로그램을 구성하는 간편 함을 제공한다. 키워드는 C 언어의 기보적인 동작을 수행하는 데 사용되는 단어이며,  예약어라고도 한다. 어떤 사람들은 더 많은 키워드를 가지는 언어가 더욱 강력한 기능을  제공할 것이라고 생각할 것이다. 그러나 실제로는 그렇지 않다. C 언어를 사용하여 많은 프로그래밍 작업을 수행함에 따라, 기본적인 키워드만으로도 대부분의 작업을 수행하는 프로그램을 작성할 수 있다는 것을 알게 될 것이다


- C 언어는 모듈을 기본으로 한다. C 언어로 작성되는 프로그램은 함수(function)라는 각각의 루틴별로 작성될 수 있으며, 효율성 면에서도 하뭇 단위로 작성되는 것이 좋다. 각각의 함수는 다른 응용 프로그램을 작성할 때에도 사용될 수 있다. 프로그래머는 필요에 따라 함수에 자료를 전달하여 유용하고 재사용 가능한 프로그램을 작성할 수 있다. 이런 몇 가지 특징으로도 알 수 있듯이, C 언어는 가장 뛰어난 프로그래밍 언어라고 할 수있다. 참고로 C++라는 새로운 언어에 대해서 알아보도록 하자. 여러분은 이미 C++와 객체 지향 프로그래밍(OCP : Object-Oriented Programming) 방식에 대해서 들은 적이 있을 것이다. 또한, C와 C++ 언어의 차이점은 무엇이고, C 언어를 배운 다음에 다시 C++ 언어를 배워야 하지 않느냐는 의문을 가질 수도 있을 것이다. 그러나 이 점에 대해서는 전혀 걱정할 필요가 없다. C++ 언어는 C 언어의 기본적인 기능을 그대로 가지고 있으며, 추가로 객체 지향 프로그래밍에 필요한 사항을 포함하고 있는 언어이다. 그래서 나중에 C++ 언어를 배우더라도 C 언어에 대해서 배우는 거의 대부분의 내용이 C++ 언어에서도 적용되므로 많은 어려움이 없을 것이다. 결과적으로, C 언어를 배우는 것은 현재의 가장 강력하고 유용한 프로그래밍 언어를 배우는 것일 뿐 아니라, 미래에 대한 준비 로 객체 지향 프로그래밍의 기초를 배우는 것이기도 하다. 최근에 많은 관심을 모으고 있는 또다른 언어로 자바(Java)가 있다. 자바는 C++와 마찬가지 로 C를 기반으로 하는 언어이다. 만약 나중에 자바를 배우게 된다면 대부분의 내용이 C 언어에도 적용되는 것임을 알 수 있을 것이다.


일반적으로 어떤 문제를 해결하기 위해서는 단계별로 하나씩 해결해 나가야 한다. 우선, 문제점을 분명히 파악해야 한다. 문제점이 무엇인지 정확히 모른다면 해결 방법을 찾을 수 없다. 일단 문제점을 파악하고 나면 문제를 해결하기 위한 계획을 세울 수 있다. 또한, 계획을 작성한 후에는 실제로 필요한 작업을 수행할 수 있다. 마지막으로, 계획에 따라 필요한 작업을 수행하고 나면 문제가 바르게 해결되었는지 확인해볼 필요가 있을 것이다. 이런 개념은 프로그래밍에 있어서도 동일하게 적용되며 다른 많은 경우에도 적용될 것이다. C 언어를 사용하여 프로그램을 개발하고나 또는 동일한 문제를 해결하기 위해 다른 어떤 프로그래밍 언어를 사용하여 프로그램을 개발할 때에는 다음과 같은 일련의 과정을 따라야 한다. 


프로그램의 목적을 결정한다.

프로그램을 작성할 때 사용하기 원하는 방법을 결정한다. 문제를 해결하기 위해서 프로그램을 작성한다.

결과를 확인하기 위해서 프로그램을 실행한다. 

첫 번째 단계인 프로그램의 목적으로는 문서 작성기나 데이터베이스 프로그램을 작성하는 것을 예로 들 수 있다. 또는 화면 상에 사용자의 이름을 출력하는 것과 같은 간단한 목적도 될 수 있다. 만약 어떤 목적을 설정하지 않았다면 프로그램을 작성하는 것이 필요하지 않을 것이고, 전체적인 과정은 첫번째 단계에서 종료될 것이다. 두 번째 단계는 프로그램을 작성할 때 사용하기 원하는 방법을 결정하는 것이다. 이에 대한 예로는 주어진 문제를 해결하기 위해서 컴퓨터 프로그램을 작성할 필요가 있는가, 어떤 자료를 조사해야 하는가, 또는 어떤 공식을 사용하여 문제를 해결할 것인가를 결정하는 것이다. 두 번째 단계에서 프로그래머는 알아둘 필요가 있는 사항과 문제를 해결하기 윟나 순서를 결정해야 한다. 예를 들어, 원의 면적을 구하기 윟나 프로그램을 작성해야 한다고 가정하자. 첫 번째 단계는 윈의 면적을 구해야 한다는 분명한 목적이 있으므로 완료된 것이다. 두 번째 단계에서 원의 면적을 구하기 위해서 필요한 것을 결정해야 한다. 예제에서 원의 반지름을 알고 있다고 하자. 프로그래머는 원의 면적을 구하기 위해서 pr2이라는 공식을 사용할 수 있을 것이다. 이제 두 번째 단계까지의 작업이 완료되었으므로 실제 프로그램 개발 과정인 세 번째와 네 번째 단계로 진행할 수 있을 것이다


프로그램 개발 과정은 다시 단계별로 나눌 수 있다. 우선, 첫 번째 단계에서는 소스 코드 (Source code)를 작성하여 디스크 파일로 저장하기 위해서 에디터를 사용한다. 두 번째 단계에서는 오브젝트 코드(object code)를 생성하기 위해서 소스 코드를 컴파일 (compile)한다. 세 번째 단계에서는 실행 파일(executable file)을 생성하기 위해서 컴파일된 코드를 링크(link)한다. 마지막으로 네 번째 단계에서는 작성된 프로그램이 정상적으로 동작하는지 확인하기 위해서 프로그램을 실행한다. 


4.1 소스 코드의 입력

소스 코드는 프로그래머가 원하는 작업을 컴퓨터가 수행하도록 지시하는 데 사용되는 일련의 명령문(statements)이나 명령(commands)이다. 앞에서도 설명했듯이, 프로그램 개발 과정의 첫 번째 단계는 에디터를 사용하여 소스 코드를 입력하는 것이다. 예를 들어, 다음과 같은 한 줄의 C 소스 코드가 있다. 


printf("Hello, Kim!"); 


이 것은 컴퓨터가 'Hello, Kim!'이라는 내용을 화면 상에 출력하도록 지시하는 문장이다. 일단, 이 명령문의 상세한 내용에 대해서는 잠시 미루어 두자. 


▶ 에디터의 사용

대부분의 컴파일러는 소스 코드를 입력하는 데 사용할 수 있는 에디터(editor)를 내장하고 있지만, 일부는 에디터를 내장하고 있지 않다. 여러분의 컴파일러가 에디터를 내장하고 있는지 알아보기 위해서 컴파일러와 함께 제공되는 설명서를 참조하기 바란다. 컴파일러에 에디터가 내장되어 있지 않더라도 많은 에디터 프로그램을 사용할 수 있다. 대부분의 컴퓨터 시스템에는 에디터로 사용할 수 있는 프로그램이 포함되어 있다. UNIX를 사용 중이라면 ed, ex, edit, emacs, vi와 같은 에디터를 사용할 수 있을 것이다. 

마이크로 소프트(Ms)의 윈도우를 사용 중이라면 노트패드(Notepad)가 포함되어 있다. DOS 5.0이상의 버전을 사용 중이라면 Edit를 사용할 수 있다. 또한, 5.0 이전의 DOS버전을 사용 중이라면 Edlin을 사용할 수 있다. PC DOS 6.0 이상의 버전을 사용 중이라면 E를 사용 할 수 있다. OS/2를 사용 중이라면 E와 EPM 에디터를 사용할 수 있다. 대부분의 문서 작성기는 작성된 문서를 형식화(format)하기 위해서 특수한 코드를 사용하고 있다. 이런 코드는 다른 프로그램에서 정상적으로 사용될 수 없다. 그래서 C 언어를 포함하여 거의 모든 프로그램에서는 텍스트의 표준 형식으로 ASCII(American Standard Code for Information Interchange)를 사용한다. 워드퍼펙트(WordPerfect), 아미프로(AmiPro), 워드(Word), 워드패드, 워드스타(WordStar)와 같은 여러 가지 문서 작성기에서는 소스 파일을 독특한 문서 파일 형식뿐 아니라 ASCII 형식의 텍스트 파일로 저장할 수 있을 것이다. 

문서 작성기를 사용하여 작성된 파일을 ASCII 파일 형식으로 저장하기 위해서는 문서 작성기 내에서 ASCII나 텍스트 파일 저장 기능을 선택하면 된다. 소스 코드를 입력하여 파일로 저장할 때에는 적절한 이름을 지정해야 한다. 파일의 이름은 프로그램의 동작을 설명하는 것이어야 한다. 또한, C 프로그램의 소스 파일을 저장할 때에는 확장자로 .C를 사용해야 한다. 소스 파일에 어떤 이름과 확장자를 사용하든지 관계는 없지만 확장자로 .C를 사용하는 것이 가장 좋다. 


4.2 소스 코드의 컴파일

여러분은 C 언어로 작성된 소스 코드를 이해할 수 있겠지만 컴퓨터는 결코 소스 코드를 이해할 수 없을 것이다. 대신, 컴퓨터는 기계어(machine language)로 작성된 명령문을 요구한다. 그래서 C 언어로 작성된 프로그램이 컴퓨터 상에서 실행될 수 있으려면, 우선 소스 코드에서 기계어로 변환될 필요가 있는 것이다. 프로그램 개발 과정의 두 번째 단계인 변환 작업은 컴파일러라는 프로그램에 의해서 수행된다. 컴파일러는 소스 파일을 입력받아서 대응하는 기계어 명령문을 작성하여 디스크 파일로 저장한다. 컴파일러에 의해서 생성되는 기계어 명령문을 오브젝트 코드(object code)라고 하며, 오브젝트 코드가 포함되어 있는 디스크 상의 파일을 오브젝트 파일(object file)이라고 한다. 각각의 컴파일러에서 오브젝트 코드를 생성하기 위해서는 정해진 명령을 사용해야 한다. 대개 소스 코드를 컴파일하기 위해서는 컴파일러의 이름과 함께 소스 파일의 이름을 입력하게 된다. 다음은 다양한 DOS/윈도우용 컴파일러에서 RADIUS.C라는 소스 파일을 컴파일하기 위해서 필요한 명령의 예이다. 

RADIUS.C 파일을 UNIX에서 컴파일하기 위해서는 다음과 같은 명령을 사용하기 바란다.

cc radius.c 

실제로 여러분의 컴파일러에서 사용되는 정확한 명령을 알아보기 위해서는 제공되는 컴파일러 설명서를 참조하기 바란다. 만약 그래픽 개발 환경을 사용 중이라면 컴파일 작업은 훨씬 더 쉬어진다. 대부분의 그래픽 환경에서는 컴파일 아이콘을 선택하거나 또는 메뉴에서 특정 항목을 선택하여 프로그램 리스트를 컴파일할 수 있다. 일단 코드가 컴파일되면 실행 아이콘을 선택하거나 메뉴에서 특정 항목을 선택하는 것만으로 프로그램을 실행할 수 있다. 프로그램을 컴파일하고 실행하는 방법에 대해서는 여러분이 사용 중인 컴파일러의 사용 설명서 참조하기 바란다. 소스 파일을 컴파일하게 되면 오브젝트 파일이 생성된다. 그래서 컴파일을 수행한 디렉토리의 파일 목록을 살펴보면, 소스 파일과 동일한 이름을 가지고 있지만 .C가 아니라 .OBJ라는 확장자를 가지는 파일을 볼 수 있을 것이다. .OBJ의 확장자를 가지는 파이은 오브젝트 파일이며 링커에 의해서 사용된다. UNIX 시스템의 경우 컴파일러는 .OBJ의 확장자가 아니라 .O의 확장자를 가지는 오브젝트 파일을 생성할 것이다. 


4.3 실행 파일을 생성하기 위한 링크 작업


프로그램을 실행하기 위해서는 다른 한 가지 단계가 더 필요하다. 

C 컴파일러에서는 오브젝트 코드를 가지고 있는 함수 라이브러리(function library)가 함께 제공된다. 오브젝트 코드는 컴파일된 상태의 코드를 말한다. 내장 함수는 컴파일러를 제작한 회사에서 따로 작성한 C 코드를 통해서 생성된 것이며, 컴파일러를 구입할 때 사용할 수 있는 상태로 함께 제공되는 것이다. 앞에서 예제를 설명할 때 사용된 printf() 함수는 라이브러리 함수의 하나이다. 이런 라이브러리 함수는 화면에 자료를 출력하거나 디스크 파일에서 데이터를 읽어들이는 것과 같이 프로그램에서 흔히 요구되는 동작을 수행하기 위해서 사용된다. 프로그래머가 작성한 프로그램에서 이런 내장 라이브러리 함수를 전혀 사용하지 않는 경우는 거의 없으며, 이런 함수를 사용하는 프로그램을 작성했다면 소스 코드를 컴파일하여 생성되는 오브젝트 파일은 마지막 단계인 실행 가능한 프로그램을 생성하기 위해서 함수 라이브러리 내의 오브젝트 코드와 결합되어야 한다. '실행이 가능하다(executable)'는 것은 프로그램을 컴퓨터에서 실행하거나 사용할 수 있다는 것을 뜻한다. 이것을 링크(linking) 과정이라고 하며, 짐작할 수 있듯이 링커(linker) 라는 프로그램에 의해서 수행된다.


4.4 프로그램 개발 과정의 완료

일단 프로그램이 컴파일되고 실행 가능한 파일을 생성하기 위해 링크 과정을 거치게 되면, 사용자는 시스템 프롬프트에서 파일 이름을 입력하거나 또는 다른 어떤 프로그램을 사용하는 것과 같은 방법으로 실행할 수 있다. 만약 프로그램을 실행할 때 예상했던 것과 다른 결과가 나타난다면 다시 첫 번째 단계로 돌아갈 수 있을 것이다. 프로그래머는 문제가 발생한 부분을 확인하고, 소스 코드에서 문제를 해결해야 한다. 소스 코드의 내용이 변경될 때에는 실행 가능한 파일의 내용도 정정하기 위해서 프로그램을 다시 컴파일하고 링크할 필요가 있다. 이런 과정은 예상했던 결과가 나타날 때까지 반복되어야 한다. 마지막으로, 컴파일과 링크 과정에 대해 알아둘 사항이 있다. 여기에서는 컴파일과 링크 과정을 두 개의 독립된 단계로 설명했지만 이런 두 가지 과정을 한번에 수행한다. 그러나 컴파일과 링크 과정이 비록 하나의 명령을 통해서 동시에 수행되더라도 수행 방법에 관계없이 이런 과정은 두 개의 독립된 과정이라는 것을 기억하기 바란다


5. 간단한 C 예제 프로그램

이제 여러분은 C 언어를 사용하여 프로그램을 작성해 보기 원할 것이다. 여기에서는 컴파일러의 사용법을 익힐 수 있도록 도와주기 위해서 간단한 프로그램의 개발 과정을 설명할 것이다. 여기서 설명하는 모든 기술적인 내용을 이해할 수는 없겠지만, 예제를 통해서 C 프로그램을 작성하고 컴파일하여 실행하는 과정에 대해서 충분히 이해할 수 있을 것이다. 예제에서는 문장 'Nice guy!'를 화면 상에 출력하는 NICE.C라는 간단한 프로그램을 사용한다. 리스트 1.1 에는 NICE.C의 소스 코드가 나타나 있다. 리스트를 입력할 때 문장 번호나 콜론을 입력할 필요는 없다. 

리스트 1.1> NICE.C

우선, 설명서를 참조하여 컴파일러를 정확히 설치했는지 확인하기 바란다. UNIX, DOS 또는 어떤 운영체제를 사용하든지, 여러분의 사용 환경에서 컴파일러와 에디터를 사용하는 정확한 방법을 알아두기 바란다. 컴파일러와 에디터를 사용할 준비가 되었다면, NICE.C를 입력하고 컴파일하여 실행하기 위해서 다음과 같은 단계를 따르도록 한다 .


5.1 NICE.C의 입력과 컴파일

NICE.C 프로그램을 입력하고 컴파일하기 위해 다음과 같이 한다. 

a. C프로그램이 저장되어 있는 디렉토리로 이동하거나 또는 C 프로그램의 경로를 검색 경로에 추가하고 나서 에디터를 실행한다. 앞에서도 설명했듯이, 원한다면 어떤 텍스트 에디터든지 사용할 수 있지만, 볼랜드의 Turbo C++나 마이크로소프트의 Visual C/C++와 같은 최신의 C 컴파일러에서는 하나의 환경에서 프로그램을 입력하고, 컴파일하고, 링크할 수 있도록 해주는 편리한 통합 개발환경(IDE : Integrated Development Environment) 을 제공해준다. 여러분의 컴파일러에서 IDE가 제공되는지 알아보기 위해서 설명서를 확인하기 바란다. 

b. 키보드를 사용하여 앞의 <리스트 1.1>에 나타난 것과 동일하게 NICE.C의 소스 코드를 입력한다. 각 문장의 마지막 부분에서는 Enter를 누른다. 

c. 소스 코드를 저장한다. 파일의 이름은 NICE.C라고 지정한다. 

d. 디렉토리나 폴더의 파일을 나열하여 NICE.C가 디스크에 저장되어 있는지 확인한다. 

e. NICE.C를 컴파일하고 링크한다. 여러분의 컴파일러 설명서에 나타나 있는 명령을 사용하면 된다. 아무런 에러나 경고 사항이 없다고 알려주는 메시지가 출력되어야 한다. 

f. 컴파일러의 메시지를 확인한다. 만약 아무런 에러나 경고 메시지도 나타나지 않는다면 모든 것이 정상적이라고 할 수 있다. 만약 프로그램을 입력할 때 실수를 했다면, 컴파일러는 문제를 찾아서 화면 상에 적절한 에러 메시지를 출력할 것이다. 예를 들어, 단어 printf를 잘못하여 prntf로 입력했다면 다음과 비슷한 메시지가 출력될 것이다


Error : undefined symbols:_prntf in nice.c (nice.OBJ) 


g. 이런 에러 메시지나 다른 어떤 메시지가 출력된다면 2단계로 돌아가야 한다. 그리고 에디터를 실행하고 NICE.C를 읽어들여서 파일의 내용을 리스트 1.1과 주의 깊게 비교하여 필요한 내용을 정정하고 3단계부터 다시 진행한다

h. 이제 첫 번째 C 프로그램이 컴파일되고 실행할 수 있는 상태가 되었을 것이다. 만약 디렉토리에서 확장자에 관계없이 NICE라는 이름을 가지는 모든 파일의 목록을 확인한다면, 다음과 같은 내용을 볼 수 있을 것이다. 

- NICE.C - 에디터를 사용하여 입력한 소스 코드 파일

- NICE.OBJ 또는 NICE.O - NICE.C의 오브젝트 코드가 저장된 파일

- NICE.EXE - NICE.C를 컴파일하고 나서 링크하여 생성된 실행 가능한 프로그램


i. NICE.EXE를 실행하거나 사용하기 위해서 간단히 nice를 입력한다. 'Nice guy!'라는 문장이 화면에 출력될 것이다. 정상적으로 프로그램이 실행되었다면 축하할 일이다. 여러분은 첫 번째 C 프로그램을 입력하고 컴파일하여 실행해보았다. NICE.C는 특별히 유용한 어떤 동작을 수행하지 않는 간단한 프로그램이지만 프로그래밍을 시작하는 아주 좋은 예이다 실제로, 오늘날의 대부분의 전문적인 C 프로그래머는 이런 과정을 거쳐서 NICE.C를 컴파일하여 C를 배우기 시작했으므로, 여러분은 앞으로 뛰어난 프로그래머가 될 수 있다는 희망을 가질 필요가 있다.

▶ 컴파일에러

컴파일에러(compilation error)는 컴파일러가 컴파일할 수 없는 어떤 내용을 소스 코드 내에서 발견할 때 발생하는 에러이다. 컴파일에러는 소스를 잘못 입력하거나 구두점을 빠뜨리고, 또는 다른 어떤 실수로 인해서 발생한다. 다행히, 현재 사용되는 컴파일러는 잘못된 부분에서 작업을 포기하지 않고 에러의 내용과 위치를 알려준다. 이런 기능은 소스 코드의 에러를 찾아서 정정하기 쉽게 도와준다. NICE.C에 잘못된 내용을 고의로 포함시켜 컴파일에러를 살펴보도록 하겠다. 앞에서 NICE.C를 입력하여 실행해 보았으므로 디스크에는 NICE.C라는 파일이 저장되어 있을 것이다. 에디터를 실행하고 printf() 함수가 사용된 곳으로 커서를 이동시키고 문장의 마지막에서 세미콜론(;)을 제거한다. 이제 NICE.C는 <리스트 1.2>와 같은 내용이 될 것이다. 

리스트 1.2 에러가 포함된 NICE.C

다시 파일을 저장한다. 이제 파일을 컴파일할 수 있을 것이다. 컴파일러 명령을 입력하여 파일을 컴파일하자. 여기에서는 고의로 에러를 만들었기 때문에 컴파일은 정상적으로 수행되지 않을 것이다. 대신에 화면에는 다음과 같은 메시지가 출력될 것이다.

nice.c(6) : Error: ';' expected 

이것은 다음과 같이 세 부분으로 나누어 볼 수 있다.

>nice.c              - 에러가 발생한 파일의 이름

(6)                - 에러가 발생한 문장 번호

Error: ';' expected - 에러의 내용


앞에서 발생한 에러는 NICE.C의 6번째 줄에서 세미콜론이 발견되어야 하지만 컴파일러가 세미콜론을 발견할 수 없었다는 것을 상세하게 알려주고 있다. 그러나 실제로는 소스 코드의 5번째 줄에서 세미콜론이 생략되었으므로 발견된 에러와 사실에는 차이가 있다는 것을 알 수 있다. 여기에서, 컴파일러가 5번째 줄에서 생략된 세미콜론을 6번째 줄에서 생략된 것으로 받아들이는 이유는 무엇일까? 해답은 c 언어가 각 줄을 정확히 '구분하지 못한다.'는 데 있다. 세미콜론을 함수와 분리하여 그 다음 줄에 입력하는 것은 좋지 못한 습관이지만, printf() 함수의 다음 줄에 세미콜론이 사용될 수도 있을 것이다. 컴파일러는 6번째 줄에서 다음 명령인 return을 발견하고 나서야 앞에서 세미콜론이 생략되었다는 것을 알게 된다. 그래서 컴파일러는 에러가 6번째 줄에서 발생했다고 알려주는 것이다. 여기서 C 컴파일러와 에러 메시지에 대한 중요한 사실을 알 수 있다. 컴파일러는 에러를 발견하고 찾아내는 일에 대해서 상당히 영리하게 동작하지만 그 결과가 항상 정확하지는 않다. 프로그래머는 가끔 컴파일러가 출력하는 에러 메시지를 읽고 에러의 정확한 위치를 찾기 위해서 C에 대해서 알고 있는 지식을 응용해야 할 것이다. 실제로, 컴파일러가 발견하는 에러의 위치가 정확하지 않다면 대부분의 경우에는 바로 앞 문자에서 발생한 것이다. 처음에는 이런 문제로 인해 에러를 발견하는 것이 어려울 수도 있겠지만 곧 에러의 위치를 쉽게 찾을 수 있게 될 것이다.

'pc관련 > C언어' 카테고리의 다른 글

숫자배열 사용하기  (0) 2019.03.20
C언어-프로그램제어문  (0) 2019.03.17
함수의 기본  (0) 2019.03.16
데이터 저장하기 : 변수와 상수  (0) 2019.03.11
C 프로그램의 구성 요소  (0) 2019.03.10
Posted by 둥이파파^^
pc관련2019. 3. 7. 22:39

CPU쿨러 및 쿨링팬에 대해 알아봅니다.


공랭


CPU쿨러는 열을 식히는 방식에 따라 공랭 쿨러와 수랭 쿨러로 나뉜다. 이 중 공랭(공냉)은 공기의 순환을 이용해 발열을 줄이는 방식을 뜻한다. 이 방식을 채택한 쿨러는 CPU에서 흡수한 열을 히트파이프를 통해 방열판(히트싱크)으로 옮기고 방열판을 공기로 냉각하는 방식으로 CPU를 냉각한다.


공랭은 팬을 사용해 열을 식히는 액티브 쿨링과 팬을 사용하지 않는 패시브 쿨링으로 나뉜다. 액티브 쿨링은 팬으로 바람을 일으켜 방열판을 냉각하는 방식이며, 패시브 쿨링은 소음을 줄이기 위해 팬을 사용하지 않고 방열판으로 열을 넓게 퍼트려 냉각하는 방식이다.


타워형/플라워형


타워형 공랭 쿨러는 CPU의 열을 효과적으로 분산시키기 위해 방열판을 탑처럼 위로 쌓아올린 형태의 제품이다. 이런 형태의 제품은 냉각 효율이 좋아서 종종 수랭 쿨러와 비슷한 수준의 성능을 보이는 제품도 있지만, 크기가 커서 케이스 내부에 잘 들어가지 않을 수 있다.


한편, 플라워형 공랭 쿨러는 방열판 위에 쿨링팬이 장착된 형태를 말한다. 이 형태의 제품은 크기가 작아 조립이 수월하고 CPU 주변부 냉각이 수월하다. 대신 CPU 냉각 효율이 다소 떨어지고 데워진 공기가 다시 흡입되기 때문에 케이스 내부 온도가 높아진다는 단점이 있다.


푸시핀/볼트킷


흔히 ‘초코파이 쿨러’라 불리는 인텔 CPU쿨러는 4군데의 플라스틱 레버를 누르는 방식으로 장착한다. 이를 푸시핀이라 한다. 푸시핀은 쿨러 장착이 용이하나 메인보드가 약간 휠 수 있다는 문제가 있다.


이와 달리 대부분의 사제 공랭 쿨러는 메인보드 뒤에 후면 지지대를 달고 나사로 쿨러를 장착한다. 이를 볼트킷이라 한다. 볼트킷은 쿨러를 단단히 고정시켜주고 메인보드가 휘는 일이 적다. 대신 조립이 다소 불편할 수 있음은 감안해야 한다.

수랭


공랭이 공기로 열을 식힌다면 수랭(수냉)은 액체로 발열을 해소한다. 수랭 쿨러는 공랭 쿨러보다 가격이 비싸고 조립 과정이 복잡하며 누수의 위험이 있다. 그럼에도 많은 이들이 수랭 쿨러를 애용하는 이유는 냉각 효율 때문이다. 수랭 쿨러는 일반적으로 냉각 효과가 공랭 쿨러보다 우월하기 때문에 오버클럭에 많이 사용된다.


수랭 쿨러는 크게 커스텀 수랭 쿨러와 일체형 수랭 쿨러로 구분된다. 커스텀 수랭 쿨러는 모든 부품을 하나하나 조립해야 하는 방식이며 일체형 수랭 쿨러는 완제품 상태로 출시돼 CPU와 케이스에 연결만 하면 되는 방식을 말한다.


수랭 쿨러는 공랭 쿨러에 비해 구조가 다소 복잡하다. 일체형 수랭 쿨러의 경우 CPU의 열기를 이동시키는 자켓과 냉각수를 옮기는 펌프, 냉각수가 이동하는 호스, 호스를 고정시키는 피 팅, 열을 방출하는 라디에이터, 라디에이터를 식히는 쿨링팬 등으로 구성된다.


일체형 수랭 쿨러는 자켓과 펌프가 합쳐져 있으나 커스텀 수랭 쿨러는 자켓과 펌프가 분리돼 있다. 또한, 냉각수를 담는 수통이 있으며, 펌프와 물통을 함께 고정하는 브라켓도 필요하다.


냉각수


수랭 쿨러로 열을 식히려면 냉각수가 필요하다. 수랭 쿨러에 들어가는 냉각수는 액체 내 미생물의 성장을 억제하는 살생제와 금속 부품의 부식을 막는 부식방지제, 물이 얼지 않게 하는 부동액 등이 포함돼 있다. 당연히 냉각수를 마시면 매우 위험하다.


커스텀 수랭 쿨러를 구성할 때 냉각수에 색을 입힐 수도 있다. 커스텀 수랭 쿨러의 경우 투명한 수통에 냉각수가 담기게 되는데 냉각수에 색을 가미하면 컴퓨터가 더욱 화려해진다. 미리 색이 첨가된 냉각수를 사용할 수도 있고, 냉각수에 첨가제를 넣어 색을 입힐 수도 있다.


호환성


공랭 쿨러, 수랭 쿨러를 구매할 때 공통적으로 자신이 사용하는 컴퓨터의 메인보드 소켓과 호환되는지를 살펴봐야 한다. 소켓은 메인보드에 CPU를 꽂는 부분으로 CPU의 종류에 따라 그 형태가 다르다. 만일 메인보드 소켓에 맞지 않는 CPU쿨러를 구매하면 장착에 문제가 생길 수 있으니 구매하려는 쿨러가 어떤 소켓을 지원하는지 살펴봐야 한다.


케이스와의 호환성도 중요하다. 공랭 쿨러를 구매할 때는 케이스가 지원하는 최대 CPU쿨러 높이가 어느 정도인지 확인해야 한다. 수랭 쿨러를 고를 때는 케이스에 부착할 수 있는 라디에이터의 길이가 어느 정도인지 살펴봐야 한다.

 


쿨링팬


액티브 쿨링 방식의 공랭 쿨러와 수랭 쿨러의 라디에이터에는 쿨링팬이 달려 있다. 쿨링팬은 방열판/핀의 열을 식혀 주는 역할을 담당한다. 이 쿨링팬의 성능을 확인하려면 먼저 최대 풍량을 확인 해보면 좋다. 풍량의 단위는 CFM으로, CFM이 높을수록 더 많은 바람을 일으키기 때문에 열을 빨리 식혀준다.


또한, 소음도 중요하다. 쿨링팬의 소음을 확인하려면 스펙표에서 최대 소음도가 어느 정도인지 확인하면 좋다. 단위는 dBA로 이 수치가 높을수록 소음이 크다. 온도/부하에 따라 쿨링팬의 속도를 자동으로 조절하는 PMW 기능이 있는지도 확인하면 좋다.


서멀 컴파운드


CPU 쿨러를 사용하기 위해서는 CPU와 쿨러의 방열판 사이에 서멀 컴파운드(서멀 그리스)를 발라줘야 한다. 서멀 컴파운드는 열전도율이 높아 CPU의 고열을 방열판과 히트파이프에 효과적으로 전달해주는 역할을 수행한다. 이를 바르지 않으면 냉각 효율이 크게 떨어져 아무리 고성능 쿨러를 달아도 나중에 큰 문제가 발생할 수 있다.


서멀을 바를 때는 CPU 위에 X자나 중앙에 점 형태로 적당량 발라주면 된다. 절대 메인보드 서킷이나 핀에 바르면 안 된다. 또한, 저가 서멀 컴파운드는 물이 섞여 있어서 시간이 지나면 물이 새어 나와 컴퓨터를 망가뜨릴 수 있으니 고급 제품을 사용하자. 

크기


쿨링팬을 구매했을 때 케이스와 맞지 않아 조립에 어려움을 겪는 경우가 종종 발생한다. 이를 막기 위해서는 케이스 규격에 맞는 크기의 쿨링팬을 구매해야 한다. 여기서 쿨링팬의 크기는 팬의 직경을 말한다. 이전에는 80mm 사이즈의 쿨링팬이 많이 쓰였으나 현재는 120mm가 가장 많이 쓰인다. 개중에는 140mm 이상의 대형 쿨링팬도 있다.


쿨링팬의 크기는 팬의 속도와 소음을 좌우한다. 쿨링팬이 크면 클수록 팬이 돌아가는 속도는 느려지고 대신 소음도 줄어든다. 반면, 쿨링팬이 작으면 작을수록 속도가 빨라지는 대신 소음이 커진다.


속도


쿨링팬 스펙표에서의 속도는 쿨링팬이 얼마나 빠르게 돌아가는지를 나타낸다. 단위는 RPM으로, 가령 1300RPM으로 표기된 경우 쿨링팬이 분당 최대 1,300번 회전한다는 것을 뜻한다. RPM이 높을수록 케이스 내부 온도 조절 능력이 좋지만 소음이 커지고, RPM이 낮으면 소음이 줄어드는 대신 냉각에 애로사항이 다소 발생할 수 있다.


그러나 쿨링팬의 속도는 점점 중요도가 감소하고 있다. 우선 똑같은 속도를 지닌 쿨링팬이라도 설계에 따라 냉각 성능이 달라질 수 있기 때문이다. 최근에는 현재 온도를 파악해 팬 속도를 적절하게 조절하는 제품도 많다. 현재는 2000RPM 이하의 회전수로 소음을 잡은 제품이 주류를 이루고 있다.


풍량


속도가 1분당 쿨링팬이 얼마나 많이 회전하는지를 나타낸다면, 풍량은 이로 인해 얼마나 많은 바람이 발생하는지를 뜻한다. 풍량의 단위로는 CFM을 사용하는데, 이는 1분 동안 발생한 바람의 부피를 나타낸다. 이 수치가 클수록 쿨링팬이 더 많은 바람을 일으킨다.


쿨링팬의 냉각 성능을 확인할 때 최대 풍량을 꼭 확인해보는 것이 좋다. 풍량이 많을수록 케이스 내부를 더 빨리 식혀주기 때문이다. 실제 사용 중에는 소음을 줄이기 위해 항상 최고 속도로 쿨링팬이 돌아가지는 않지만, CFM이 높으면 풍량이 적을 때도 소음이 적고 안정적으로 작동하는 경향이 있다. 즉, CFM이 높을수록 고성능 쿨링팬이라 할 수 있다.


베어링


쿨링팬은 회전체의 중심인 팬 허브, 날개 부분인 팬 블레이드(임팰러) 그리고 팬을 감싸는 팬 프레임 등으로 구성돼 있다. 이 중에서 팬 허브 속에는 베어링이라는 부품이 자리 잡고 있다. 베어링은 쿨링팬이 회전할 때 중심축을 지지하고 마찰을 줄여 쿨링팬이 안정적으로 돌아갈 수 있게 하는 역할을 담당한다.


PC용 쿨링팬은 주로 슬리브 베어링, 볼베어링 등을 사용한다. 슬리브 베어링은 아무런 홈이 없는 베어링으로 소음이 매우 적고 저렴하지만 수명 이 짧다. 볼베어링은 홈 안의 쇠구슬 로 마찰을 줄이는 베어링으로 내구성이 좋지만 중저속에서 소음이 심하다. 유체베어링을 쓰는 제품도 있다. 이 베어링은 정숙하고 수명도 길지만 비싸다.


소음도


케이스 내부를 식히기 위해 쿨링팬이 돌아가면 소음이 발생한다. 이 소음도는 dBA로 나타낸다. 20dBA는 조용한 도시의 아파트에서 나는 소리와 비슷하며, 30dBA는 속삭이는 소리, 50dBA는 낮은 목소리로 대화하는 정도의 크기다. 1~3dBA는 그리 큰 차이가 없지만 5dBA부터는 누구나 확연히 구분할 수 있을 정도의 차이가 난다.


이때 제품마다 소음의 정도가 다른데 이는 쿨링팬의 크기, 팬이 돌아가는 속도, 베어링 등과 관련이 있다. 쿨링팬이 작을수록, 팬이 빨리 돌아갈수록 소음이 커진다. 또한, 볼베어링은 슬리브 베어링, 유체베어링에 비해 소음이 비교적 크다.


방향


한 커뮤니티 사이트에서 쿨링팬 방향을 바꾸니 뜨거웠던 케이스 내부 온도가 크게 내려갔다는 글이 올라와 화제가 됐다. 쿨링팬에는 공기를 빨아들이는 방향(흡기 방향)과 공기가 나가는 방향(배기 방향)이 있다. 이 방향을 헷갈려 쿨링팬을 잘못 설치하면 냉각 효율이 크게 떨어지니 조심해서 설치해야 한다.


그렇다면 흡기 방향과 배기 방향을 어떻게 구분할까? 일반적으로는 쿨링팬 옆면에 회전 방향, 배기 방향이 화살표로 표기돼 있다. 이 화살표가 없을 때는 팬 블레이드의 오목한 부분이 바라보고 있는 부분이 배기 방향, 볼록한 부분이 바라보고 있는 방향이 흡기 방향이다.


LED


쿨링팬이 최근 들어 PC 튜닝 분야에서 각광 받는 이유는 LED 때문이다. LED가 달린 쿨링팬을 메인 보드에 연결하면 쿨링팬이 빛을 발산해 컴퓨터가 더 아름다워진다. 제품에 따라 화이트, 레드, 블루 등 단색만 지원하는 제품이 있고, RGB를 지원해 LED 색상이나 효과를 조절할 수 있는 제품이 있다.


그동안 LED 쿨링팬은 팬 허브 내부에 LED가 달려 있는 제품이 많았다. 팬 허브 내부의 LED 조명이 켜지면 투명한 팬 블레이드도 빛나는 원리다. 최근에는 팬 프레임에 LED 조명을 장착한 쿨링팬도 늘어났다. 이렇게 하면 어느 방향에서 쿨링팬을 바라봐도 LED가 빛나는 모습을 확인할 수 있다.

'pc관련' 카테고리의 다른 글

PC메모리  (0) 2019.03.16
저장장치(SSD,HDD)  (0) 2019.03.14
파워서플라이에 종류  (0) 2019.03.11
CPU종류  (0) 2019.03.07
그래픽 카드에 종류들~~  (0) 2019.03.07
Posted by 둥이파파^^
pc관련2019. 3. 7. 22:36

클럭


CPU 성능의 가장 중요한 기준 중 하나로는 클럭이 있다. 클럭은 1초 동안 CPU에서 몇 단계의 작업이 이뤄지는지를 나타내는 것으로 단위는 Hz다. 클럭 수치가 높으면 작업을 더 빠르게 처리할 수 있으니 고성능을 지닌 CPU라 볼 수 있다. 다만, 클럭만 지나치게 높다면 발열이나 전력 소모가 심해질 수 있으니 주의해야 한다.


컴퓨터 마니아들 중에는 CPU의 성능을 높이기 위해 클럭을 정규 클럭 이상으로 끌어올리는 이들도 많은데, 이를 오버클럭이라 한다. 한편, 클럭을 일시적으로 상승시킬 수 있는 기능도 있다. 인텔 CPU의 터보부스트, AMD CPU의 터보코어가 그것이다.


코어


CPU가 컴퓨터의 두뇌라면, 코어는 CPU의 뉴런이다. 코어는 CPU에 내장된 처리회로의 핵심으로, CPU 내부에 들어오는 여러 명령을 연산 처리하는 역할을 수행한다. 옛날에는 CPU에 하나의 코어만 들어 있는 경우가 많았다. 하지만 이제는 2개의 코어가 탑재된 듀얼코어를 넘어 쿼드코어(4개), 헥사코어(6개), 옥타코어(8개) 등 다중 코어 CPU가 대세를 이루고 있다.


코어 수가 많으면 어떤 점이 좋을까? 다중 코어 CPU는 같은 수의 싱글코어 CPU와 비슷한 성능을 낸다. 가령 듀얼코어 CPU는 싱글코어 CPU 2개와 작업 효율이 비슷하다. 다만, 다중 코어 CPU가 제힘을 발휘하려면 동시에 여러 작업을 하거나 다중 코어 연산을 지원하는 소프트웨어가 있어야 한다.


스레드


스레드는 코어에 할당된 작업 공간으로, CPU 내부에서 실제로 작업을 수행하는 가장 작은 논리적 단위를 말한다. 본디 CPU 코어는 한 번에 1개의 스레드만 할당돼 사용할 수 있다. 가령 2개의 코어가 있는 듀얼코어 CPU라면 일반적으로 2개의 코어에 2개의 스레드가 배정된다.


하지만 요즘에는 1개의 코어에 2개의 스레드가 배정된 프로세서도 많다. 인텔의 하이퍼 스레딩(Hyper Threading), AMD의 SMF(Simultaneous Multi Threading) 기술 덕분이다.


이 기술이 적용된 CPU는 작업 처리 과정에서의 병목 현상이 줄어들기 때문에 그렇지 않은 CPU에 비해 최대 40%까지 성능이 향상된다. 해당 기술이 적용된 CPU는 작업 관리자에서 코어가 2배로 늘어난 것처럼 보인다.


캐시 메모리


캐시 메모리는 CPU 내부에 임시로 데이터를 저장해두는 공간을 말한다. CPU는 자주 사용하는 데이터를 캐시 메모리에 저장한 다음 다시 사용할 때 시스템 메모리가 아닌 캐시 메모리에서 불러온다. 캐시 메모리 용량이 많으면 그만큼 더 많은 데이터를 저장할 수 있기 때문에 더 빠른 속도로 작업을 처리할 수 있다.


CPU의 캐시 메모리는 L1, L2, L3 캐시 메모리로 나뉜다. L1 캐시는 코어와 가장 밀접해 가장 먼저 사용되며, 속도가 가장 빠른 대신 용량이 가장 적다. L2, L3 캐시는 L1 캐시 다음에 사용되며, 용량은 L1보다 많고 속도는 느리다.


아키텍처


아키텍처는 좁게는 CPU의 기본 설계 구조를 말한다. 하지만 넓게 보면 컴퓨터 시스템의 기본 구조와 설계 방식, 제조 공정까지 포함하는 개념이다. 똑같은 차라도 연식에 따라 성능이 다르듯, 같은 브랜드의 CPU도 아키텍처에 따라 성능 에서 차이를 보인다.


인텔은 2006년부터 틱-톡 전략을 통해 아키텍처를 개선해왔다. 이것은 ‘틱’을 통해 기존 아키텍처의 공정을 미세화하고 ‘톡’에서는 새로운 아키텍처를 개발 하는 방식이다. 2016년부터는 이 전략이 공정 미세화-아키텍처 교체-최적화로 단계를 진행하는 PAO로 번경됐다.


AMD는 1996년 K5 아키텍처로 CPU를 개발한 이래 K7, K8, K10 아키텍처로 인텔에 대항해왔다. 그러나 불도저 아키텍처가 저성능, 뒤처진 미세공정 등으로 인해 처참히 실패하면서 위기에 몰렸다.


이후 AMD는 2016년 발표한 젠 아키텍처로 개발된 라이젠 CPU가 대성공을 거두면서 다시금 인텔을 위협하기 시작했다. 연내에는 3세대 라이젠 프로세서가 출시될 예정이다.


제조공정


CPU나 메모리, VGA 등의 반도체를 보면 14nm(나노미터), 7nm 등의 표기를 볼 수 있다. 이것은 트랜지스터가 얼마나 미세한 공정에서 제작됐는지를 나타내는 것이다. 공정이 미세화되면 같은 크기의 반도체에 더 많은 트랜지스터를 구축할 수 있어 코어 수나 캐시 메모리 용량을 늘리는 등의 성능 향상을 기대할 수 있다.


그동안 제조공정에서는 인텔이 AMD를 앞질러 왔다. 인텔이 14nm 공정의 5세대 브로드웰을 출시하는 동안 AMD는 28nm 공정에 머무를 정도였다. 하지만 인텔이 14nm에서 공정을 개선하지 못하는 동안 AMD가 14nm, 12nm 공정에 이어 7nm 공정까지 도입할 움직임을 보이면서 AMD가 제조공정 분야에서 역전에 성공했다.


TDP


설계전력으로도 불리는 TDP는 CPU의 소비 전력이 아니다. CPU가 풀로드 상태에서 일반적으로 발생할 수 있는 발열량을 의미한다. TDP의 단위는 전력을 나타내는 W(와트)인데, 이는 CPU의 열을 식히기 위해 필요한 쿨러의 소비전력을 뜻한다.


다만 TDP와 소비전력에 상관관계가 없는 것은 아니다. CPU가 많은 전력을 소모하면 발열량도 증가하고 그만큼 고성능 쿨러가 필요하게 되기 때문이다. 그래서 사용하는 CPU의 TDP보다 높은 범위를 커버할 수 있는 쿨러를 사용해야 컴퓨터를 오래 사용할 수 있다.


정품/병행수입/벌크


CPU는 크게 3가지 방식으로 판매된다. 먼저 ‘정품 CPU’는 국내 공인 대리점을 통해 판매되는 제품으로, 공인 대리점에서 3년간 무상 A/S가 지원된다. 정품 CPU로 조립한 컴퓨터는 해당 사실을 알려주는 스티커가 조립PC 본체에 부착되며, CPU 단품만 따로 구매했을 때는 나중에 PC에 붙일 수 있도록 박스 측면에 붙어 나온다.


최근에는 가격 때문에 병행수입이나 벌크 제품을 알아보는 이들도 많다. 병행수입은 제3자가 해외에서 별도로 수입해 팔거나 해외 쇼핑몰에서 직접 구매해 국제배송으로 받은 제품으로, A/S를 받을 때는 판매한 국가의 A/S 센터를 이용해야 한다.


한편, 벌크(트레이)는 완제품/OEM 제조사 납품용 CPU를 일반 소비자에게 파는 경우다. 정품 CPU와 비교해볼 때 성능과 기능에 큰 차이는 없다. 다만, 인텔 공인대리점을 통해 A/S를 받을 수는 없으니 구매 전 판매처에 보상 관련 규정을 문의하고 구매를 결정해야 한다.

 

 





CPU는 연산과 계산을 담당하는 중앙처리장치다. 말 그대로 컴퓨터의 정중앙에서 모든 데이터를 처리한다. 사람으로 따지면 연산하고 지시를 내리는 ‘뇌’에 해당하는 부품이다.


CPU를 고르다보면 듀얼코어, 헥사코어 등 ○○코어라는 단어가 자주 보이는데, ‘코어’는 CPU의 핵심 부품이라고 이해하면 된다. 듀얼코어는 코어가 2개, 쿼드코어는 4개, 헥사코어는 6개라는 것을 뜻한다. 코어는 당연히 많을수록 성능이 높아지는데, 여기서 중요한 것은 ‘다중코어=빠른속도’가 아니라는 것이다. 코어의 개수는 ‘한 번에 얼마나 많은 데이터를 처리할 수 있느냐’를 결정한다. 즉, CPU는 컴퓨터의 ‘멀티태스킹’ 능력과 직결된다. 음악을 들으면서 게임도 하고 인코딩도 하는 것과 같이 무거운 작업을 하고 싶다면 코어의 개수가 많아야 한다.


사무용 컴퓨터를 고른다면 듀얼 i3를, 3D 게임용 컴퓨터를 원한다면 쿼드 i5 정도가 적정하다. 이보다 더 높은 전문가용 성능이 필요하다면 헥사 i5 이상이 필요하다. 듀얼, 쿼드, 헥사는 이제 알겠는데 뒤에 붙는 i3나 i5는 또 뭐냐 하시는 분들, 걱정하시 마시라. 간단히 말해 아이폰 6, 7같은 신제품에 붙는 이름이다. i3 < i5 < i7 순으로 성능이 올라가는데 위에서도 설명했듯이 문서 작업을 주로 한다면 i3, 고성능의 게임이나 동영상 편집을 주로 한다면 i5, 그보다도 더 무거운 작업이 필요하다면 i7 이상을 고르면 된다.


인텔 프로세서 제품군

구분

코드명

모델명 예시

1세대

린필드

i3-1xxx

2세대

샌디브릿지

i3-2xxx

3세대

아이비브릿지

i3-3xxx

4세대

하스웰

i3-4xxx

5세대

브로드웰

i3-5xxx

6세대

스카이레이크

i3-6xxx

7세대

카비레이크

i3-7xxx

8세대

커피레이크

i3-8xxx

9세대

커피레이크 리프레시

i3-9xxx



 

 


 ▶인텔 CPU 제품군 상품명 해독(?)하는 방법 

인텔 홈페이지에 가보면 CPU 제품명 ‘자체’에는 코드네임이나 ‘8세대’라는 식의 세대 구분은 들어가지 않습니다. 그냥 ‘인텔® 코어™ i7-8700K 프로세서(Intel® Core™ i7-8700K Processor)’라고만 나와 있습니다. 왜냐하면 제품명자체에 이미 세대 구별이 들어가 있기 때문입니다. ‘8700’에서 8이 세대를 가리키는 숫자이며, 700은 인텔이 이 CPU에 부여한 제품번호 입니다. 


인텔 CPU 제품명 맨 마지막에 붙는 알파벳은 해당 CPU의 특성을 나타냅니다. 가장 많이 알려진 ‘K’는 ‘언락(Unlocked)’되어 있다는 뜻으로, 자유롭게 오버클러킹이 가능한 CPU입니다. K가 붙어있는 모델은 K가 붙어있지 않은 모델에 비해 CPU 기본 클럭이 조금 더 높습니다. 예로 들고 있는 8700K는 기본 클럭이 3.70Ghz, 8700은 3.2Ghz입니다.



cpu 성능순위

제조사 제품명 코어( C ) / 스레드(T) 기본클럭(GHz)  성능점수  가격대(원)
인텔 코어i9-7920X 12C / 24T 2.9     23,670 140만~
인텔 코어i9-7900X 10C / 20T 3.3     22,623 130만~
AMD 라이젠 스레드리퍼 1950X 16C / 32T 3.4     22,026 140만~
AMD 라이젠 스레드리퍼 1920X 12C / 24T 3.5     19,689 100만~
인텔 코어i7-8700K 6C / 12T 3.7     16,301 51만~
AMD 라이젠 스레드리퍼 1900X 8C / 16T 3.8     15,626 70만~
인텔 코어i7-8700 6C / 12T 3.2     15,490 48만~
AMD 라이젠7 1800X 8C / 16T 3.6     15,426 60만~
AMD 라이젠7 1700X 8C / 16T 3.4     14,615 46만~
AMD 라이젠7 1700 8C / 16T 3     13,764 36만~
AMD 라이젠5 1600X 6C / 12T 3.6     13,319 31만~
인텔 코어i5-8600K 6C / 6T 3.6     12,866 38만~
AMD 라이젠5 1600 6C / 12T 3.2     12,335 24만~
인텔 코어i7-7700K 4C / 8T 4.2     12,096 40만~
인텔 코어i5-8400 6C / 6T 2.8     11,701 31만~
인텔 코어i7-7700 4C / 8T 3.6     10,816 35만~
AMD 라이젠5 1500X 4C / 8T 3.5     10,446 21만~
인텔 코어i3-8350K 4C / 4T 4       9,649 23만~
인텔 코어i5-7600K 4C / 4T 3.8       9,186 28만~
인텔 코어i5-7600 4C / 4T 3.5       8,897 25만~
AMD 라이젠5 1400 4C / 8T 3.2       8,445 19만~
인텔 코어i3-8100 4C / 4T 3.6       8,253 15만~
인텔 코어i5-7500 4C / 4T 3.4       8,091 23만~
인텔 코어i5-7400 4C / 4T 3       7,408 22만~
AMD 라이젠3 1300X 4C / 4T 3.5       7,357 16만~
AMD 라이젠3 1200 4C / 4T 3.1       7,185 13만~


 

 



 




 




 

'pc관련' 카테고리의 다른 글

PC메모리  (0) 2019.03.16
저장장치(SSD,HDD)  (0) 2019.03.14
파워서플라이에 종류  (0) 2019.03.11
CPU쿨러,쿨링팬  (0) 2019.03.07
그래픽 카드에 종류들~~  (0) 2019.03.07
Posted by 둥이파파^^
pc관련2019. 3. 7. 22:18


모니터에 영상을 출력해주는 부품, 그래픽카드에 관해 살펴보고자 한다. 배틀그라운드, 오버워치 등 고사양 게임을 즐길 수 있게 해주는 그래픽카드와 관련된 용어를 살펴보자.


GPU


Graphics Processing Unit의 약자로, CPU가 처리하기 버거워하는 3D 그래픽 작업을 처리하는 칩셋이다. 그래픽카드의 GPU는 내장그래픽보다 성능이 훨씬 좋기 때문에 고사양 게임, 그래픽 작업에는 그래픽카드가 필수적이다. 고성능 GPU일수록 코어 프로세서 수가 많고 기본 클럭·부스트 클럭(메인 칩셋의 동작속도)이 높다. 그래픽카드 GPU 브랜드로는 엔비디아 지포스와 AMD 라데온이 있다.


지포스(GeForce)


엔비디아의 주력 상품은 현재 개인용 GPU, 지포스다. 이 GPU를 탑재한 그래픽카드는 ‘GEFORCE GTX/GT 1060/1070’ 식으로 표기한다. 여기서 GTX는 고사양 그래픽에 적합함을, GT는 저사양임을 나타낸다. 처음 두 자리의 ‘10’은 출시 시기(세대)를 뜻한다. 뒤의 두 자리는 성능을 뜻한다. 뒷자리가 높을수록 성능이 좋다. 현재 지포스의 최신 아키텍처는 ‘파스칼’이다.


라데온(RADEON)


AMD가 ATI를 인수·합병한 후 생산하는 GPU 브랜드다. ‘2세대 폴라리스’ 아키텍처를 사용한 RX 시리즈 GPU가 탑재된 그래픽카드는 ‘라데온 RX580/570’ 식으로 표기한다. 여기서 첫 번째 숫자 ‘5’는 출시 시기(세대)를, 두 번째 숫자 ‘8, 7’은 등급을, 세 번째 숫자는 개선사항이 있는지를 나타낸다. 첫 제품인 경우엔 0, 개선품인 경우엔 5로 표기한다. 한편, ‘베가’ 아키텍처를 사용한 RX VEGA 시리즈는 VEGA 64와 VEGA 56으로 나뉜다.


스트림 프로세서/쿠다 코어


영상, 3D 그래픽을 처리하는 프로세서로, 그래픽카드의 주요 연산이 이뤄지는 부분이다. 엔비디아는 이를 개량해 쿠다(CUDA) 코어라 부르며, AMD는 그대로 스트림 프로세서라 한다. 이 프로세서의 숫자가 많을수록 3D 그래픽 처리속도가 빠르고 동영상 인코딩도 빨리 이뤄진다. 설계와 데이터 처리 방식 등으로 인해 AMD가 엔비디아보다 프로세서가 더 많다.


VRAM


그래픽카드에 탑재된 비디오 메모리를 뜻한다. 이 메모리는 GPU에서 처리한 데이터를 모니터로 내보내기 전에 잠시 저장하는 역할을 한다. 그래픽카드의 용량이 클수록, 속도가 빠를수록 데이터를 전달하는 속도가 빨라져서 전체적인 성능이 상승한다. 고급형 그래픽카드에는 GDDR5를, 보급형에는 GDDR3, SDDR3을 사용한다. 또한, 메모리와 GPU 사이에 연결되는 폭인 메모리 버스의 경우 고급형은 256bit 이상을 사용하나 보급형에는 32bit, 64bit가 많다.


다중 연결 기술


다수의 그래픽카드를 연결해 그래픽 성능을 크게 향상시켜주는 기술이다. 엔비디아는 SLI, AMD는 크로스파이어로 부른다. 2개의 그래픽카드를 연결하면 최대 2배, 3개를 연결하면 최대 2.8배의 성능 향상 효과를 볼 수 있다. 이를 실현하기 위해서는 메인보드에 PCIe x16 포트가 2개 이상 필요하다. 전력 소모가 늘어난다는 점도 감안해야 한다.


출력 포트


모니터와 연결되는 다양한 종류의 포트가 배치된 영역이다. 크게 DP(Display Port) 포트, HDMI 포트, DVI 포트 등으로 나뉜다. 각 포트별 최대 지원 해상도 및 주사율은 다음과 같다.


DP: 7680x4320 30Hz(1.4)


HDMI: 3840x2160 60Hz(2.0)/3840x2160 30Hz(1.4)


DVI: 2560x1600 60Hz(DVI-D 듀얼링크)


쿨링


GPU의 열을 식히는 것을 말한다. GPU를 제때 냉각시키지 못하면 코어가 타거나 오작동할 수 있으므로 쿨링이 매우 중요하다. 성능이 낮은 저가형 그래픽카드는 방열판만으로 쿨링을 하지만 중급형 이상인 경우 히트파이프와 알루미늄 핀으로 구성된 방열판에 쿨러가 부착돼 빠르게 열을 식힌다. 개중에는 기본적으로 수냉 쿨링 시스템을 탑재한 경우도 있다.


전원부


그래픽카드에 전원을 공급해주는 부분이다. 메인보드처럼, 그래픽카드 또한 초크, 모스펫, 캐패시터 등의 부품으로 이뤄져 있으며, 이 전원부를 구성하는 하위 그룹의 단위를 페이즈라 한다. 전원부의 품질이 좋을수록 전원을 안정적으로 공급하고 발열도 적어 수명이 길다. 따라서 페이즈의 수나 사용한 전원부 부품의 품질도 확인해보는 것이 좋다.


권장 파워


그래픽카드 제조사가 권장하는 정격 파워 용량이다. 그래픽카드의 성능이 좋을수록 소모하는 전력 또한 올라간다. 그래픽카드는 매우 많은 전력을 소모하기 때문에 제조사가 권장하는 정격파워 이상으로 파워를 넉넉히 맞추는 것이 좋다. 따라서 그래픽카드를 구매하기에 앞서 자신이 쓰는 파워서플라이의 정격 출력을 확인해보자.

 

그래픽 카드는 모니터로 화면을 출력하는 작업을 담당하는 부품이다. 내장 그래픽을 지원하는 CPU를 고른다면 별도의 그래픽 카드를 구매하지 않아도 되지만 고화질의 게임을 하거나 CPU에 내장 그래픽이 없을 땐 반드시 구매해야하니 CPU에 그래픽 카드가 포함돼있는지를 먼저 확인하자.


이 부품은 말 그대로 그래픽을 처리하는, ‘눈’과 같은 역할을 한다. 영상을 출력해주고 프로그램에서 읽어 들이는 그래픽을 모니터로 뿌려주는 기능이다. 아무리 해상도가 높은 모니터를 구비하더라도 그래픽 카드의 성능이 뒤처지면 선명한 화면을 볼 수 없으니 주의하자.(그 반대의 경우도 마찬가지니, 모니터와 그래픽 카드의 해상도를 맞추는 것이 효율적이겠다.)


그래픽 카드는 일반 사무용이나 인터넷 서핑용 컴퓨터에서는 필요 없는 부품이기도 하다. 문서작업이나 인터넷 서핑에는 고해상의 그래픽이 필요하지 않기 때문이다. 그렇다면 그래픽 카드의 종류에는 무엇이 있을까. 그래픽 카드를 고르다보면 공통적으로 이름에 GTX○○○이 붙는 것을 발견할 수 있다. 여기서 ○○○은 출시일이라고 이해하면 간단하다. 숫자가 커질수록 최근에 출시된 것이니 당연히 성능이 더 좋고 가격도 비싸다. 문서용 그래픽 카드는 GTX650~1030, 3D 게임‧동영상 편집용은 GTX1050이상이 적당하다

 

 

 

 


네이버 지식인이나 각종 PC 관련 사이트에 가보면 이런 식의 질문을 자주 볼 수 있다. 특히 엔비디아(nVIDIA)의 지포스(GeForce) 시리즈에 대한 문의가 많다. 사실, 헛갈릴 수밖에 없다. 그래픽카드 신제품이 거의 매달 하나씩 나오고 있고, 제품군도 너무 다양하기 때문이다.


게다가 일반 사용자 입장로서는 모델명에 있는 숫자나 그 뒤에 붙은 알파벳이 무슨 의미인지 알 턱이 없다. 단지 '그냥 숫자가 높으면 좋으려니' 생각하는 경우가 많다. 그래서 몇몇 브랜드 PC 제조사들은 이러한 점을 교묘하게 이용해 '최신 지포스 9000시리즈 그래픽 칩셋'하는 식으로 사용자를 유혹한다.


하지만 만약 지포스 8600GT의 그래픽 카드를 쓰던 사용자가 지포스 9300GS로 바꾼다면 큰 손해다. 왜냐하면 지포스 9300GS가 지포스 8600GT에 비해 성능이 훨씬 떨어지기 때문이다.


이참에 그래픽카드, 그중에서도 엔비디아 지포스 시리즈의 제품명 읽는 법을 알아보자. 가끔은 예외가 있기도 하지만 지금부터 알려주는 방법으로, 80~90%의 지포스 제품들의 성능을 짐작할 수 있다. 


천 단위 수는 지포스 시리즈의 '세대'를 의미


지포스 시리즈가 네 자리 수의 제품명을 사용한 것은 2002년 초의 지포스 4시리즈부터이다. 하지만 지포스 4시리즈 중에서도 하위제품은 네 자리 숫자가 아닌 'MX' 같은 기호를 사용했다. 실제 네 자리 수 제품명으로 출시된 건, 이후의 '지포스 FX 5000' 시리즈부터라고 볼 수 있다. 


다만, 현재 시점에서의 최신 제품인 지포스 200시리즈 이후의 제품은 이름이 좀 어색하다고 느낄 것이다. 여기에는 제조사인 엔비디아의 고민이 담겨 있다. 9000시리즈 이후로 넘어가려면 다섯 자리 수(1만 단위)까지 지어야 하는데, 이렇게 되면 소비자들이 발음하기도 어렵고, 뭔가 불안정한 느낌을 준다(지포스 10800? ...확실히 좀 이상하긴 하다). 그래서 엔비디아는 앞으로 200, 300... 하는 식의 백 단위 제품명으로 세대를 나눌 예정이라고 한다.  한번 정리해보자. 


지포스 FX5000 시리즈 - 2002년


지포스 6000시리즈 - 2004년


지포스 7000시리즈 - 2005년


지포스 8000시리즈 - 2007년


지포스 9000시리즈 - 2008년 초반


지포스 200시리즈 - 2008년 후반


이 기준으로만 보자면, 확실히 지포스 8800에 비해 지포스 9400은 신형 제품이긴 하다. 그렇다면 그냥 숫자가 높은 걸로 사면되지 않느냐고? 천만의 말씀이다. 이 말은 2009년식 마티즈가 2008년식 에쿠스보다 좋다는 정도의 넌센스다. 세대보다 더 중요한 것이 ‘등급’이다. 이에 대해서 알아보도록 하자. 


백 단위 수는 지포스 시리즈의 '등급'을 의미


지포스 시리즈의 제품명에서 가장 주목해야 할 것은 천 단위 수가 아닌 백 단위 수이다. 백 단위 수가 이 제품의 '등급'을 보여주기 때문이다. 예를 들어, 지포스 시리즈 중에서 ~800은 비싼 고급형이며, ~400은 값싼 보급형에 해당한다. 9400은 8800에 비하면 성능 면에서 비교의 대상이 아니라는 의미다. 이것도 한 번 정리해보자.


지포스 ~100, ~200 시리즈 - 저가형. 메인보드 내장 그래픽으로 주로 사용


지포스 ~300, ~400 시리즈 - 보급형. 이른바 '로우 엔드(low-end)'


지포스 ~500, ~600 시리즈 - 중급형. 이른바 '메인스트림(mainstream)'


지포스 ~800, ~900 시리즈  고급형. 이른바 '하이 엔드(high-end)'


백 단위의 숫자가 높을수록 등급이 높으므로 성능이 좋다. 그러므로 당연히 지포스 9400보다는 8800이 성능이 좋고, 7600보다는 6800이 더 좋다. 다만, 세대가 올라갈수록 제품군 전체의 성능이 전반적으로 향상된다(10~20% 정도). 그러니까 지포스 9500GT는 지포스 8600GT 시리즈와 유사한 성능을 가지게 되는 것이다.


하지만, 한 세대 정도의 차이라면 신형 중급형이 구형 고급형의 성능을 능가할 정도는 아니다. 이렇게 되려면(신형 중급형이 구형 고급형을 능가하려면) 3세대 정도는 차이가 있어야 한다. 다시 말해서, 지포스 9500시리즈는 지포스 6800시리즈의 성능을 능가하지만 7900시리즈에는 미치지 못한다는 의미다.


이러한 것만 잘 알아도 최소한 사기(?)는 당하지 않을 것이고, 나름 ‘파워유저’ 소리는 들을 것이다. 다만, 최신 제품인 지포스 200시리즈의 경우, 백 단위가 세대, 십 단위가 등급을 의미한다는 것을 잊지 말자.


숫자 뒤에 붙는 알파벳은 '성능지표'를 의미


지포스 시리즈 숫자 뒤에 붙은 'GS', 'GT', 'GTS', GTX' 같은 명칭이 있다. 이것은 같은 세대, 같은 등급끼리의 '성능지표'를 의미한다. 예를 들면, 같은 지포스 7800이라도 7800GS보다 7800GT가 성능이 높고, 7800GT보다 7800GTX가 성능이 높다. 


하지만 성능지표는 어디까지나 같은 등급 안의 미세한 성능차이이기 때문에 성능지표가 높아도 상위 등급 제품의 성능을 능가하진 못한다. 즉, 8600GTS 제품이라도 8800GS보단 성능이 떨어진다는 것이다. 이것 역시 정리해보자.


SE, LE - 하급제품


GS, 표기 없음 - 중급제품


GT, GTS - 상급제품


GTX, Ultra - 최상급 제품


그런데 가끔은 드물게 'GTO'나 'GSO', 같은 성능지표의 제품이 나올 때도 있고, 신형 8800GT가 구형 8800GTS를 능가하는 등, 출하 시기에 따라 이것이 뒤집힐 때도 있기 때문에 세심한 주의가 필요하다. 따라서 이러한 성능지표의 신뢰도는 70% 정도라고 할 수 있다.  


골치가 아프다면 GT나 GTS 같은 성능지표는 무시하고 ~800, ~600과 같은 등급만 신경 쓰자. 등급 차이에 비하면 성능지표에 따른 성능 차이는 크지 않은 편이다.


다만, 최신형 제품인 지포스 200시리즈가 문제인데, 이 제품들은 '지포스 GTX280'과 같이 성능지표가 제품명 앞에 들어간다. 뭐, 하지만 순서가 바뀌었을 뿐이지 읽는 법은 거의 비슷하기 때문에 큰 혼란은 없을 것 같다. 아무튼 이 정도면 어디 가서도 어떤 지포스 그래픽카드가 좋은 것인지는 쉽게 눈치챌 수 있을 것이다. 


아는 것이 힘이다


이러한 지식은 단일 그래픽카드보다는 오히려 브랜드 PC를 살 때 더 유용하다. 왜냐하면 브랜드 PC 제조사의 제품은 대부분 성능이 낮은 메인보드 내장 그래픽이나 보급형 그래픽카드를 쓰는 경우가 많기 때문이다.


특히 단골로 쓰이는 것은 지포스 9300과 같이 '등급'은 낮지만 세대는 '높은' 그래픽 제품이다. ~800 시리즈와 같은 고급형 그래픽카드를 쓰는 일은 거의 없다는 소리다. 


단지 들어간 그래픽카드의 숫자가 크다고 해서 그 PC를 비싸게 주고 산다면 참으로 손해다. 더구나 3D 게임을 할 때는 그래픽카드의 성능이 매우 중요하므로 게임 매니아들은 이러한 지식을 잘 알아두어야 할 것이다. 한마디로 아는 것이 힘이다. 디지털 시대가 와도 이것만큼은 변함이 없다. 

 순위

그래픽 카드명 

점수 

1위

 Quador P6000

13648 

2위 

 GeForce GTX 1080 Ti

13457 

3위 

 NVIDIA TITAN X

13077

4위 

 NVIDIA TITAN Xp

13031

5위 

 GeForce GTX1080

12015

6위 

 Radeon Vega Forntier Edition

11950

7위 

 Radeon RX Vega 64

11879 

8위 

 Radeon RX Vega

11533

9위 

 Radeon RX Vega 56

11381

10위 

 GeForce GTX 980 Ti

11307

11위 

 GeForce GTX 1070

10968

12위 

 GeForce GTX 1080 with Max-Q Design

10834

13위 

 GeForce GTX TITAN X

10665

14위 

 Radeon Pro WX 9100

10330

15위 

 Quador P4000

10260

16위 

 Quador M6000 24GB

10240

17위 

 Quador P5000

10138

18위 

 GeForce GTX 980

9568

19위 

 Radeon R9 Fury

9499

20위 

 Radeon Pro Duo

9482

'pc관련' 카테고리의 다른 글

PC메모리  (0) 2019.03.16
저장장치(SSD,HDD)  (0) 2019.03.14
파워서플라이에 종류  (0) 2019.03.11
CPU쿨러,쿨링팬  (0) 2019.03.07
CPU종류  (0) 2019.03.07
Posted by 둥이파파^^