1. 웹

우리는 소위 “인터넷 중독”이 문제가 되는 세상에 살고 있습니다. 그 만큼 인터넷이 우리 생활과 점점 밀접하게 연관되고 있다는 것을 나타내는 것이 아닐까요? 자 그럼 이제 웹( Web )에 대해서 알아보도록 하겠습니다.

[그림 1] 웹이란 무엇인가?


 웹은 기본적으로 거미줄을 뜻하는 영어 단어입니다. 그렇다면 왜 거미줄을 뜻하는 단어가 인터넷을 통칭하는 단어로 쓰이게 되었을까요? 그것은 네트워크끼리 연결된 인터넷을 거시적으로 봤을 때 나타납니다. 인터넷은 수 많은 컴퓨터들과 네트워크들로 이루어져 있습니다. 복잡하게 얽힌 모습이 마치 거미줄 같다고 하여 웹이라는 명칭이 붙게 된 것입니다.

2. 웹과 HTML

 이러한 웹에서는 지금도 수 많은 데이터들이 오가고 있습니다. 여러분이 인터넷을 켜고 포털사이트에 접속을 하면 포털의 웹서버에서 여러분의 컴퓨터( 정확히 말하면 웹브라우저 )로 HTML이라는 파일이 전송되게 됩니다. 그렇다면 이제 HTML의 가장 원초적인 역할도 어느정도 설명이 됩니다. HTML은 Hyper Text Mark-up Language의 약자로 마지막 단어의 Language에서 알 수 있듯이 언어입니다. 즉 인터넷에서 서버와 클라이언트가 대화 할 때 사용되는 언어라고 할 수 있습니다. 
 

[그림 2] 웹브라우저와 서버의 대화



 

 다시한번 HTML을 이용한 웹 서버와 웹 브라우저의 대화 순서를 알아 보도록 하겠습니다.

[그림 3] 서버로의 접속


1) 먼저 여러분은 웹 브라우저를 통해서 어떤 사이트에 접속을 하게 됩니다. 이 사이트는 도메인이라는 인간이 알기 쉬운 문자열을 갖고 있습니다. ( 인간은 숫자보다는 문자열에 익숙하죠. 문자열에는 의미가 있기 때문입니다. ) 이 도메인은 ip주소라는 유일한( 이론상으론... )번호로 매핑이 됩니다. 웹 브라우저는 이 ip주소를 이용하여 웹 페이지가 필요하다는 요청을 합니다.


[그림 4] 요청한 서버의 응답


2) 이러한 요청을 받은 웹서버는 브라우저가 요청한 페이지 파일( html파일 )과 해당 파일에서 필요로하는 리소스들 ( 음악이나 동영상과 같은 미디어 파일이나 플래시 파일과 같은 기타 요소들 )을 웹 브라우저로 전송합니다.

[그림 5] 브라우저의 해석 및 화면 출력


3) 웹 페이지 파일과 리소스들을 받은 웹 브라우저는 HTML파일을 해석합니다. ( 파싱을 한다고 하나요?? ) HTML을 해석한 다음 표준에 의해 정의된 대로 화면에 출력을 해 줍니다. HTML파일 자체는 <HTML> </HTML>이나 <embed> </embed>와 같은 특정한 의미를 갖고 있는 태그들과 내용들로 이루어져 있습니다. 이런 의미들을 해석하고 우리에게 익숙한 웹페이지를 보여주는 작업을 브라우저가 하게 됩니다.

4) 해석을 마친 웹 브라우저는 해당 웹 페이지를 사용자에게 보여주게 됩니다. 이 때 보여지는 화면이 우리에게 익숙한 웹 페이지의 형태를 갖고 있습니다.

[그림 6] 여러 브랜드의 브라우저


 위에서 HTML을 웹 서버와 웹 브라우저가 대화에 사용하는 언어라고 정의했습니다. 다른 측면에서 HTML을 정의한다면, “웹 페이지를 구성하는 뼈대”라고 할 수 있습니다. 웹 서버와 브라우저의 대화 과정의 3번째 과정에서 HTML을 브라우저가 해석하는 단계가 있습니다. 이런 해석 방법은 w3c에 의해서 관리되고 있습니다. ( 표준이라고 하죠. 웹 브라우저라는 제품은 하나의 회사에서만 만드는 것이 아니라 여러 회사에서 각기 다른 제품을 만들기 때문에 표준이 필요하게 되었습니다. 만일 표준이 없다면 굉장히 혼란스러운 상황이 도래하게 되겠죠. )

[그림 7] W3C 의 홈페이지


 HTML에 대해서 어떠한 측면의 정의를 사용하던 웹을 공부하기 위해서 HTML을 공부하는 것이 많은 도움을 주는 것은 사실입니다. 


 

 컴퓨터를 바꾸시려는 분들이나 컴퓨터에 관심이 많으신 분들이라면 RAM이라는 단어를 들어 보셨을 겁니다. RAM은 ( Random Access Memory )의 줄인 말로 CPU가 직접 접근 할 수 있는 유일한 메모리입니다. ( 물론 캐싱 기법을 사용한다면 캐시 메모리도 추가가 되겠지만 말입니다. ) 컴퓨터 성능을 논 할 때 ( 주로 스펙이라는 말로 컴퓨터를 평가 할 때 ) CPU 클럭 속도와 더불어 가장 많이 사용되는 것이 메모리의 용량입니다.

[그림 1. 다나와 견적에서 볼 수 있는 메모리의 용량 ]



메모리 용량과 더불어 항상 따라다니는게 DDR이라는 용어입니다. 최근 DDR2에서 DDR3로 넘어가는 추세라고 하던데, 도대체 DDR이란 무엇을 말하는 것인지 궁금해 집니다.

 

[그림 2. SDR SDRAM ]



1. SDR SDRAM


 우선 DDR을 논하기 전에 SDR이라는 것을 논해야 합니다. SDRAM이라는 단어는 IT관련 뉴스나 메모리에 관심있으신 분들이라면 들어 보셨을 겁니다. 위키피디아에서 SDR SDRAM을 다음과 같이 정의하고 있습니다.

SDRAM, 에스디 램은 Synchronous Dynamic Random Access Memory 의 약자이다. SDRAM 은 DRAM 의 발전된 형태이며 보통 DRAM 과는 달리 제어 장치 입력을 클록펄스(Clock Pulse)와 동시에 일어나도록 하는 동기식 DRAM이다.DDR SDRAM의 보급으로 SDR SDRAM이라는 관례적인 명칭이 주어졌다. SDR은 Single Data Rate 의 약자이다. 이 의미는 기존의 SDRAM 이 각 클록펄스가 상승 또는 하강하는 시점에서 한번만 정보를 전송하는 것에서 나온 명칭이다


SDR SDRAM은 SDRAM의 가장 기본적인 표준으로 ( Single Data Rate SDRAM )의 약자입니다. Single이라는 단어에서 알 수 있듯이 한번에 하나의 커멘드( 명령어 )나 한 워드의 데이터만 주고 받을 수 있는 구조입니다. 전형적인 클록 주파수는 100 혹은 133MHz 입니다.

[그림 3] DDR SDRAM


2. DDR SDRAM

 하지만 산업이 발전하고 고객들의 요구 수준이 높아지면서 SDR SDRAM의 속도의 한계가 드러나게 됩니다. 그래서 나온 것이 DDR SDRAM 입니다. DDR은 Double Data Rate의 약자로 Double이라는 단어에서 느껴지듯이 SDR 에 비해서 두 배의 속도를 나타냅니다. DDR SDRAM 에 대해서 위키피디아는 다음과 같이 정의하고 있습니다.

Double Data Rate synchronous dynamic random access memory (or also known as DDR SDRAM) is a class of memory integrated circuits used in computers. It achieves nearly twice the bandwidth of the preceding single data rate (SDR) SDRAM by double pumping (transferring data on the rising and falling edges of the clock signal) without increasing the clock frequency. 

With data being transferred 64 bits at a time, DDR SDRAM gives a transfer rate of (memory bus clock rate) x 2 (for dual rate) × 64 (number of bits transferred) / 8 (number of bits/byte). Thus, with a bus frequency of 100 MHz, DDR SDRAM gives a maximum transfer rate of 1600 MB/s.

 
 직역을 하자면 “DDR SDRAM은 컴퓨터에서 사용되는 집적회로의 한 종류이다. 이것은 클록 주파수의 증가 없이 더블 펌핑 ( Rising Edge와 Falling Edge 두 부분에서 모두 데이터를 전송함 ) 을 이용하여 SDR SDRAM에 비하여 거의 2배의 대역폭을 구현한다.


 한번에 64 Bits의 데이터가 전송 된다고 할 때, DDR SDRAM의 전송률은 다음과 같이 계산된다. ( 메모리 버스 클록율 ) * 2 ( 더블 펌핑 ) * 64 ( 전송되는 비트의 수 ) / 8 ( 바이트당 비트의 수 ). 따라서 100 MHz의 버스 주파수를 가지고 있다고 할 때, DDR SDRAM은 최대 1600MB/s의 전송률을 나타낸다. “


SDR SDRAM이 한 클록당 하나의 명령어를 전송할 때( Rising Edge나 Falling Edge 둘 중 하나에서 전송이 일어난다고 함 ) DDR SDRAM은 Rising Edge와 Falling Edge 두 부분에서 전송을 하기 때문에 최대로 2배의 전송률이 나타나게 됩니다.


 
3. DDR2

 기술의 발전을 야기 시키는 것은 항상 더 나은 기술의 요구입니다. DDR이 SDR에 비해서 2배의 대역폭을 가져( 이론 상으로는… ) 속도가 빠르다곤 하지만 사용자의 평가 기준은 또 높아져서 더 개선된 ( 혹은 더 빠른? ) 메모리를 요구하기 시작했습니다. 그래서 등장한 것이 DDR을 개선한 DDR2 입니다.

[그림 4] DDR2 SDRAM



  DDR2에 대해서 위키피디아는 다음과 같은 정의를 하고 있습니다

DDR2 SDRAM is a double data rate synchronous dynamic random access memory interface. It supersedes the original DDR SDRAM specification and the two are not compatible. In addition to double pumping the data bus as in DDR SDRAM, (transferring data on the rising and falling edges of the bus clock signal), DDR2 employs an I/O buffer between the memory and the data bus so that the data bus can be run at twice the speed of the memory clock. The two factors combine to achieve a total of 4 data transfers per memory clock cycle.


With data being transferred 64 bits at a time, DDR2 SDRAM gives a transfer rate of (memory clock rate) × 2 (for bus clock multiplier) × 2 (for dual rate) × 64 (number of bits transferred) / 8 (number of bits/byte). Thus with a memory clock frequency of 100 MHz, DDR2 SDRAM gives a maximum transfer rate of 3200 MB/s.

Since the memory clock runs at half the external data bus clock rate, DDR2 memory operating at the same external data bus clock rate as DDR will provide the same bandwidth but with higher latency, resulting in inferior performance. Alternatively, DDR2 memory operating at twice the external data bus clock rate as DDR may provide twice the bandwidth with the same latency (in nanoseconds). The best-rated DDR2 memory modules are at least twice as fast as the best-rated DDR memory modules.


한글로 옮겨 보면


 “ DDR2 SDRAM은 double data rate synchronous dynamic random access memory 인터페이스이다. DDR2는 기존의 DDR SDRAM 스펙을 대신하며 이 둘은 호환되지 않는다. (즉, DDR2와 DDR 메모리는 함께 사용될 수 없다. )


 DR SDRAM에서 사용된 더블 펌핑 데이터 버스와 더불어 DDR2는 2배의 메모리 클록 속도를 사용하기 위하여 I/O( 입출력 )버퍼를 사용하였다. 따라서 DDR2는 SDR에 비하여 4배의 속도를 낸다. ( 더블 펌핑에서  * 2 , I/O 버퍼에서 * 2 )


데이터가 단위 시간당 64비트로 전송된다고 할 때, DDR2 SDRAM의 전송률은 다음과 같이 계산된다. “( 메모리 클록율 ) * 2 ( 버스 클록 멀티플라이어 ) * 2 ( 더블 펌핑 ) * 64 ( 단위 시간당 비트 전송 ) / 8 ( 바이트당 비트 수 ). 예를 들면 메모리 클록이 100MHz인 DDR2 SDRAM의 경우 최대 3200MB/s 의 속도를 낼 수 있다.


 이 처럼 새로운 기술을 사용하여 DDR2는 DDR보다 이론상으로 최대 2배의 속도 향상을 가져왔습니다. 표준에 의하면 DDR은 200MHz부터 400MHz까지의 동작을 보입니다. 반면 DDR2는 그 보다 2배 높은 400MHz부터 800MHz까지 동작하는 것으로 보고 있습니다. 

 또 한 하드웨어의 인터페이스라고 할 수 있는 핀의 갯수에서도 차이가 납니다. 초기 DDR모델은 184핀인데 비해서 DDR2는 240핀입니다.


[그림 5] DDR3 SDRAM


4. DDR3

 최근에 바뀌고 있는 트랜드가 바로 DDR2에서 DDR3로 넘어가는 것입니다. DDR3는 이론적으로 DDR2의 2배의 속도를 냅니다. DDR3에 대해서는 추후에 다시 포스팅을 하도록 하겠습니다.


5. DDR2 vs DDR3

 최근 두 개의 DDR 램을 선택해야 하는 경우가 많이 발생합니다. DDR2와 DDR3는 호환이 안 되기 때문에 둘 중 하나를 선택해야 하는데, DDR2는 이미 시장이 확보되어 있고 저렴한 메인 보드들이 나와 있기 때문에 가격이 낮습니다. 하지만 이제 생산을 잘 안하기 때문에 메모리의 가격은 꾸준히 상승하고 있죠. DDR3는 아직까지 호환되는 보드가 많지 않고, 가격이 DDR2에 비해서 비쌉니다.
 

[그림 7] DDR2와 DDR3의 전력 소모량 비교



소모 전력을 보면 좀 더 빠르게 동작하는 DDR3 1067의 경우 DDR2 800 보다 적은 전력으로 동작하는 것을 볼 수 있습니다.

[그림 8] DDR3와 DDR2의 모습 비교


 겉 모습을 보시면 핀의 배열이 있고 그 중간에 움푹 들어간 노치의 위치가 다른 것을 볼 수 있습니다.


DDR2건 DDR3건 얼마나 기존의 하드웨어와 잘 호환이 되는지가 중요합니다. 다나와에서 아이쇼핑하다가 문득 궁금해서 포스팅을 하게 되었습니다.


참고글 : 용산테크 뉴스


 





일상에서 우리는 정렬 문제를 굉장히 많이 접합니다. 마구 섞여 있는 카드를 번호 순서로 오름차순으로 정렬을 하고자 하는 문제를 해결 한다고 해봅시다. 가장 보편적인 방법은 가장 작은 숫자의 카드를 찾은 후 옆에 차례대로 배열을 하기 시작하는 겁니다. A 카드를 찾아서 옆에 놓고 2 카드를 찾아서 그 옆에 놓고 그 다음엔 3.. 그다음엔 4.. 이런식으로 하나씩 작은 숫자를 찾아서 정렬된 배열을 만들어 나가는 방법입니다이런 방법을 선택 정렬이라고 합니다


1.
선택 정렬 알고리즘 
 
선택 정렬 알고리즘을 서술하면 다음과 같습니다. 우선 int 형의 배열을 정렬하는 것으로 하고 정렬할 대상의 갯수는 n개로 하겠습니다.

* Selection Sort Algorithm
1. i = 0
2. i가 n - 2가 되면 종료
3. 배열의 i항부터 n - 1항까지 조사를 하여 최소값을 저장
4. 저장한 최솟값과 i항과 교환
5. i 를 1 증가시키고 2단계로 돌아간다.


거의 본능적인 알고리즘과 같다고 보시면 됩니다. 그럼 직접 정렬되는 과정을 보면서 설명을 해드리겠습니다. 먼저 정렬될 대상이 되는 문자열은 HACKINDATASTRUCTSTRUCTSTUDY 라는 문자열을 정렬한다고 하겠습니다.

 그러면 선택정렬 알고리즘은 다음과 같은 순서로 정렬을 하기 시작 할 것입니다.


 21글자를 정렬하는데 21한 단계가 필요함을 볼 수 있습니다.

* 선택정렬의 분석
 알고리즘의 분석은 두가지를 주로 분석합니다. 비교 횟수와 교환 횟수가 그것입니다. 선택정렬은 대다수의 시간이 비교 시간에 소요됩니다. i 번째 단계 ( 0 번째 단계에서 n - 1단계 까지 ) 에서는 비교 횟수가 n - 1 번입니다. 풀어서 말하면 n개의 요소를 정렬하는데에 첫번째 단계에는 n - 1 번, 그 다음에는 n - 2 번 ... 뒤에서 2번째에는 2번, 마지막은 1번 비교를 합니다. 1,2,3 ... n-1 을 더하는 공식은 n(n-1)/2이므로 선택정렬은 n(n-1)/2 번의 비교횟수를 갖게 됩니다.
 다음으로 교환 횟수인데, 최악의 경우 n 번의 교환을 하게 됩니다 .( 각 단계에서 한번의 교환만 일어나기 때문이죠. ) 최선의 경우는 0번의 교환을 하게 됩니다.

 이 처럼 선택정렬의 가장 큰 장점은 최악의 경우와 최선의 경우의 차이가 그리 크지 않다는 점입니다. 시간 복잡도는 O(N * N)을 갖게 됩니다. 또 한 교환 횟수가 적기 때문에 레코드의 크기가 큰 데이터를 정렬 할 때 힘을 발휘 할 수 있습니다.

* 선택정렬의 개선
 알고리즘 자체가 굉장히 단순하기 때문에, 개선의 여지는 없지만 For 문으로 이루어진 반복문의 내부를 기계어나 어셈블리어로 작성을 한다면 조금더 빨라 질 수 있습니다.

Vi 에디터를 사용하면서 불편한 점이 굉장히 많았습니다. 그래서 한결 사용하기 편한 VIM 에디터를 우분투에 설치하는 방법을 배워 보도록 하겠습니다.

* VIM 설치

$ sudo apt-get install vim

위 명령어를 입력해 줍니다. 참 쉽죠~~


 필요한 패키지를 인터넷이 연결되어 있다면 다운로드 받아서 설치를 하기 시작합니다. 설치가 완료되었으면 vim의 설정을 변경하여 보겠습니다.

* VIM 설정 변경
vim 설정 파일은 /etc/vim/vimrc과 ~/vimrc 에 있습니다. /etc/vim/vimrc 는 글로벌 설정으로 해당 서버를 사용하는 모든 유저에게 설정이 되는 파일이고, ~/vimrc는 해당 디렉토리를 홈 디렉토리로 하는 로컬 유저의 설정이 저장되는 파일입니다.
 다음 명령어를 입력하여 몇가지 설정을 바꿔주도록 하겠습니다. ( 이것은 옵션으로 디폴트 값으로 사용하셔도 됩니다. )

$ sudo vi /etc/vim/vimrc

 처음 설치가 되었을때에는 옵션이 몇가지 업습니다. 보다 좋은 기능들을 활용하기 위해서 다음과 같은 옵션들 중에 필요한 것만 골라서 적어 넣어주겠습니다. ( vi 사용법을 모르시는 분은 인터넷을 검색하여 보시기 바랍니다. i 를 누르면 입력 모드로 전환이 됩니다. )

set tabstop=4 // "Tab"을 눌렀을 때 4칸으로 이동합니다.
set cindent    // "C언어 스타일"의 들여쓰기를 사용합니다.
set autoindent  // 자동으로 들여쓰기를 합니다.
set smartindent  // 좀 더 똑똑한 들여쓰기 옵션을 사용합니다.
set background=dark  // 화면 배경을 Dark로 어둡게 합니다. 이 때 light로 하면 밝아집니다.
set number      // 행 번호를 보여줍니다.
set visualbell   // 경고음 대신 화면을 번쩍입니다.
set ruler         // 화면 우측하단에 (행, 열) 번호를 보여줍니다.
set nowrapscan // 단어 검색시 문서 처음으로 돌아가지 않는다.
set nobackup   // 백업을 생성하지 않습니다.
hlsearch          // 검색어 강조 기능을 사용합니다.
syntax on        // 구문 강조 기능을 사용합니다.
filetype on        // 파일 종류에 따른 강조기능을 사용합니다.

저는 다음과 같은 옵션들을 사용하였습니다.



 그럼 가장 유명한 프로그램인 "Hello, World"  프로그램을 예제로 작성하여 보겠습니다.


 굉장히 알록 달록하게 보입니다. 기존의 vi 에디터는 메모장 처럼 그냥 텍스트만 보여줬지만 vim을 설치하고 몇가지 옵션을 주니 그리 떨어지지 않는 개발 환경이 되었습니다.



텔넷이란 인터넷 상에서 원격 호스트 컴퓨터에 접속 할 수 있는 프로토콜로 쉽게 말해서 다른 컴퓨터에서 여러분의 우분투 서버에 원격으로 접속 할 수 있도록 해주는 프로그램(?)을 말합니다. 텔넷을 사용하면 서버에 연결된 키보드가 아닌 터미널 환경에서 키보드로 명령을 입력하고 시스템을 관리 할 수 있게 됩니다.

 먼저 다음의 명령어를 입력합니다.
$ sudo apt-get install xinetd


 먼저 여러분의 컴퓨터에 xinetd라는 데몬을 설치 할 것입니다. 이 데몬은 eXtended InterNET Daemon의 약자로 인터넷 기반의 연결을 관리해주는 역할을 합니다. 자세한 내용은 위키피디아참조하시기 바랍니다.

 xinetd가 설치 되었으면 다음 명령어를 입력합니다.
$ sudo apt-get install telnetd
 


이제 xinetd에 관한 설정을 바꿔주겠습니다. 다음 명령어를 입력합니다.
$ vi /etc/xinetd.conf


 vi 에디터를 이용해서 xinetd의 설정파일을 열었습니다. 이제 설정파일에 다음의 내용을 추가해 주도록 하겠습니다.

service telnet

{

     disable = no

     flags = REUSE

     socket_type = stream

     wait = no

     user = root

     server = /usr/sbin/in.telnetd

     log_on_failure += USERID

}





자 이제 xinetd의 설정이 바뀌었습니다. 설정을 바꿨으니 적용이 되도록 xinetd를 재시작 해 주도록 하겠습니다. 다음의 명령어를 입력합니다.

$ sudo /etc/init.d/xinetd restart


이제 텔넷이 설치 되었습니다. [시작] -> [실행] 에서 다음과 같은 형식으로 입력하면 텔넷을 이용해서 접속을 할 수 있습니다.

Telnet [서버의 아이피 주소 혹은 도메인 주소]



그럼 로그인 절차를 나타내는 터미널 화면을 볼 수 있습니다.



정상적으로 로그인이 되시면 터미널에서 여러분의 서버를 이용할 수 있게 됩니다.







끄.. 끝내 주네요..

저도 액체 질소 갖고 한번 해보고 싶네요 ㅋㅋ

괜히 따라하시다간 컴님이 저세상으로 가십니다.



 웹프로그래밍을 공부하시는 분들, 특히 PHP를 공부하시는 분들이라면 APM이라는 패키지를 모를리가없다고 생각합니다. ( 모르신다면 지금이라도 한번 찾아 보시기 바랍니다. )


 APM은 웹서버를 구성하는 주요 도구인 Apache서버, PHP, MySQL의 이니셜을 말합니다. 여기에 Linux까지 넣어서 LAMP라고도 합니다.

 우분투 리눅스 환경에서 APM 패키지를 설치하고 PHP를 공부해 보도록 합시다.

$ sudo apt-get install apache2

위 명령을 실행합니다.


 이제 아파치서버가 설치되었습니다. 아파치서버는 전세계 웝서버 점유율이 2007년 기준으로 50%가 넘는 인기있는 서버 프로그램입니다. 자세한 것은 위키백과를 참고하시기 바랍니다.

 다음 명령어를 입력합니다. 아파치와 mysql을 연동하는 라이브러리를 설치하는 부분입니다.

$sudo apt-get install libapache2-mod-auth-mysql


 두번째 단계도 마쳤습니다. 다음으로 DBMS인 My-sql을 설치하도록 하겠습니다. 다음의 명령어를 실행시킵니다.

$sudo apt-get install mysql-server mysql-client


 명령어가 실행이 되면 Mysql 설치에 필요한 자료들을 내려 받고 Mysql 설치가 시작됩니다. 패스워드를 입력합니다. DBMS를 관리하기 위해 앞으로 필요하기 때문에 잘 기억 할 수 있는 암호로 하거나 암호를 잘 기억해 두시기바랍니다.


 암호를 한 번더 반복하여 입력합니다.


 Mysql의 root 비밀번호를 설정하고 나면 설치가 계속 진행이 됩니다. 잠시후 설치가 끝나고 자동으로 Mysql database server 가 재시작됩니다. 설치가 끝났으면 여러분의 리눅스에는 Mysql이라는 데이터베이스 프로그램이 깔리게 된 것입니다.

이제 PHP5를 설치합니다. 다음 명령어를 입력합니다.

$sudo apt-get install php5-common php5 libapache2-mod-php5


php5이 설치되었습니다. 이제 웹프로그래밍을 할 수 있는 환경이 설치되었습니다.
이제 php5와 Mysql을 연동하기 위한 작업을 시작하겠습니다. 다음 명령어를 입력합니다.
$sudo apt-get install php5-mysql


이제 php 프로그래밍을 하면서 Mysql과 연동해서 DB 프로그램을 할 수 있게 되었습니다. 이제 Apache 서버를 재시작합니다.
 다음 명령어를 입력합니다.

$sudo /etc/init.d/apache2 restart



이제 Mysql 서버가 정상적으로 동작하는지 알아보도록 하겠습니다. 다음 명령어를 입력합니다.

$sudo netstat -tap | grep mysql


명령어 입력 후 다음과 같은 메시지가 뜬다면 정상적으로 작동하고 있는 것입니다.

tcp 0 0 localhost.localdomain:mysql *:* LISTEN -

그러면 정상적으로 웹서버가 동작하는지 테스트 해보겠습니다. 다음을 입력해서 텍스트 파일을 만들어 보겠습니다.

$ sudo vi /var/www/phpinfo.php

 vi 에디터를 이용해서 다음과 같은 파일을 만듭니다.
<?php
    print_r(phpinfo());
?>

 간단한 vi에디터 사용법을 알려드리자면 시작하면 i키를 눌러서 삽입 모드를 작동시키고 위의 소스를 타이핑합니다. 타이핑이 완료되면 [ESC]키를 누르고 ":"( 콜론 [Alt] + ";" ) 과 wq를 입력해서 저장하고 종료를 합니다. ( ":wq" )

 인터넷 창을 열고( 우분투 데스크 톱에는 기본적으로 파이어폭스가 설치되어 있습니다. ) http://locahost 를 입력합니다. 아파치서버가 정상적으로 설치되었다면 다음과 같은 화면이 출력 될 것입니다.


  다음으로 php가 정상적으로 설치되어 있는지 확인해 보도록 하겠습니다. http://localhost/phpinfo.php 를 입력해 봅니다. php5가 정상적으로 설치되었다면 다음과 같이 php5에 대한 정보가 출력이 될 것입니다.

 이제 /var/www/ 폴더가 여러분이 개발할 홈페이지의 기본 폴더가 될 것입니다. HTML파일이나 php파일을 만들어서 이 경로에 저장을 하면 다른 컴퓨터에서 웹브라우저를 이용해서 볼 수 있을 것입니다.

 이제 php를 이용해서 웹프로그램을 개발해 보도록 합시다!! 이상 우분투 환경에서 APM을 설치해 보았습니다.





 해킹에는 두 가지가 있습니다. Local 해킹과 Remote 해킹입니다.
 Local 해킹은 해킹하고자 하는 서버에 루트( root ) 권한이 아닌 일반 계정을 가지고 있을 때, root 권한을 얻으려고 시도 하는 것을 말합니다.
 반면 Remot 해킹은 자신이 해킹하고자 하는 서버에 아이디가 없을 때, 아이디를 얻고자 시도하는 것을 말합니다. 

 이 중에서 가장 중요하다고 할 수 있는 것이 Local 해킹입니다. root 권한을 얻은 순간 여러분은 해당 시스템을 손에 넣은 것이 됩니다. 즉, 해킹이란 정상적인 방법이 아닌 방법으로 root 권한을 얻는 것을 말합니다. 


SetUID 라는 개념이 여기에서 등장합니다. 지난번 트레이닝의 마지막에 물음표를 남겼었습니다. 분명 비밀번호를 관리하는 shadow라는 파일은 root 계정에게만 읽기 권한이 있었습니다. 하지만 만일 내가 내 비밀번호를 바꾸려고 시도 할 때 어떤 일이 발생 할 까요? 권한이 root에게만 있기 때문에 root가 아닌 나는 나의 비밀번호를 바꿀 수 없게 됩니다. 하지만 실제 시스템에서는 내가 내 비밀번호를 바꿀 수가 있습니다. 어떻게 된 일까요?

 여기에서 SetUID의 필요성이 나타납니다. SetUID는 일시적으로 자신의 ID를 바꾸는 것을 의미합니다. shadow에 접근하기 위해서 일시적으로 UID를 root로 바꾸는 것을 허용해야 합니다. 이를 이용해서 해킹을 시도 할 수 있습니다.

 이런 SetUID가 없다면 root는 매우 바빠져야 할 것입니다. 패스워드를 바꾸고자 하는 유저가 많을 때, SetUID를 사용하지 않다면 root는 매번 해당 유저의 패스워드를 바꿔줘야 하는 일이 발생합니다. 이러한 SetUID는 shadow 파일에만 걸리는 것이 아닙니다. 리눅스의 여러 파일들이 이런 SetUID를 가지고 있습니다. 일반 유저가 이러한 파일을 다루면서 잠시 SetUID를 빌리고 어떠한 버그를 이용해서 SetUID를 유지, 즉 root권한을 획득하게 되면 시스템은 여러분의 것이 됩니다. 
 이런 버그에는 "버퍼오버플로우", "포맷 스트링 어택", "링크 버그" 등이 있다고 합니다. 


 그럼 수 많은 리눅스 파일중에 SetUID가 걸려있는 파일은 어떻게 찾을까요?

$ ls -al /usr/bin/passwd

위 명령어를 입력해보면, /usr/bin/passwd 에 대한 권한 정보들이 나옵니다. 그 중에 익숙하지 않은 것이 있습니다. 바로 "S"라는 글자입니다. 바로 이 녀석이 SetUID를 의미하는 문자입니다. s가 유저의 실행부분에 걸려있기 때문에 다음과 같이 해석 할 수 있습니다.  "모든 유저는 이 파일을 실행 할 때, SetUID를 이용해서 root의 권한을 얻게 된다. "


$ find / -perm -4000

위 명령어의 의미는 "/" 폴더의 하위 폴더에서 -perm 퍼미션에 SetUID가 있는 파일을 찾아라" 라는 뜻입니다. 

-perm 퍼미션과 일치하는 파일을 찾는다.
-name 이름과 일치하는 파일을 찾는다.
-user 유저와 일치하는 파일을 찾는다.
-group 그룹과 일치하는 파일을 찾는다.

 
이런 것들을 이용해서 여러분은 root권한을 얻으려고 노력할 것입니다. 이제 과정은 없습니다. 여러분이 배우는 하나하나가 여러분의 해킹 기술에 피와 살이 될 것입니다. 해커의 세계에 오신것을 환영합니다. 앞으로 레벨을 높여서 엘리트 해커가 되어 봅시다. !!




 이번 시간에는 리눅스의 권한에 대해서 배워 보았습니다. 리눅스는 여러 유저들이 동시에 서버에 접속해서 자신이 할 일을 하는 운영체제입니다. 한 유저의 파일과 정보를 다른 유저로부터 보호하기 위하여 권한이라는 개념이 등장했습니다. 리눅스를 사용하면서 Permission Denied ( 접근 거부 )라는 메시지를 많이 볼 수 있습니다. 이는 자신에게 권한이 없는 파일에 접근을 했을 때 볼 수 있는 메시지 입니다.
 리눅스에는 4가지 사용자 분류가 있습니다. 1) 유저 : 로그인한 사용자 각각을 의미합니다. 2) 그룹 : 한명 이상의 유저는 비슷한 유저들끼리 그룹을 형성 할 수 있습니다. 예를 들어 ABC라는 동아리 회원들은 각각 유저이면서 ABC라는 그룹원이 됩니다. 3) 아더 : 유저와 그룹을 제외한 다른 사람들을 의미합니다. 4) 루트 : 루트는 시스템의 관리자로 모든 권한을 갖습니다. 모든 파일과 정보를 접근할 수 있습니다.


 여러분의 등록정보를 볼 수 있는 명령어가 있습니다.

$ id

 이 명령어를 입력하면 여러분의 uid와 gid 등 계정에 대한 정보들을 볼 수 있습니다. id 명령으로 알 수 있는 정보들을 나열하면,

uid : 유저 아이디; 유저를 식별하는 번호입니다. 컴퓨터는 문자열보다는 숫자를 더 좋아하기 때문에 사용합니다.
gid : 그룹 아이디; 유저가 포함되어 있는 그룹의 식별 번호입니다.
groups : 그룹 ; 자신이 포함되어 있는 그룹입니다.

 리눅스 시스템에서는 각 파일마다 권한을 등록 할 수 있습니다. 그럼 각 파일들의 권한을 볼 수 있는 명령어는 무엇일까요? 이미 알고 있듯이 "ls"명령어입니다.

$ ls -al 파일이름

위 명령어를 입력하면 해당 파일에 대한 상세한 정보가 나오고, 해당 파일의 정보중에 권한에 관련된 정보가 있습니다.


맨 처음 표시되는 rwxrwxrwx가 바로 권한을 나타내는 정보입니다. r은 읽기 권한이고 w는 쓰기 권한, x는 실행권한을 나타냅니다. 


 다시 보시면 rwx가 세번 반복되는 것을 볼 수 있습니다. 첫번째 rwx는 유저의 권한, 그룹의 권한, 아더의 권한을 나타냅니다. 파일마다 소유한 유저와 그룹이 존재한다는 것을 유추해 낼 수 있습니다.
 해당 파일을 소유한 유저는 trainer9라는 부분에 나타나고, 그룹은 trainer10이라는 부분에 나타납니다.


 
$ ls -al /etc/shadow

위 명령어를 입력해서 shadow 파일에 대한 정보를 보도록 하겠습니다. shadow 파일은 사용자의 비밀번호를 저장해 놓는 파일입니다.
 권한을 보면 유저 권한에 읽기 권한만 지정이 되어 있는 것을 알 수 있습니다. 이 파일의 유저는 root입니다. 즉, 이 파일은 root만 읽기 권한을 갖고 있습니다. 여기서 의문점은 비밀번호를 교체 할 때 권한 설정은 어떻게 되는 것일까요? 이 물음의 해답이 바로 해킹의 출발점입니다. 곰곰히 생각해 보시기 바랍니다.





이번 시간에는 리눅스 환경에서 C언어 프로그래밍을 하는 법에 대해서 알아 보았습니다. C언어를 이용한 프로그래밍에는 여러 단계가 필요합니다.

첫 번째 단계는 텍스트 에디터를 이용해서 원시코드를 작성하는 단계입니다. 여러분이 흔히 보는 C언어 소스들이 이에 해당합니다. 윈도우 환경에서는 NotePad, EditPlus 등의 텍스트 에디터나 Turbo C, Visual Studio 등의 IDE(Integrated Development Environment )에서 제공하는 텍스트 에디터를 사용했습니다. 리눅스 환경에서 가장 많이 사용하는 에디터는 vi 에디터와 그 업그레이드 버젼이라고 할 수 있는 vim 에디터가 있습니다.


여기에서는 cat 과 리디렉션을 이용한 텍스트 파일을 만드는 방법을 사용하도록 하겠습니다. 리디렉션이란 “방향을 바꾼다.”라는 의미입니다. Cat 명령어는 파일의 내용은 터미널이나 콘솔로 출력하는, 즉 모니터로 출력해주는 명령어입니다. 하지만 리디렉션을 이용하여 출력 내용을 모니터가 아닌 파일로 저장 할 수가 있습니다.

$ cat > test.txt

위 명령어를 입력하게 되면, 일단 커서가 깜빡이며 입력을 대기 하게 됩니다. 내용을 입력해 넣고 마지막으로 [Ctrl] + D 를 누르면 내용이 test.txt 라는 파일로 저장이 됩니다. 이 때, 중요한 특성이 있습니다. 리디렉션 명령어 “>”는 무조건 덮어쓰기 모드로 동작을 하게 됩니다. 즉, 위 명령어를 입력하면 기존에 있던 test.txt 파일에 덮어 쓰게 되어 이전에 있던 내용은 모두 지워지게 됩니다. 이어쓰기 모드로 리디렉션을 하기 위해서는 “>>”을 이용하면 됩니다.  “>>”을 이용하면 기존에 있던 내용의 끝에서부터 이어 쓰기를 시작합니다. ( 즉, EOF 위치부터 내용이 추가 되기 시작합니다. )


 다음과 같은 명령어를 쳐서 C언어 프로그램을 만듭니다. ( 사실은 원시 소스코드를 만드는 것입니다. )

$ cat > program.c
int main(){
int a=10.b=20;
printf("10+20=%d",a+b);}

위 소스코드를 입력하신뒤 [Ctrl] + D 를 누르시면 화면에 출력되어야 할 내용들이 파일로 저장이 되어 C 파일을 만들었을 겁니다. ( 직접 ls 명령어를 사용하여 확인하셔도 됩니다. )
C언어를 배우신 분이나 프로그래밍 경험이 있으신 분이라면 쉽게 이해를 할 수 있는 소스코드입니다. ( 10과 20을 더하는 프로그램입니다. )


 이제 이 소스 파일을 목적 파일로 컴파일 해 보도록 하겠습니다. 소스파일을 목적 파일로 컴파일 하는 명령어는 다음과 같습니다. 


$ gcc -o 생성될파일 원시소스파일
[생성 될 파일에는 컴파일 후 생성될 목적파일( 실행파일 )의 경로와 이름을 지정해 주시면 되고, 원시소스파일은 컴파일이 될 파일의 경로를 적어주시면됩니다. 위에서는 program.c가 되겠습니다. ]

 gcc -o program.exe program.c 를 입력하여 위에서 작성한 소스파일인 program.c 를 목적 파일 program.exe로 컴파일 하도록 합니다. 아무런 추가 메시지가 뜨지 않는다면 컴파일은 성공적으로 끝난 것이 됩니다. ls를 사용하여 파일이 생성되었는지 확인합니다. 
 


 마지막으로 컴파일 한 파일을 실행하는 연습을 해 보도록하겠습니다. 이에는 상대경로와 절대 경로를 이용하는 방법 2가지가 있는데, 일단 절대 경로를 이용한 실행 방법은 만들어진 파일의 절대 경로를 입력하면 됩니다. 예를 들면 /home/trainer8/program.exe 를 입력하면 해당 파일이 실행됩니다.
 두번째로 상대경로를 이용한 실행 방법입니다. gcc를 이용하여 컴파일을 하는 경우는 대부분 현재 폴더에 컴파일 결과를 저장하게 됩니다. 현재 폴더에 있는 파일을 실행하기 위해서는 "./파일이름"을 입력하면됩니다. 위의 경우에는 ./program.exe 를 입력하면 됩니다. 이 때, "/"앞의 "."은 "현재"라는 의미입니다. 즉 ./program.exe는 현재 폴더의 program.exe 라는 의미입니다.

 리눅스에서 C언어를 이용하여 프로그래밍하고 컴파일하는 기초적인 방법에 대해서 배웠습니다. 앞으로 리눅스 환경에서 프로그래밍 경험을 많이 쌓아야 겠다는 생각이 드는 트레이닝이었습니다.




 C언어의 기능 중에 조건부 컴파일이라는 기능이 있습니다. 그 이름에서 알 수 있듯이 어떤 조건을 만족 시키면 컴파일을 하고, 만족하지 않으면 무시해버리는 기능입니다. 이때 사용하는 지시자에는 #if, #elif, #else, #endif, #ifdef, #ifndef 등이 있습니다. 
 형식은 다음과 같습니다.

#if 수식1
 실행 코드1

#elif 수식2
 실행 코드2
.
.
.
# else
 실행 코드 n

#endif

 형식이 C언어의 if 문의 사용법과 같습니다. 해당 if 문이나 elif 문의 수식이 참이라면 해당 실행코드를 컴파일하고 다른 #if 들은 무시해버립니다. ( 일반 if 문과 같은 방식입니다. )

 예제를 들어 설명을 해드리겠습니다.  다음과 같은 소스를 컴파일 해보도록 하겠습니다.


이제 저장을 하고 컴파일을 하고 실행을 해보도록 하겠습니다.



CONDITION 을 1로 정의 했기 때문에 #if 조건에 true가 되어 해당 소스 코드가 선택되어 컴파일 된 것을 볼 수 있습니다. 만일 CONDITION을 0으로 정의 했다면 False가 출력이 되었을 겁니다.

다음으로 #ifdef 를 알아보도록 하겠습니다. #ifdef는 "define되었는가"를 조건으로 받는 전처리기입니다. 즉, 해당 매크로가 #define 명령어로 정의되어 있다면 그 부분을 컴파일하고 그렇지 않으면 컴파일  하지 않는 것을 말합니다.

 예제를 보도록 하겠습니다. 다음 소스코드를 타이핑하도록 합니다.


이 소스를 컴파일하고 실행해보도록하겠습니다.



위에 #define 을 사용해서 DEFINE 이라는 매크로를 정의했으므로, 해당 소스코드가 컴파일되어 실행이 되게 됩니다.

 조건부 컴파일은 알아두면 디버그라든지 여러 가지 편리한 점이 많이 있습니다.




이번 시간엔 파일의 압축에 대해서 알아봤습니다. tar와 gzip이 그것인데, 리눅스에서는 압축을 할 때, 하나의 파일 밖에 압축하지 못 한다고 합니다. 여러개의 파일을 압축하기 위해서는 압축 할 파일들을 하나의 파일로 묶고, 그 파일을 압축 명령어를 통해서 압축해야 합니다.


tar 명령어는 여러개의 파일을 하나의 파일로 묶어서 관리하는 명령어 입니다.

$ tar cvf 합칠파일 합쳐질파일들
[ tar 명령어는 합쳐질파일들을 합칠파일로 묶어 주는 명령어입니다. cvf는 옵션으로
c : create 새로운 파일을 생성합니다.
v : view 압축이 되거나 풀리는 과정을 보여줍니다.
f : 파일로 백업을 합니다.
이렇게 하나로 묶인 파일은 .tar 라는 확장자를 갖게 됩니다. ]


$ tar xvf 풀릴파일
[ 풀릴파일을 해당 디렉토리에 풀어 냅니다. ]


 이 때, tar는 단지 파일들을 하나로 묶어 줄 뿐 용량의 감소, 즉 압축은 일어나지 않습니다. 오히려 파일정보를 담고 있어야 하기 때문에 용량이 늘어나게 됩니다.


압축을 담당하는 명령어는 gzip이라는 명령어입니다. 윈도우의 winzip과 비슷한 녀석인데, 리눅스 버젼이라고 생각하셔도 됩니다.

$ gzip 파일이름
[선택한 파일을 압축합니다.]

$ gzip -d 파일이름
[선택한 파일을 압축 해제 합니다.]

gzip으로 압축을 하면 .gz 의 확장자를 갖는 파일이 생성됩니다. tar로 파일들을 하나의 파일로 묶고 gzip으로 압축했다면 파일 확장자는 .tar.gz 가 될 것입니다.


 오늘 배운 간단한 압축 명령어와 파일을 묶는 명령어는 파일 관리에 많이 사용되고 특히 업데이트를 할 때, 많이 사용되기 때문에 잘 알아두시기 바랍니다.


리눅스에서 모든 정보는 파일로 기록이 됩니다. 가장 중요하다고 할 수 있는 정보인 각 사용자의 비밀번호 정보도 역시 리눅스 어딘가에 파일로 저장이 됩니다. 지난 시간에   배웠던 $ cat /etc/passwd 라는 명령어를 기억 하실 겁니다. 이번 단계에서는 그 때 출력 되었던 내용들을 분석해보는 단계입니다.

 


 현기증이 나기 시작합니다. 저 많은 문자들은 도대체 무엇을 의미한단 말일까요? 어지러워 하지 마시기 바랍니다. 저것들이야 말로 유저들의 정보들이니까요. 이제 하나하나 분석해 보도록 하겠습니다.


 

위의 내용을 잘 살펴 보면, 콜론 ( ‘ : ‘ ) 을 이용해서 7가지 항목들을 구분하고 있습니다. 각각 의미하는 바를 설명해 드리겠습니다.


1. root

- 첫 번째 쓰여 있는 항목은 사용자의 아이디입니다. 리눅스 시스템에 처음 로그인을 할 때, 아이디를 적고 비밀번호를 적는데, 그 때 사용하는 아이디를 말합니다.


2. x

- 두 번째 쓰여 있는 항목은 해당 사용자의 비밀번호를 말합니다. 하지만 대부분 암호화가 되어 있어 그대로 사용하면 효과가 없는 문자열입니다. 하지만 해커들은 그 암호를 풀기 때문에 더 강화된 보안 수준을 위해서 비밀번호들만을 따로 떼어서 /etc/shadow 라는 파일로 만들어서 관리를 하게 됩니다. 이 파일은 root 계정만 접근을 할 수 있습니다.


3. 0

- 세 번째 쓰여 있는 항목은 해당 사용자의 사용자 번호를 말합니다. 컴퓨터 시스템은 문자열 보다는 숫자에 더욱 빠르게 반응합니다. Sky0123, kin345 등과 같은 문자열 보다는 1( 1번 사용자), 2(2번 사용자)와 같이 사용자에게 고유의 번호를 할당해서 관리하는게 더 효율적일 수가 있습니다. 세 번째 필드는 바로 그 사용자 번호를 말합니다.


4. 0

- 세 번째에 이어서 네 번째도 0 이라는 숫자가 있습니다. 리눅스 시스템에는 사용자와 함께 그룹이라는 개념이 있습니다. 나중에 배우겠지만 각 사용자는 어떤 그룹에 속해 있습니다. ( 기본적으로 자기 자신과 같은 이름의 그룹에 속하게 됩니다. ) 그 그룹들을 구별하기 위해서 사용되는 필드입니다.


5. Admin

- 5번째 필드는 해당 사용자의 이름입니다. 특별히 지정을 해주지 않으면 채워지지 않습니다. 로그 인에 사용되는 ID와는 다른 내용입니다.


6. /root

- 6번째 필드는 해당아이디의 홈 디렉토리를 말합니다. 홈 디렉토리란 로그인에 성공했을 때, 시작하게 되는 일종의 바탕화면과 같은 개념의 디렉토리입니다.
 

7. /bin/bash

- 7번째 필드는 해당아이디가 로그인에 성공하게 되면 실행되는 프로그램을 말합니다. 주로 쉘 프로그램이 됩니다.

 

앞으로 배워감에 따라서 이 같이 어지러운 파일들을 많이 보게 됩니다
. 어지러워 하지 마시고 차근차근 분석하는 습관을 기르시기 바랍니다. 이 정도에 어지러워 하면 나중에 멀미합니다 ;;;








 해킹이란 무엇일까요? 해킹의 주요한 목적중에 하나가 바로 정보를 빼내는 것입니다. 공격할 서버의 정보를 수집하여 취약점을 찾아내고 그 곳을 공격하는게 순서일텐데요. 여러분이 접속해 있는 서버의 정보들을 알아내는 명령어들을 배워보도록 하겠습니다.

$ whoami
[ 직역하면 "나는 누구인가?"  정도가 되겠네요. 현재 서버가 알고 있는 여러분의 정보를 알려줍니다.]

$id
[ 더 자세한 여러분의 정보를 알려줍니다. ]


다음으로는 궁극의 다른 유저 비밀번호 알아내는 명령어를 배워보도록 하겠습니다. 물론 실제 운영체제에서는 접근 권한이 없기 때문에 열수는 없습니다만 해킹에 성공하여 root 권한을 얻고 나면 이 명령어를 실행해서 비밀 번호를 알아 낼 수 있습니다.



$ cat /etc/passwd
[ cat 명령어는 파일이름을 받아서 화면에 내용을 출력해주는 명령어입니다. 위 명령어에서는 /etc/passwd라는 파일의 내용을 출력해주는데, 이 파일이 이 시스템에 있는 유저들의 비밀번호가 저장되어있는 파일입니다.]


나머지 명령어들도 알아보도록 하겠습니다.

$ uname -a
[ 현재 접속해있는 서버의 커널 버젼을 말해줍니다. 인터넷 커뮤니티에는 리눅스 커널 버젼에 따른 취약점이 배포되어 있습니다. 운이 좋게도 해당 시스템이 구버젼의 커널을 사용하고 그 취약점이 알려져 있다면 생각보다 손쉽게 시스템에 침투 할 수 있습니다. ]

$ cat /etc/*release
[ 리눅스는 많은 버젼들이 있습니다. 우분투 리눅스도 있고, 레드햇 리눅스도 있고 수세, 젠투 등등 많은 리눅스 들이 있는데, 이 서버는 어느 버젼을 사용하고 있는지 말해줍니다. ]



$ rpm -qa
[ 레드햇 계열의 리눅스에서 설치되어 있는 패키들의 정보를 알아낼수 있는 명령어 입니다. 이 정보들을 보고 해킹이 가능한지 여부에 대해서 알 수 있다고 합니다. ]

$ cat /etc/cpuinfo
[ 현재 서버의 CPU 정보를 나타냅니다. ]






이렇게 타겟 서버에 대한 정보를 획득하는 명령어들을 배웠습니다. 물론 많은 수의 정보들은 여러분으로부터 은폐되어 있습니다. 대부분 root 권한을 얻어야 볼 수 있는 것들입니다. 여러분의 리눅스에서 실습해 보시기 바랍니다.







 리눅스를 조금이라도 만져보신 분들이라면 루트 디렉토리 아래에 많은 디렉토리들이 있는 것을 보셨을 겁니다. 각각 디렉토리들은 고유의 역할이 있고, 중요한 디렉토리들입니다. 해커가 되기 위해서는 이런 디렉토리들을 빠삭하게 알고 있어야 겠죠. 이번 트레이닝에서는 중요한 몇개의 디렉토리만을 알아보도록 합니다.


bin : 기본적인 명령어들이 존재하는 디렉토리입니다. 앞서 배웠던 ls, rm 등의 명령어의 내용이 저장되어 있습니다.

boot : 리눅스를 부팅시키기 위한 프로그램들과 운영체제의 핵심인 커널이 들어 있는 디렉토리입니다.

dev : 리눅스에 부착되어 실행되고 있는 하드웨어들의 정보들이 저장되어 있는 곳입니다.

etc : 리눅스에 설치되어 있는 프로그램들의 설정파일이나 리눅스 자체의 설정파일들이 들어있습니다. 비밀번호라든지 유저 정보들도 들어있는 중요한 디렉토리입니다.

home : 일반적인 유저들이 기본 위치가 저장되어 있는 디렉토리입니다.

lib : 라이브러리 파일들이 존재하는 디렉토리입니다.

mnt : mount 명령어를 통해서 마운트 시킨 하드웨어가 저장되는 곳입니다.

proc : 프로세스들이 파일의 형태로 저장되는 곳입니다.

root : 최종 관리자인 root의 홈 디렉토리입니다.

sbin : 기본 명령어들을 제외한 시스템 관리 명령어들이 저장되는 곳입니다.

tmp : 임시 파일을 저장하는 디렉토리로 누구나 접근이 가능한 디렉토리입니다.

usr : 많은 응용프로그램들이 저장되는 장소입니다.

var : 프로세스가 실행되는 동안 생성되는 임시 파일들이 저장되는 곳이며 운영체제의 로그파일이 저장되는 곳이기도 합니다.



이번 과정은 그냥 암기 과정이었습니다. 하지만 기본적인 암기이기 때문에 반드시 외워야 하는 것들입니다. 제가 다니는 대학교 과정 리눅스/유닉스 수업에서도 디렉토리의 역할에 대한 문제를 시험문제로 냈었습니다. 반드시 외우고 다니시기 바랍니다.






 Trainer3 에서는 좀 더 재미있는 명령어를 배우게 됩니다. 바로 네트워크 명령어 인데요. 대부분 리눅스들은 서버 컴퓨터에 설치가 되고 다수의 유저가 접속해서 사용하게 됩니다. 즉, 네트워크의 개념을 포함하게 되는데요. 이 네트워크를 이용한 재미있는 명령어를 배우게 됩니다.



 새로 배우는 개념이 두가지 있습니다. 바로 콘솔과 터미널이라는 용어인데요. C언어를 이용해서 프로그래밍을 해 보신 분들이라면 콘솔이라는 단어에 익숙하실 겁니다.

콘솔( Console ) 
Local Computer에 Linux나 Unix 등의 OS를 설치하고 그 OS에 접속했을때 "콘솔을 통해 접속했다."라고 함

터미널( Terminal )
Remote Computer에 설치되어 있는 Linux나 Unix같은 OS에 원격 접속을 했을때 "터미널을 통해 접속했다." 라고 함





 다음으로 현재 서버에 어떤 유저들이 접속해 있는지를 볼 수 있는 명령어입니다.

$ w
[ 현재 어떤 유저들이 서버에 접속해 있는가를 나타내는 명령어]

USER : 어떤 ID를 가진 유저가 로그인 상태에 있는지 나타냅니다.
TTY  :  해당 유저가 콘솔을 통해 접속했는지, 터미널을 통해 접속했는지 나타냅니다. 콘솔이라면 tty로 터미널이라면 pts로 표현되며 터미널을 통해 접속한 유저가 많으면 순서대로 "/번호" 가 붙어 구별할 수 있습니다.
FROM : 해당 유저가 접속한 컴퓨터의 IP주소를 나타냅니다.
LOGIN  : 해당 유저가 로그인한 시간을 나타냅니다.
IDLE : 해당 유저가 마지막 명령을 내린뒤 흐른 시간입니다.
JCPU : 각 유저가 CPU를 사용한 지연 시간을 말합니다.
PCPU : WHAT 필드에 있는 명령이 지연된 시간을 말합니다.
WHAT : 현재 사용자가 어떤 형태의 명령을 내리는지 말합니다.





사용자의 정보를 볼 수 있는 명령어도 있습니다. finger 명령어가 그것인데, 원격에서 많은 유저의 정보를 볼 수 있기 때문에 보안상 골칫거리가 될 수도 있다고 하네요. 삭제하는 것이 바람직하다고 하는데 지금은 배우는 단계이기 때문에 사용해 봅니다.

$ finger 사용자 ID
[ 해당 유저에 대한 정보를 보여줌, -l 옵션을 이용해서 상세 정보를 볼 수 있음]




자신의 터미널을 확인하는 명령어도 있습니다. 동시에 여러명의 유저가 터미널에 접속하게 되면 순서대로 번호가 부여가 되는데, 자신이 몇번인지 알아볼때 유용합니다.

$ tty
[현재 자신의 터미널 정보를 보여주는 명령어]




물론 접속한 서버의 네트워크 상태를 볼 수 있는 명령어도 있습니다. 서버의 ip주소를 알수 있습니다. MS-DOS의 ipconfig 명령어와 유사합니다.

$ ifconfig
[서버의 ip정보를 알 수 있다.]


서버에 동시간대에 접속해 있는 유저에 대해서 알게 되었으니 이제 그 유저에게 메시지를 보내는 명령어를 배웁니다.

$ write ID /dev/pts/해당유저의pts번호
[ 해당 ID의 유저와 채팅을 합니다.]



 다음으로 서버에 접속해 있는 모든 유저에게 메시지를 전달하는 이른바 브로드캐스팅 명령어에 대해서 배웁니다.

$ wall 메시지
[ 메시지에 해당되는 문자열을 해당 서버에 접속해 있는 모든 유저에게 보낸다 ]




자 이번 레벨도 마무리를 지었습니다. 역시 복습은 잊지 마시구요.. 다음으로 넘어가도록 하겠습니다.



 
 이전 트레이닝에서 리눅스 환경에서 파일 내용을 볼 수 있는 흥미로운 명령어를 봤습니다. 이제 파일을 생성하고 복사하고 옮기는 작업을 하는 명령어를 배울 차례입니다.



새로운 명령어를 배우게 됩니다.

$ pwd
[ 현재의 경로를 표현해 주는 명령어 ]

 pwd 를 입력하면 현재 여러분의 위치가 절대 경로로 표현되게 됩니다. 

 절대 경로란 상대 경로와 대비되는 개념으로 여러분의 위치를 절대적으로 표현해주는 어떤 위치에 하나밖에 부여가 되지 않는 경로를 말합니다. 

 반면 상대 경로는 현재 위치에 대해서 상대적인 경로를 말하는데, 현재 경로보다 하위 디렉토리나 경로에 대해서는 현재 위치까지의 경로를 생략하는 방식입니다. 상대 경로는 개념상 편리한 경로입니다.




MS-DOS 에서도 사용했던 CD라는 명령어입니다.

$ CD 경로이름
[ 입력 받은 경로로 현재 위치를 이동합니다. 경로는 상대 경로 일 수도 있고, 절대 경로일 수도 있습니다. ]

 CD .. 은 현재 위치의 한단계 위의 위치 ( 부모 위치라고 할 까요? )로 이동하는 것을 의미합니다. 앞으로 디렉토리 사이를 많이 움직일 것이기 때문에 많이 사용될 명령어입니다.


$ mkdir 디렉토리이름
[ 디렉토리를 만드는 명령어입니다. 디렉토리 이름을 받아서 현재 위치에 디렉토리를 새로 만듭니다. ]

$ rmdir 디렉토리이름
[ 디렉토리를 제거하는 명령어입니다. 디렉토리 이름을 받아서 해당 디렉토리를 삭제합니다. ]


디렉토리를 다루는 명령어인 mkdir과 rmdir입니다.


$ cp 파일이름1 파일이름2
[ 파일이름을 2개 입력값으로 받아서 파일이름1의 내용을 파일이름2의 내용으로 복사를 합니다. 이 때, 파일이름1의 내용은 바뀌지 않습니다. ]

$ rm 파일이름
[ 파일이름을 입력으로 받아서 해당 파일을 삭제하는 명령어입니다. ]

$ mv 파일이름1 파일이름2
[ 파일이름 2개를 입력으로 받아서 파일이름1을 파일이름2로 이동시킵니다. 결과적으로 파일이름1은 삭제가 됩니다. 파일이름1의 이름을 파일이름2로 바꾸고자 할 때 많이 쓰이는 명령어입니다. ]




자.. 레벨2도 무사히 통과하였습니다. 이번 레벨에서는 파일의 기본적인 조작법을 배웠는데요. 배운후에 복습하는 습관은 가장 중요한 습관입니다. 여러분의 컴퓨터에 리눅스를 깔아놓고 복습을 해 보시기 바랍니다.






 이전글에서 FTZ에 접속하는 법을 배웠습니다. 이제 FTZ Level 1을 해보도록 하겠습니다. 기본적인 리눅스 명령어 사용법을 배우는 단계입니다.



프롬프트에 대한 설명을 해주고 있습니다. 프롬프트는 여러분이 리눅스와 대화를 할 수 있는 앞으로 아주 익숙해질 인터페이스입니다. [접속ID@서버 현재위치]$ 로 나타나게 됩니다. 이는 성공적으로 로그인이 되었음을 나타낸다고 하네요.

자 이제 ls( 엘에스 )라는 명령어에 대해서 배우도록 합니다. MS-DOS를 사용해 보신 분들이라면 dir이라는 명령어에 아주 익숙 할 것입니다.



리눅스에도 이 처럼 파일 목록을 볼 수 있는 명령어가 있는데 바로 ls 명령어입니다. ls 명령어를 입력해 봅니다.



ls에는 몇 가지 옵션이 있는데, 그 옵션을 이해하고 사용 할 줄 아는 것이 이번 FTZ의 목적이 되겠습니다.


$ ls  
 [ MS-DOS의 dir과 같은 명령어로 현재 위치에 있는 파일들과 하위 디렉토리들을 보여줌 ]

$ ls -l  
 [ 파일과 디렉토리의 정보를 표현해 줍니다. 자세히 보기 정도가 되겠네요. ]

$ ls -a  
 [ 숨김 파일도 보여주는 옵션입니다. 파일명이 "."으로 시작되면 숨김 파일입니다.

$ls -al
  [ 숨김 파일에 대한 자세한 정보를 표현해 줍니다. ]




 FTZ Level 1을 진행하다 보면 잠깐 퀴즈가 나옵니다. 직접 풀어보시는게 여러분의 실력 향상에 도움이 될 꺼라고 생각합니다.





자 FTZ Level1을 무사히 통과했습니다. 다음 레벨도 통과하길 바랍니다.







 해커스쿨이라는 사이트에서 해킹 연습을 시작하시려는 분들에게 여러가지 문제를 주고 있네요. FTZ( Free Tranning Zone )이라는 서비스를 하면서 해킹의 기본기들을 익힐 수 있습니다. 해커스쿨 FTZ에 접속하는 방법을 알려드리겠습니다. 저는 텔넷을 이용해서 FTZ에 접속을 하겠습니다.

[시작]->[실행]을 해서 다음을 입력합니다.

telnet ftz.hackerschool.org




그러면 이제 FTZ에 접속이 되었습니다.




이제 글을 잘 읽어 보시고 FTZ를 수료하시기 바랍니다. 저도 하나하나 수료해 나가면서 포스팅을 하겠습니다.




우리 같이 열심히 공부해서 대한민국 웹을 지키도록 합시다. !!





 C언어 개발 환경인 gcc를 우분투 리눅스 환경에서 설치해 보도록 하겠습니다. gcc는 윈도우의 비쥬얼 스튜디오와 같이 프로그래머에게 개발 환경을 제공해 주는 툴입니다.

$ sudo apt-get install build-essential


위 명령어를 입력하시면 gcc가 다음과 같이 설치가 됩니다.



글씨가 좀 깨지긴 했는데, 우분투 환경에 gcc가 설치되었습니다. 그러면 시험삼아 다음 소스를 실행해 보도록하겠습니다.

#include<stdio.h>


main()
{
     printf("Hello, World!!");
}



저는 VI 에디터를 사용해서 파일을 만들었습니다.



이제 gcc를 사용해서 컴파일을 해보도록 하겠습니다. 

다음 명령어를 이용해서 컴파일을 합니다.

gcc 123.c

이는 <123.c 라는 파일을 컴파일 하라!> 라는 명령어입니다.

./a.out

컴파일시 별도로 이름을 지정해 주지 않으면 gcc는 기본 이름으로 a.out이라는 파일을 생성합니다. 이때, a.out 파일 앞의 ./ 의 뜻은 현재 디렉토리를 가리키는 의미입니다.

이를 실행하면 다음과 같이 "Hello, World!!"라는 내용이 콘솔 화면이 출력이 될 것입니다.



이제 기본적인 개발 환경은 세팅이 되었으니 열심히 C 프로그래밍을 즐기시기 바랍니다.




네이버 지식인을 돌아다니다가 해커를 검색했더니 해커의 스킬레벨 분류라는 글이 눈에 띄었습니다.  


 해커도 실력에 따라서 그 등급이 매겨지는 모양입니다. 하긴 인터넷 게임이나 커뮤니티를 돌아다니면 해킹을 하겠다고 협박을 하는 귀여운 아이들이 많이 보이기는 하니까, 해커의 범주를 어느정도 정해 놓는 것도 흥미로운 일이긴 하겠네요.

 레벨은 낮은 순서대로 하도록 하겠습니다. 먼저 소개하는 스킬레벨일 수록 저급 능력을 가진 해커( 뭐 해커라고 하기에도 뭐한 레벨도 있습니다만 ) 입니다. 아 출처는 네이버 지식인 『아하 그렇구나!』입니다.


~Cookiecat at Computer~
~Cookiecat at Computer~ by ~Sage~ 저작자 표시비영리변경 금지

1) 레이머

해커는 되고 싶지만 경험도 기술도 없는 이들이다. 어떤 상황에서도 이들을 해커라고 불러서는 안된다. 크래커라 불러야 한다. 이들은 네트워크와 운영체제 관련해 기술적인 지식이 없다. 이들이 컴퓨터를 사용하는 유일한 목적은 게임과 IRC 채팅. 와레즈 사이트를 찾거나 크레디트카드 사기 등이다. 신문 잡지 등의 대중매체를 통해 해커에 익히 들은바 있는 이들은 스스로를 엘리트로 착각하는 그릇된 우월감에 빠져있다. 트로이 소프트웨어, 누킹, DoS 툴만 있으면 크래킹을 할수 있다는 생각에 트로이 목마나 GUI 운영체제용 해킹툴을 다운받는다. 이들의 우월감은 해커가 되고싶어하는 같은 부류, 같은 상황, 같은 수준의 다른 이들에게 영향을 준다. 이들이 말은 IRC 인터넷 커뮤니케이션 공간을 통해 전파되고 사이클은 반복된다. 이들중 대다수가 엘리트 레벨로 오르기 위한 기술적 능력이 부족하다. 몇년동안 공부하고 교육받고 컴퓨터를 사용해도 마찬가지로, 디벨로프트 키디 수준에 머물다가 은퇴한다.


Information Superhighway
Information Superhighway by nickwheeleroz (on holiday) 저작자 표시비영리동일조건 변경허락

2) 스크립트 키디

디벨로프트 키디와 레이머의 중간격으로 스크립트 키디는 양쪽의 특징을 모두 갖고있다. 이들은 해커라는 타이틀을 절대 얻지 못한다. 네워킹이나 운영체제에 관한 약간의 테크니컬한 지식이 고작인 이들은 GUI 운영체제 바깥 세상으로 나와본 적이 없다. 이들은 컴퓨터 지식을 와레즈에 사용한다. 이들에게 있어 해킹은 보통 알려진 트로이 목마를 사용해 평범한 인터넷 사용자를 공격하고 괴롭히는 것이다. 스크립트 키디와 레이머의 차이점은 나이와 약간의 지식이다. 이들은 대부분 학생으로 컴퓨터 수업시간에 선생님이 모르는 것이 있으면 이들에게 물어본다. 때문에 이들보다 낮은 레벨의 학생들은 이들을 엘리트 레벨로 착각하고 우러러보게 된다.


Stowaway Keyboard Equipped Newton
Stowaway Keyboard Equipped Newton by splorp 저작자 표시비영리변경 금지

3) 디벨로프트 키디

어린 연령대의 이들은 보통 십대 후반의 학생들로 구성된다. 이들은 해킹 기법에 관한 책들을 많이 읽었고, 기법을 어디에 사용할 것인지 알고있다. 익스플로이트가 먹혀들만한 취약점을 발견할때까지 여러번 시도해 일단 시스템 침투에 성공하는 경우 보통은 (의식적이든 무의식적이든) 이성을 잃고 시스템을 파괴한다. 그리고 나서 그들의 행위를 동네방네 자랑하며 떠들고 다닌다. 이들중에는 해커라는 타이틀을 얻는 이도 일부 있지만 대부분은 크래커라 불린다. 보안상 취약점을 새로 발견하거나, 최근 발견된 취약점을 주어진 상황에 맞게 바꿀만한 실력이 이들에게는 없다. 필요한 경우 서비스와 지식을 동원할 수는 있지만 네트위킹의 기초가 없고 GUI 운영체제를 제외한 다른 수준높은 운영체제에 대한 기본지식이 없다. 유닉스를 방금 시작했거나 기초만 알고 있는 경우가 대부분이다. 이들은 추적방지법을 알지 못한다. 보통 집에서 훔친 다이얼업 어카운트를 이용해서 크래킹을 한다. 네트워크 침투에 성공하면 사방에 자랑하고 다닌다. 레벨은 크레디트카드 사기, 와레즈(불법 복제 소프트웨어를 지칭하는 용어) 해적판, 누킹, DoS 같은 심각한 컴퓨터 범죄에 연관되어 있다. 법의 심판을 받는 것은 당연한 일이다. 일단 구속되면 사회가 자신의 죄를 어떻게 평가하고, 얼마나 엄격한 응징을 내리는지를 깨닫게 된다. 보통은 형을 살고 크래킹을 그만둔다.


$100-ish Laptop mockup and A-TEST motherboard
$100-ish Laptop mockup and A-TEST motherboard by curiouslee 저작자 표시

4) 세미 엘리트

이들의 연령층은 위의 엘리트 해커에 비해 조금 낮은 편이다. 컴퓨터에 대한 포괄적인 지식이 있고, 운영체체 시스템을 이해하고 있으며, 운영체체에 존재하는 특정한 취약점을 알고, 취약점을 공격할 있는 익스플로이트를 코딩할 정도의 최소한의 지식으로 무장되어 있다. 언론에 보도되는 해킹 사건은 대부분 부류의 해커에 의한 것이다. 이들은 스스로의 재능을 내보이고 싶어하기 때문에 엘리트 해커들의 눈총을 받는다. 엘리트 해커들의 입장에서 보면 이건 어리석은 짓이기 때문이다. 이들의 기술은 엘리트 레벨이 되기에는 부족하다. 크래킹 엄청난 양의 로그와 자취를 남겨 시스템 관리자들에게 종종 덜미를 잡혀 검거된다.



sleep is the enemy
sleep is the enemy by striatic 저작자 표시

5) 엘리트

3133t, 31337, 3
337 로도 알려져 있음. 보안산업의 최전선에 위치한 이들의 능력은 한계가 없다. 다른 업종에 비해 나이가 들수록 원숙한 레벨을 유지하는 것이 특징이다. 이들은 운영체제의 안팎을 죄다 꿰뚫어보고 있다. 프로그래밍은 기본이다. 타고난 재능의 뛰어난 실력자들이다. 보안의 특성상 이들중 보안업계에 종사하는 이는 극소수에 불과하며, 데이타 입력이나 헬프데스크 등에서 일하는 이는 더러 있다. 지식에 대한 끝없는 목마름과 호기심은 이들에게 있어 성공과 실패를 판가름하는 요인이다. " 코드는 루트가 아닌 일반사용자로 실행하면 세그먼트 오류를 일으킬까" 이런 류의 의문점이 들면 해결책을 찾을때까지 노력하고 노력한다. 엘리트 해커는 알고있는 지식을 적용시켜 자기의 마음에 들때까지 고치고, 고치는 방법으로 환경을 개선한다. 운영체제나 소프트웨어에서 취약점을 발견하면 앉은 자리에서 취약점의 근원과 원인을 추적하며, 때로는 가능한 해결책도 발견해 낸다. 고도의 테크닉과 노련함은 잡히지 않기 위해 필수로 갖추어야 조건. 엘리트 해커는 시스템 안팎을 흔적도 없이 해킹한다. 기술은 해킹을 당했다는 사실조차 알아채지 못할 정도로 신기에 가깝다. 이들이 해킹을 하는 이유는 단순하다. 자신이 시스템에 침투했다가 조용히 떠날수 있다는 것을 증명하려는 것뿐. 그러므로 추적당할 있는 데이타만 지우고 나머지 다른 데이타에는 손을 대지 않는다. 이들은 마음만 먹으면 네트워크 전체를 다운시킬수도 있고, 시스템에 침투해 복구 불가능하게 만들수 있는 실력의 소유자이들다. 그러나 이들은 그렇게 하지 않는다. 왜냐면 엘리트이기 때문이다.


 나중에 크래커 vs 크래커 라는 주제로 다른 포스팅을 한번 할텐데요. 해커레벨이 어떻고, 크래커와 다르고 어떻고를 떠나서 한 시스템에 허락받지 않고 침투하는 건 똑같지 않을까요? 다만 의도가 White하냐 Black하냐에 따라서 분류를 하는것일 뿐이겠지요.
 해커가 되기위해서는 범법의 경계를 아슬아슬하게 넘나 들어야만 하는 것 같습니다.



 엊그제 비가 오고 많이 추워졌네요.. 별로 안 추울줄 알고 따뜻하게 안 입고 나갔다가 해지고 나서 추워 죽는줄 알았네요.


날도 춥고 길가에 차도 없고 하니 쓸쓸하기도 하네요.



밖이 추워 질 수록 집이 더 좋아지는건 왜일까요? 아침이면 일어나기 싫고 이불속에만 있고 싶고.. 아무튼 감기 걸리지 말고 따뜻하게 지냅시다..



어느덧 가을이 찾아 왔네요. 늘 푸르기만 할 것 같은 나무들도 저마다 붉은 옷으로 갈아입고 서있네요. 날씨도 아침 저녁으로 쌀쌀해지고, 해도 빨리지는 걸 몸으로 느끼면서 "벌써 가을이구나~"하고 느낍니다.
 

 
 올한해 이루고 싶었던 것도 많고, 해보고 싶었던 것도 많은데, 시간은 왜 그렇게 빨리 가는지, 왠지 쓸쓸해지는 계절 가을이 왔습니다.




 울긋불긋 물든 단풍을 보면서 올한해를 되돌아 보는 좋은 시간을 가졌으면 좋겠네요~ 많은 분들이 올한해 마무리 잘 하셨으면 좋겠습니다.


 워렌버핏을 아십니까? 워렌버핏이라고하면 "투자의 귀재", "세계 2위부자" 라는 수식어가 항상 따라다닙니다. 부자가 되고 싶어하는 많은 사람들이 그의 습관과 가치관을 배우기 위하여 그에 대해 기술한 책들을 보고 그의 투자를 벤치마킹합니다.
 투자란 무엇일까요? 사람들은 저마다의 자원, 혹은 밑천을 가지고 태어납니다. 부모에게 물려받은 우수한 유전자로 머리가 좋을 수도 있고, 잘 생긴 얼굴을 갖고 태어날 수도 있으며, 부
모가 일구어 놓은 재산을 가지고 태어날 수도 있고, 어쩌면 하늘이 돕는 행운을 가지고 태어 날 수도 있고, 가장 중요한 "노력"이라는 것을 가지고 태어날 수도 있습니다. 투자란 이런 자원들을 적재적소에 할당하고 배치시키는 것을 말합니다. 단돈 100달러로 주식투자에 입문해서 연간 매출액 400억 달러에 이르는 투자회사를 운영하고 있는 훌륭한 투자가로 성공한 워렌버핏에게 부자가 되는 방법 몇가지를 배워 보겠습니다.


Warren Buffett
Warren Buffett by trackrecord 저작자 표시비영리변경 금지

자기 자신을 행운아라고 생각한다. 세상이 뜻 대로 되지 않으십니까? 마음 대로 되는 일이 없어서 불행하다고 생각하십니까? 모든 것을 포기하고 싶습니까? 그런 맘이 들때마다 한숨 돌리고 주변을 돌아보시기 바랍니다. 세상에는 나보다 좋은 환경에 사는 사람도 있지만 나보다 안 좋은 환경에 사는 사람들도 많이 있습니다. 사실 두손 두발 멀쩡하게 태어난 것도 엄청난 행운이며, 세상의 빛을 본것도 엄청난 행운입니다. (수천만마리의 정자 중에 선택된 하나의 정자가 바로 우리 들입니다 .) 특히 버핏이 태어난 시기는 그 유명한 대공황 직후의 시기였습니다. 먹고 살기 어려워서 아이를 갖기를 꺼려했는데 그 중에서 태어난 것입니다.
 흔히 성공하는 사람들의 성격 중에 대표적인 것이 "긍정적"이라는 것입니다. 현재 주변 환경들을 비관적으로 쳐다 보지말고 긍정적으로 보는 자세야 말로 성공을 위해서 꼭 필요한 것이 아닌가 합니다.



"The [banks] are a toad, and they think we're a princess..." by Esthr 저작자 표시비영리


좋아하는 일, 하고 싶은 일에 최선을 다한다. 세상에서 가장 행복한 사람은 바로 하고 싶은 일을 하고 사는 사람이 아닐까 생각합니다. 그 정도로 현실과 이상사이의 차이는 큽니다. 워렌버핏은 돈버는 일을 좋아 했습니다. 어려서부터 콜라캔의 가격차이를 가지고 장사를 했고, 그렇게 모은 돈으로 핀볼게임기를 사서 이발소에 설치해 돈을 벌기도 하는 등, 사업을 하고 싶어 했고, 돈 버는 일을 좋아 했습니다. 어짜피 고수의 길에 들어서게 되면 자신이 하고 싶은일, 좋아하는 일이 아니라면 최고의 자리에 오르기가 힘이 듭니다. 어린 분들이라면 자기가 좋아하는 일이 무엇인지 정확히 파악하는데 주력을 하시고, 나이가 있으신 분들이라면 지금 하시는 일을 좀 더 즐겁게, 즐기면서 하는게 정답이 아닐까 생각합니다.


Dollars !
Dollars ! by pfala 저작자 표시변경 금지


다른 사람의 좋은 습관을 자기 것으로 만든다. 벤치마킹이라는 것이 있습니다. 성공한 사람이나 주변에서 좋은 평을 듣고 있는 사람들의 습관들을 연구해서 따라해 보는 것도 하나의 방법입니다. 친구들에게서 인기가 많은 친구들을 잘 관찰하여, 장점 목록이나 부러운점들을 목록으로 만들어 봅니다. 만일 친구의 말 솜씨가 장점이고 부럽다면, 그 친구의 말투를 따라 해 보는 것도 좋은 방법입니다.
 주변에 장점을 가진 친구가 없다면, 단점을 가진 친구를 관찰해 보는 것도 좋은 방법입니다. 말을 좀 가볍게 내 뱉는 ( 소위 싸가지 없다는.. ) 친구가 있다면, 어느 순간에 그 친구가 어떤 말을 해서 기분이 나빳는지를 기억해서 여러분들이 그 상황에 있을 때는 그런 말을 안 하는 식으로 벤치마킹을 하면 됩니다. ( 타산지석 이라고도 하죠. )



1달러 우습게 보지 말라.  워렌버핏 뿐만아니라 많은 부자들을 보면 굉장히 검소한 생활을 하고 있음을 볼 수 있습니다. 물론 평범한 서민들보다는 훨씬 많은 지출을 하고 있지만, 그 지출내역은 상당히 계획적입니다. 일반 사람들이 무심코 쓰게 되는 천원 한장도 부자는 꼼꼼하게 체크를 하고 계획적으로 사용합니다.
 또한 돈에 대한 욕심도 일반인보다 훨씬 강합니다. 길거리에 100원짜리가 떨어져 있을 때, 그 동전을 줍는 사람은 일반인이 더 많을 까요? 아니면 부자가 더 많을 까요? 사람에 따라 다르겠지만 대부분의 부자들은 길거리에 떨어져 있는 100원짜리 동전을 보면 주워 가져 갑니다. ( 자수성가한 사람들을 보면 말이죠. )
 단돈 천원이 얼마 안되는 돈이라고 생각 할 수 있지만 천원은 천원 그 이상의 의미를 담고 있는 것이 아닐까요? 돈에 대한 기본적인 태도를 볼 수 있습니다. 


Teslin Sunset
Teslin Sunset by Bruce McKay 저작자 표시비영리변경 금지


 때가 올 때까지 참고 기다린다. 워렌버핏은 가치투자의 대명사입니다. 데이트레이딩이라는 말이 있습니다. 주식 거래를 할 때, 하루에도 몇 번씩 거래를 하는 방식입니다. 빨리빨리를 외치는 한국인들에게는 익숙한 거래 방식일지도 모릅니다. 하지만 워렌버핏은 철저하게 분석하여 신중하게 결정을 내리고 한번 투자하면 몇년이고 묵혀둡니다. 
 이는 비단 주식투자에만 한정되지는 않을 것입니다. 많은 사람들이 "기다림"에 너무 인색한 경향이 있습니다. 시험을 볼 때도 당장 성적이 안오르면 조바심을 내고 안절부절 못 합니다. 성공의 길, 부자의 길 중 하나는 인내심이 아닐까요?




 워렌버핏에게서 배울점은 너무나도 많이 있는 것 같습니다. 그는 매우 검소한 생활을 하고 있었으며, 전 재산의 대부분을 자선 단체에 기부를 하기도 했습니다. 부자가 되고 싶으신 분들이라면 워렌 버핏을 연구해 보는 것도 좋겠습니다.



 성공하고 싶은 많은 사람들은 자기계발 서적, 성공학 강의, 다큐멘터리 등을 많이 보면서 성공하는 "방법"을 배우고자 합니다. 실제로 성공학 강의나 성공에 관한 서적이 베스트 셀러에 오르는 모습을 보면 이러한 사실을 잘 알 수 있습니다. 특히 IMF 이후 완전한 무한 경쟁 시대에 접어 들게 되면서, 자기 계발이라는 단어가 많은 사람들의 가슴속에 자리매김 하면서 이런 현상은 점점 가속화하고 있습니다. 


 하지만 성공학 강의를 하는 사람들이 꼭 사회적으로 성공한 것은 아닙니다. 성공하는 방법에 대해서 잘 알고 있는 사람들이 실제로 성공하지 못 하는 경우가 비일비재합니다. 왜 이런 현상이 나타나는 것일까요? 성공에 대해서 누구보다 많이 연구하고, 공부하는 사람들이 오히려 성공하지 못 하는 것은 왜 일까요?



 그런 부류의 사람들은 성공을 하기 위한 대부분의 방법론적인 지식은 많이 알고 있습니다. 하지만 가장 중요한 것을 하지 않고 있습니다. 바로 "행동"입니다. 머리 속으로만 존재하는 성공은 의미가 없습니다. "부뚜막의 소금도 넣어야 짜다"라는 속담이 있습니다. 성공에 대한 많은 것을 알고 있지만 정작 가장 중요하고, 가장 힘든 행동을 하지 않는다면 말짱 도루묵이 되고 맙니다. 

故 정주영 회장님


 故 정주영 회장님의 유명한 말씀이 있습니다. "해보기나 했어?" 그렇습니다. 우리는 성공에 대한 많은 것을 알고 있습니다. 어떻게 해야 하는 지는 잘 알고 있습니다. 하지만 어떻게 하지를 않습니다.

행동합시다. 그것이 전부입니다.


 엘리트를 논할 때 항상 등장하는게 1%라는 숫자 입니다. 그 만큼 우리에게 1%는 되기를 원하고 많은 사람들이 목표로 두고 있는 대상입니다. 이 책은 1%가 되는 법에 대한 책이라기 보다는 "성공한 사람들과 평범한 사람들 사이에는 1%의 차이 밖에 없다."라는 의미를 담고 있습니다.


  이 책은 7 가지 챕터로 구성되어 있습니다.   

1. 준비 : 미래의 고수여 성공을 준비하라.
2. 이상 : 꿈꾸는 자의 꿈은 이미 현실이다. 
3. 전문성 : 잘하는 것에 몰입하라.
4. 역경 : 광야로 나가 눈비를 맞아라.
5. 성실 : 지름길은 없다.
6. 스타일 : 대중과 함께 호흡하라.
7. 노력 : 끝없는 노력으로 고지를 지켜라.



 7가지 중에서 몇가지 마음에 와 닿는 구절과 챕터들을 소개해 드리겠습니다. ( 전부 써드리면 저작권 침해에 해당 될 테니 간단히 소개만 해드리는 쪽으로 하겠습니다. )
 
 먼저 준비입니다. 여러분은 어떤 준비를 하고 계신가요? 취업을 앞둔 대학생들은 취업을 준비하기 위해서 어학 점수와 자격증, 학점등을 준비하고, 승진을 준비하는 직장인들은 실적이나 자격증, 대인관계 등을 준비 할 지도 모릅니다. 이렇듯 우리는 어떤 것을 바라고 원하기 때문에 준비라는 작업을 합니다.

I've reached the end of the world
I've reached the end of the world by Stuck in Customs 저작자 표시비영리동일조건 변경허락

 하지만 어떤 부류의 사람들은 "운칠기삼"이라는 말을 들먹이면서 준비를 소홀히 합니다. 운칠기삼이란 모든일의 7할은 운에의해서 좌우 된다라는 뜻입니다. 하지만 운이야 어쩔 수 없더라도 3할의 기 정도는 노력으로 가능합니다.
 사실 따지고 보면 운칠기삼이라는 말은 안 맞는 것 같습니다. 운은 준비된 사람에게만 찾아 옵니다. 운이 주는 기회는 준비된 사람만이 잡을 수 있으며, 준비가 안 된 사람은 기회가 찾아 왔는지 조차 모르는게 사실입니다. 자신에게 기회가 찾아 왔음에도 알아 차리지 못하고 운칠기삼이니 운명이니를 논하는게 조금은 불쌍해 보이지 않나요? 준비된 자만이 성공을 거두는 것 그것이 진리입니다. 





 준비 다음으로 중요한 것이 실행입니다. 많은 성공학 강의를 들어보면 ( 이 중에는 유료 강의도 많이 있습니다. ) 혹은 자기 계발이나 성공에 대한 서적을 읽어보면 "아하! 그렇구나" 하고 머리에 와 닿는 내용이 많지는 않습니다. "그런 것들이 성공의 비밀, 성공으로 가는 길이라면 누구나 성공하지"라고 말하는 분이 있습니다. 물론 그것이 전부라면 세상 모든 사람, 적어도 성공학 강의를 들은 사람들은 모두 성공하겠죠. 

1998000083
1998000083 by HungryForester 저작자 표시비영리변경 금지



 하지만 성공하는 부류와 그렇지 못한 부류 사이에 가장 큰 차이점은 바로 실행입니다. 성공하는 사람은 성공하는 방법을 공부나 경험을 통해 알아내어 실천을 합니다. 하지만 실패하는 사람은 항상 핑계를 만들어 실천을 하지 않습니다. 실행의 힘, 그것이 바로 여러분을 성공의 길로 인도하는 힘입니다. 실천을 하기 위한 조건에는 세가지가 있습니다.
 1. 충분히 준비 할 것
 2. 경험을 쌓을 것
 3. 절대 포기 하지 않을 것
 입니다. 충분히 준비하고 경험을 쌓아서 절대 포기 하지 않을 때, 자신감이 생기며 그러한 자신감이 있어야 일을 실행에 옮길 수 있습니다. 물론 자신감은 실력이 뒷 받침 되어 있을 때, 유지 됩니다. 매사에 겸손하되 실력에 있어서 만큼은 겸손 하면 안 되는 것입니다. 



 그리고 특기 입니다. 사람마다 적성이 있습니다. 자신이 어떤 것을 잘 하고 어떤 것을 하면서 즐거워 하는 지를 아는 것도 위의 것들 만큼 중요합니다. 한국의 많은 대학생들을 살펴보면 자신의 전공을 적성이 아닌 점수에 맞춰서 정하는 경향이 있습니다. 전공 보다는 학교를 보고 입학을 해서 정작 중요한 학점은 챙기지 못 하는 경우가 비일비재 합니다. 

 직장을 선택함에 있어서도 마찬가지입니다. 많은 사람들이 그냥 대기업 대기업 하면서 자신의 전공이나 적성과는 관계없는 일을 하곤 합니다. 하지만 이런 일을 한다면 일의 능률이 떨어짐은 물론이고 나아가서는 스트레스만 받게 될 것입니다. 먼저 여러분이 잘 하는 일을 찾길 바랍니다. 만일 여러분이 잘하는 일이 여러분이 즐거워 하는 일이라면 여러분은 성공 할 수 있는 밑 바탕이 되어 있는 것입니다.

factory~
factory~ by redbiscuit 저작자 표시비영리변경 금지



많은 사람들이 현재 상황에 불평을 하곤 합니다. 배경이 나빠서 성공을 할 수 없다고 합니다.
일본의 가전업체 마쓰시타 전기산업의 창업자 마쓰시타 고노스케의 말을 인용해 보자면, "나는 하나님이 주신 세가지 은혜 덕분에 크게 성공할 수 있었다. 첫째, 집이 몹시 가난했기 때문에 어릴 적부터 구두닦이나 신문팔이 같은 고생을 했고, 그사이에 세상을 살아가는데 피룡한 많은 경험을 쌓을 수 있었다. 둘째, 태어났을 때부터 몸이 몹시 약해서 항상 운동에 힘써왔기 때문에 늙어서도 건강하게 지낼 수 있었다. 셋째, 초등학교도 못 다녔기 때문에 세상의 모든 사람들을 나의 스승으로 여기고 누구에게나 물어가며 열심히 배우는 일에 게을리 하지 않았다."
 중요한 것은 배경도, 환경도 아닙니다. 중요한 것은 바로 여러분 자신인 것입니다.



부자 되고 싶으신가요? 부자가 되고 싶은 분들에게 추천해드리고 싶은 책이 있습니다. 바로 『식객』으로 유명하신 만화가 허영만의 『부자사전』입니다.



 우연히 도서 대여점에서 보게 된 얇지 않은 책( 만화책이기 때문에 두께가 어느 정도 있습니다. )으로 평소 부자에 관심이 많던 제 눈을 끌기에 충분한 책이었습니다. 이 책은 만화가 허영만님이 <한국의 부자들>이란 책을 바탕으로 한 만화책입니다. 다른 재태크, 성공, 부자를 다루는 서적과는 달리 만화책이기 때문에 가볍게 볼 수 있는, 하지만 내용면에서는 결코 떨어지지 않는 그런 책입니다. 
 의 작가 허영만'>

 책을 읽으면서 부자와 안부자( 부자가 아닌 사람 혹은 될 수 없는 사람 )를 비교하며, 부자들은 어떤 사고 방식을 가졌는지를 설명해 주는 방식이 맘에 들과 와 닿았습니다. 많은 부분에서 부자가 될 사람과 그렇지 못 할 사람은 다르게 생각 할 수 있었고, 부자가 된 혹은 될 사람들은 그렇게 될 수 밖에 없다는 것을 느끼게 되었습니다. 

돈 많이 벌고 싶죠?

 특히 "기회"라는 측면에서 전반적으로 부자와 안부자가 갈렸습니다. 부자는 항상 준비하고 있습니다. 기회가 오면 본능적, 혹은 경험에서 얻은 직감으로 알아 차리고 덥석 낚아 챕니다. 하지만 안부자 들은 기회가 오면 그 제서야 부랴부랴 하기 시작해서 준비가 되었을 때는 부자가 이미 낚아 챘거나 절반을 물어간 상태입니다.

 시중에는 많은 자기계발, 성공, 재태크 관련 서적이 잘 팔리고 있어, 부자가 되고 싶은 사람들의 마음을 대변해 줍니다. 하지만 여전히 그들은 부자가 되고 있지 못 합니다. 그 차이를 가르는게 바로 "습관"입니다. 우리는 "일찍일어나는 새가 벌레를 더 많이 잡는다."라는 속담을 어렸을 때 부터 지겹도록 들어왔습니다. 부자는 이 속담의 교훈을 습관으로 만들어 꾸준히 지켰을 뿐이라는 걸 이 책은 말해주고 있습니다. 

 실패가 우리에게 주는 소중한 교훈은 바로 경험이라는 것입니다. 경험이란 어떤 일을 겪으면서 그 사건 이전보다 좀 더 나아지는 것을 말합니다. 부자들은 이런 경험을 축적하여 자신의 것으로 만들었지만 안부자는 이런 사건들을 머리속에만 담아두어 시간이 지나면 없어지게 되어, 습관이라는 형태로 몸에 배지 않습니다. 

 글쎄요. 그렇게 쉽지는 않지만 부자로 가는 열쇠는 바로 습관이 아닌가.. 이 책을 읽고 느낀 점입니다.


독서 메모


- 중요한건 생각이 아니다. "습관"이다.
1. 겨울이 오기전에 양털을 깎아라.
 -> "빚"도 적절히 활용하면 좋은 수단이다. 일종의 배수진을 치는 행위.
2. 주위에 열성팬을 만들어라.
 -> 상사, 동료, 후배에게 제대로 "영업"하라. 그렇지 않으면 반드시 값을 치른다.
      "덤비는 적은 물리치 되 일부러 적을 만들지 마라."
3. 신용만이 살 길이다.
 -> 사업이나 투자 밑천이 없는 사람은 끊임없는 노력으로 기회를 만들 수 있지만 신용이 없는사람은 기회조차 오지 않는다.
4. 끼, 깡, 끈, 꼴, 꿈을 키워라.
 -> 끼 : 성실함, 깡 : 원칙 - 못 먹어도 고는 없다, 끈 : 인맥 - 사람이 기회다. , 꼴 : 낙관 - 아흔이 넘으면 자신의 얼굴에 책임을 져야 한다. 꿈 : 강렬한 집착은 "끼"로 현실화 된다.
5. 낙관적인 삶을 살아라.
 -> 감정적이지 말고 평상심을 유지하며 살아라. 허황된 눈가린 낙관론은 좋지 않다.
6. 누구에게나 미래는 두렵다.
 -> 미래가 두려워 미래를 위해 부를 쌓다.
7. 독불장군 부자는 없다.
 ->탑을 수직으로 쌓으면 쉽게 무너지지만 피라미드형으로 쌓으면 매우 안정적이다. 여러 사람에게 도움( 의견 ) 을 받되, 너무 의지하는 팔랑귀는 되지 말아야 한다.
8. 부자가 더 큰 부자가 된다.
 -> 돈은 먹이 사슬이다. 물과 돈은 반대로 흐른다. 부자는 자본주의의 최종 포식자.
9. 이미 늦었다는 말은 없다.
 -> 돈을 찾아 내는 안목 부터 기르자. 
      1) 돈쓰는 맛 vs 돈 버는 맛
      2) 목표를 정하면 집요하게 끝장을 본다. 사자가 먹이를 잡듯이.
10. 월급쟁이 때 부터 사장의 눈높이에 맞춰라.
 -> 지금 앞에 놓인 일이 내 일이라고 생각하고 최선을 다하라.
11. 돈버는 공부 삼각함수보다 ㅓ렵다.
 -> 명문대생이라도 돈버는 공부는 따로 해야 한다.
12. 돈 자랑을 하지 않는다.
 -> 빈수레가 요란하다. 돈자랑하면 돈 쓸일만 늘어난다.
13. 원칙을 칼처럼 적용하라.
 -> "줄돈은 늦게 주고 받을 돈은 빨리 받는다. "
14. 한번 온 기회는 절대 놓치지 않는다.
15. 부지런함은 기본
 -> 시간 활용을 극대화
16. 무자비함을 배워라
 -> 인생은 전쟁이다. ( 시장에서는 법보다 돈이 우선이다. )
17. 큰 손들의 부동산 투자 노하우.
 -> 부동산은 투자의 개념이지만, 재산은 아니다. ( 현금화에 어려움 )
18. 거꾸로 생각하라.
 -> 전쟁은 영웅을, 위기는 기회를, 불경기는 부자를 만단다.
    *경기 보는 법
       1) 신문 광고< 책, 점집, 대출, 약 광고가 주를 이루면 불경기>
       2) 주식 관망
       3) 신문과 경제 신문을 동시에 봐라
19. 투자에 부화뇌동은 없다.
 -> 부화 뇌동 : 줏대 없이 남의 의견에 덩달아 같이 행동
     -> 원칙에 맡겨라( 원칙은 깨지면서 배운다. )
20. 돈은 머리가 아닌 발로 벌어라.
 -> 머리로 시작해서 발로 끝낸다. 아이디어에서 집중하고 추진한다. 움직이다보면 가닥이 하나 보일 것이다.



새삼 많은 것을 느끼게 하는 책이었습니다. 특히 습관의 중요성은 다시 느끼게 되었습니다. 부자가 되고 싶은 여러분들.. 이 책 강력히 추천합니다. 아, 19세 미만에게는 약간 부적절할 수도 있는 유머들이 중간중간 섞여 있지만 교훈은 거기서 오는게 아니기 때문에.. ㅎㅎ



노래방가면 분위기 띄우기에 딱 좋은 노래가 몇 곡있습니다. 그 중에 체리필터의 "오리날다"는 항상 끼는 노래중 하나입니다. 체리필터의 노래 들이 대부분이 흥겹긴 하지만 특히 오리날다는 흥겨운 멜로디와 특이한 가사로 많은 인기를 끌었죠. 라이브 영상을 찾아서 소개해 드립니다.


체리필터 오리날다 라이브 듣기



곡 정보
<정보 출처 : 네이버 뮤직 >


가사보기


체리필터 오리날다 감상평
 체리필터하면 시원시원한 가창력과 흥겨운 리듬이 떠오르는데요. 오리날다는 낭만고양이와 더불어 체리필터의 대표곡으로 꼽히는 곡입니다.



이전 앨범에서 낭만고양이로 대중들에게 알려지기 시작했던 체리필터의 인기를 다시 한번 확인 시켜줬던 앨범입니다. 낭만고양이의 느낌을 그대로 이어주며, 더욱더 시원한 느낌을 주는 오리날다가 수록되어 있는 이 앨범에는 달빛소년과 같은 색다른 느낌의 곡들도 수록되어 있습니다.



오리날다의 가사는 특히 많은 느낌을 주었는데요. 날수 없는 새인 오리가 날고 싶어하는 모습은 꿈과 희망을 좇는 우리들의 모습과 많이 닮아 있었습니다. 
 사랑을 노래하는 대세와 달리 꿈과 희망을 노래하며, 뛰어난 가창력을 선보인 체리 필터의 대표적인 곡인 오리날다는 노래방에서도 낭만고양이와 더불어 분위기 띄우는 곡중 하나로 많이 불리고 있습니다. 



 이번 영상에서 마지막의 가성으로 애드립 하는 부분은 아무나 따라 할 수 없는 체리필터의 보컬인 조유진의 실력을 보여주는 부분이 아닌가 합니다.


대중들이 쉽게 따라 부를 수 있는 멜로디와 흥겨운 리듬등이 더욱더 이 노래를 사랑 받게 만드는 것 같습니다. 크라잉 넛에 이어서 언더에서 부터 성공한 밴드의 대명사인 체리필터의 실력을 느낄 수 있는 라이브 영상이었습니다.




 별다른 내용은 아니고 오늘 집에 가는 길에 웃긴 장면이 있어서 얼른 사진을 찍어 본게 있어서 이렇게 포스팅을 합니다.



 아마 버스 운행도중 과열 때문에 멈춰 섰다가 다시 회송해 가는 모양입니다. 버스 안에는 손님이 하나도 없었고, 버스가 정류장에 멈춰 서지도 않았습니다.



 그런데 좀 위험해 보이는 건 왜일 까요? 운행 도중에 고장이 안나게 조금만 더 신경 써 줬으면 좋겠습니다. 버스를 많이 타고 다니다 보니 이런저런일이 많이 생기는데, 버스가 고장난 적도 있었고, 버스기사 아저씨들 끼리 싸우는 경우도 있었고, 버스 기사 아저씨가 손님에게 막말하는 경우도 있었고, 버스 오래 타다보면 별 꼴을 다보게 되는 것 같습니다.

 혹시 모르죠. 저 버스 트랜스 포머일지.. ㅋ



 영어에서 가장 중요한 요소가 바로 주어와 동사입니다. 여기서 동사는 다시 목적어와 보어의 필요 여부에 따라서 5가지 종류로 나뉩니다. 보어의 필요 여부에 따라 완전 동사와 불완전 동사, 목적어의 필요 여부에 따라 자동사와 타동사로 나뉘게 되며, 이 둘을 조합하여 완전 자동사, 불완전 자동사, 완전 타동사, 불완전 자동사로 나뉘게 됩니다. 여기에 수여 동사를 합하여 동사는 5가지로 나뉘게 되는 것입니다.

동사의 범주







 목적어나 보어를 필요로 하지 않으며 동사 단독으로, 혹은 부사구를 동반하여 문장을 형성하는 동사를 말합니다. 이 때, 유도 부사 there로 시작하는 문장( there is ~ )은 주어와 동사를 도치시킵니다.

( 완전 자동사를 사용한 예 2개 )

* 수동의 의미를 지닌 능동형 자동사
 - The book reads[sells] well
 - This pen writes smoothly

 * 동명사나 부정사의 능동태가 수동의 의미를 지닌 경우
  a. 필요, 요구의 동사( need, want, require 등 ) + 동명사 : ~ 가 요구[필요] 된다. 
  b. be worth ~ing  : ~ 할 만한 가치가 있다.
  c. 부정사 : you are to blame, 





 보어를 필요로 하는 동사로 보어로 명사, 대명사, 동명사, 부정사, 명사절 등의 명사 역할을 하는 명사 상당어구와 형용사, 분사 등의 형용사 상당어구를 취합니다. 이 때, 명사 보어의 경우 주어와 동격을 이루고 ( "주어 = 보어" 성립 ) 형용사 보어는 주어의 상태를 서술하는 역할을 합니다. 

* 완전 자동사로 쓰이는 go, come, fall, run은 보어를 취하여 become의 의미로 쓰이기도 합니다.

 go mad : 미치다
 go bad  : 상하다
 run short : 부족해지다. 
 run dry  :  고갈 되다
 come true : 실현되다
 fall asleep : 잠들다





타동사는 동사의 행동 대상이 되는 목적어를 취해서 문장을 성립시키며, 목적어 없이는 문장이 성립되지 않습니다. 목적어는 명사 혹은 명사 상당어구( 동명사, 대명사, 명사구, 명사절 )를 취합니다.

 * 타동사의 기능을 하는 동사구

동사구는 동사와 전치사, 부사등으로 이루어 졌으며, 동사의 역할을 합니다. 이런 동사구는 목적어를 취하기 때문에 타동사의 기능을 한다고 볼 수 있습니다. 주의 하실 것은 동사구에서 하나의 요소라도 빠지면 문법적으로 틀리게 되므로 주의 하시기 바랍니다.
예) take care of ~   : 돌보다
     pay attention to ~ : ~에 주의를 기울이다


  * 자동사로 오인 할 수 있는 타동사

타동사 중에는 우리 말로 번역을 하면서 자동사처럼 느껴지는 동사가 있습니다. 많은 분들이 이런 타동사에 전치사를 붙이는 실수를 하시는데, 이런 타동사는 따로 암기를 해둘 필요가 있습니다.

marry : ~와 결혼하다 ( marry with (X))
   단, 수동태 일 때에는 be married to ~ 로 쓰임
enter : ~에 들어가다 ( enter into (X) : 착수하다, 시작하다 )
resemble : ~와 닯다 ( resemble with (X))
leave : ~ 를 떠나다 ( leave from(X))
reach : ~에 도달하다 ( reach to (X))
attend : ~에 출석하다 ( attend to/on (X))
   attend to  :  ~에 주목하다
   attend on : ~의 시중을 들다


 * 수여 동사로 착각 할 수 있는 타동사
마찬가지로 4형식의 수여동사로 착각 할 수 있는 타동사들도 있습니다. 우리말로 해석하면 『~해주다』로 해석되는 것들인데요. 이 들은 수여동사가 아니기 때문에 전치사를 써줘야 합니다.

explain [ suggest, introduce ] B to A : A에게 B를 설명[ 제의, 소개 ] 하다
provide / supply A with B : A에게 B를 공급하다. 
= provide / supply B to A
prevent / prohibit / keep / stop A from ~ing : A가 ~하는 것을 막다 / 방해하다
rob / deprive A of B : A에게서 B를 빼앗다
remind [ inform, accuse ] A of B : A에게 B를 상기시키다. [ 알리다, 비난하다 ]
blame [ thank, punish ] A for B : B때문에 A를 비난하다. [ 감사하다. 처벌하다 ]





 수여 동사는 두개의 목적어를 취합니다.  『~에게』로 해석되는 간접 목적어와 『~를』으로 해석되는 직적목적어를 취합니다. 이때, 간접 목적어로는 『~에게』에 해당 되는 사람이나 사물이 오고, 직접 목적어로는 『~를』으로 해석되는 사물이 오게 됩니다.

* 수여 동사의 3형식화

 수여 동사의 두 목적어 중 직접목적어는 동사의 행위에 대한 직접적인 대상을 나타냅니다. 그러므로 간접 목적어 보다는 좀 더 직접적인 관계가 있다고 할 수 있습니다. 이 때, 간접 목적어에 전치사를 붙여서 구조적으로 좀 더 안정적이라고 할 수 있는 3형식( S + V + O )의 문장으로 만들 수 있습니다.

예) He gave me a book → He gave a book to me



 * 3형식화가 안 되는 동사

 수여 동사는 아니지만 2개의 직접 목적어를 취하는 동사( envy, save, cost, forgive )가 있습니다. 이런 형식은 수여 동사로 착각하여 3형식으로 전환 하는 실수를 할 수 있는데, 3형식 전환을 할 수 없습니다.

예) The trip will cost you $2,000
    → The trip will cost $2,000 to you (X) : 여행이 cost의 주체가 되는 것은 이상하기 때문입니다.


 * 3형식화가 안 되는 동사

 수여 동사는 아니지만 2개의 직접 목적어를 취하는 동사( envy, save, cost, forgive )가 있습니다. 이런 형식은 수여 동사로 착각하여 3형식으로 전환 하는 실수를 할 수 있는데, 3형식 전환을 할 수 없습니다.

예) The trip will cost you $2,000
    → The trip will cost $2,000 to you (X) : 여행이 cost의 주체가 되는 것은 이상하기 때문입니다.




 불완전 타동사는 목적어와 보어를 동시에 취합니다. 이 때, 보어로 명사가 오면 목적어와 목적보어는 동격의 관계를 형성하고, 형용사가 오면 보어는 목적어의 상태를 서술하게 됩니다. 특히 5형식에서 주목해야 할 형식은 바로 사역동사와 지각 동사입니다. 사역 동사와 지각 동사가 문장에서 쓰일 때, 목적어와 목적 보어의 관계가 능동이면 동사의 원형인 원형 부정사가 쓰이게 됩니다. ( 이 때, 동작을 강조하려면 진행형을 쓰기도 합니다. )

+ Recent posts