2011. 7. 21. 19:12



01. TCP 소켓의 연결설정 과정인 Three-way handshaking에 대해서 설명해 보자. 특히 총 3회의 데이터 송수신이 이뤄지는데, 각각의 데이터 송수신 과정에서 주고 받는 데이터에 포함된 내용이 무엇인지 설명해보자.


TCP의 내부 동작 원리 1: 상대 소켓과의 연결
TCP 소켓은 연결설정 과정에서 총 세 번의 대화를 주고 받는데, 이를 가리켜 Three-way handshaking 이라 한다.

[Three-way handshaking과정]


 

 

[SYN] SEQ : 8000, ACK : -
처음 연결요청에 사용되는 메시지 이기에 이 메시지를 가리켜 ‘SYN’이라 한다
.
데이터 송수신에 앞서 전송되는 동기화 메시지

[SYN + ACK] SEQ : 15000, ACK : 8001
처음 client가 전송한 패킷에 대한 응답 메시지(ACK 8001)과 함께 호스트 B의 데이터 전송을 위한 동기화 메시지(SEQ 15000)을 함께 묶어서 보낸다. 이런 유형의 메시지를 SYN+ACK라 한다.

[ACK] SEQ : 8000 ACK : 15001
15001 패킷을 전송하길 요청.

 


02. TCP는 데이터의 전송을 보장하는 프로토콜이다. 그러나 인터넷을 통해서 전송되는 데이터는 소멸될 수 있다. 그렇다면 TCP는 어떠한 원리로 중간에 소멸되는 데이터의 전송까지 보장을 하는 것인지 ACK와 SEQ를 대상으로 설명해 보자.

ACK
번호 -> SEQ 번호 A+ 전송된 바이트 크기 + 1
!
중간에 패킷이 소멸되는 경우
= > 데이터 손실에 대한 재전송을 위해서, TCP 소켓은 ACK 응답을 요구하는 패킷 전송 시에 타이머를 동작시킨다. 그리하여 해당 타이머가 Time-Out 되었을 때 패킷을 재전송한다.



03. TCP 소켓을 기반으로 write함수와 read 함수가 호출되었을 때의 데이터 이동을 입력버퍼와 출력버퍼의 상태와 더불어 설명해 보자.

TCP 소켓에 존재하는 입출력 버퍼
TCP 소켓의 데이터 송수신에는 경계가 없다. , 서버가 한번의 write 함수 호출을 통해서 40바이트를 전송해도 클라이언트는 네 번의 read 함수 호출을 통해서 10바이트씩 데이터를 수신하는 것이 가능하다. 이러한 것이 가능하게 해 주는 것이 바로 버퍼이다
.
write 함수가 호출되는 순간 데이터는 출력버퍼로 이동을 하고, read 함수가 호출되는 순간 입력버퍼에 저장된 데이터를 읽어 들이게 된다
.

 

입출력 버퍼의 특성

Posted by Triany
2011. 7. 21. 18:01
01. TCP/IP 프로토콜 스택을 4개의 계층으로 구분해 보자. 그리고 TCP 소켓이 거치는 계층구조와 UDP 소켓이 거치는 계층구조의 차이점을 설명해보자.

                                        [TCP/IP 프로토콜 스택 _ 4계층 표현]



[TCP와 UDP 게층 ] 전송계층(Transport Layer)이라고도 함. IP계층에서 알려준 경로정보를 바탕으로 데이터의 실제 송.수신을 담당. IP의 상위계층에서 호스트 대 호스트의 데이터 송수신 방식을 약속.

TCP 역할 : TCP는 신뢰성있는 데이터의 전송을 담당. TCP가 데이터를 보낼때 기반이 되는 프로토콜이 IP이다. IP는 오로지 하나의 데이터 패킷(데이터 전송의 기본단위)이 전송되는 과정에만 중심을 두고 설계되었다. 이에 데이터를 주고받는 과정에서 TCP는 그 확인절차를 걸쳐서 신뢰성 없는 IP에 신뢰성을 부여한 프로토콜





02. TCP/IP 프로토콜 스택 중에서 LINK 계층과 IP 계층이 담당하는 역할이 무엇인지 설명해보자. 그리고 이 둘의 관계도 함께 설명해보자.

LINK 계층 : 물리적인 영역의 표준화에 대한 결과. 즉, 가장 기본이 되는 영역으로 LAN, WAN, MAN과 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역.
IP 계층 : 데이터 전송을 위한 경로 검색. 이 계층에서 사용하는 프로토콜이 IP



03. TCP/IP 프로토콜 스택을 4개의 계층(또는 7개의 계층)으로 나누는 이유는 무엇인가? 이를 개방형 시스템에 대한 설명과 함께 답해보자.
프로토콜을 계층화하여 얻게되는 장점이, 표준화 작업을 통한 '개방형 시스템(Open System)'의 설계.
TCP/IP 프로토콜 스택역시 개방형 시스템의 하나로, 라우터, 및 랜 카드 등이 제조사들이 LINK 계층의 표준에 따라 제조하기에, 어느 제조사의 제품이든 쉽게 교체가능(인터페이스, 컴포넌트 화 되어있는. 규격이 맞춰져 있는 장점.)


04. 클라이언트는 connect 함수호출을 통해서 서버로의 연결을 요청한다. 그렇다면 클라이언트는 서버가 어떠한 함수를 호출한 이후부터 connect 함수를 호출할 수 있는가?
listen(연경요청 대기상태) 함수가 호출되어야 클라이언트는 연결요청을 위하여 connect 함수를 호출할 수 있다.

05. 연결요청 대기 큐라는 것이 생성되는 순간이 언제이며, 이것이 어떠한 역할을 하는지 설명해보자. 그리고 accept 함수와의 관계도 함께 설명해보자.
 #include <sys/type.h>

int listen(int sock, int backlog);   //성공시 0, 실패시 -1반환
○sock : 연결요청 대기상태에 두고자 하는 소켓의 파일 디스크립터 전달, 이 함수의 인자로 전달된 디스크립터의 소켓이 서버 소켓(리스닝 소켓)이 된다.
○backlog : 연결요청 대기 큐(Queue)의 크기정보 전달, 5가 전달되면 큐의 크기가 5가 되어 클라이언트의 연결요청을 5개까지 대기시킬 수 있다.

listen 함수가 호출되면, 문지기의 역할을 하는 서버소켓이 만들어 지고, listen함수의 두번째 인자로 전달되는 정수의 크기에 해당하는 대기실이 만들어진다. 이 대기실을 가리켜 '연결 요청 대기 큐'라고 하며, 서버 소켓과 연결요청 대기 큐가 완전히 준비되어서 클라이언트의 연결요청을 받아들일 수 있는 상태를 가리켜 '연결요청 대기 상태'라 한다.


06. 클라이언트 프로그램에서 소켓에 주소정보를 할당하는 bind 함수호출이 불필요한 이유는 무엇인가? 그리고 bind함수를 호출하지 않았을 경우, 언제 어떠한 방식으로 IP주소와 PORT번호가 할당되는가?
네트워크를 통해서 데이터를 송수신하려면 IP와 PORT가 반드시 할당되어야 한다.
언제? connect 함수가 호출될 때,
어디서? 운영체제에서, 보다 정확히 표현하면 커널에서
어떻게? IP는 컴퓨터(호스트)에 할당된 IP로, PORT는 임의로 선택해서!!
: 즉, bind함수를 통하여 소켓에 IP와 PORT를 직접 할당하지 않아도 connect 함수 호출 시 자동으로 소켓에 IP와 PORT 가 할당된다. 따라서 클라이언트 프로그램을 구현할 때에는 bind함수를 명시적으로 호출할 필요가 없다.


07. Capter 01에서 구현한 예제 hello_server.c와 hello_server_win.c를 lterative 모델로 변경하고 제대로 변경이 되었는지 클라이언트와 함께 테스트해보자.
Iterative 서버 : 계속하여 들어오는 클라이언트의 연결 요청을 수락하기 위한 서버.
               ( 현 단계에서는 fork. 즉 프로세스와 스레드에 대한 고려 없이 그저 반복문으로 구현한다.)
Posted by Triany
2011. 7. 21. 17:05
01. IP주소 체계인 IPv4와 IPv6의 차이점은 무엇인가? 그리고 IPv6의 등장 배경은 어떻게 되는가?
IPv4(Internet Protocol version 4) 4바이트 주소체계
IPv6(Internet Protocol version 6) 16바이트 주소체계

IPv6는 2010년을 전후로 IP주소가 모두 고갈될 것으로 염려하여 만들어진 표준

02. 회사의 로컬 네트워크에 연결되어 있는 개인 컴퓨터에 데이터가 전송되는 과정을, IPv4의 네트워크 ID와 호스트 ID, 그리고 라우터의 관계를 기준으로 설명하여라.
네트워크 주소(네트워크 ID)만을 참조하여 라우터로 전송. 해당 네트워크(네트워크를 구성하는 라우터는)는 전송된 데이터의 호스트 주소(호스트ID)를 참조하여 개인 컴퓨터로ㅗ 데이터를 전송해 준다.



03. 소켓의 주소는 IP와 PORT 번호 두 가지로 구성된다. 그렇다면 IP가 필요한 이유는 무엇이고, PORT번호가 필요한 이유는 또  무엇인가? 다시 말해서, IP를 통해서 구분되는 대상은 무엇익고, PORT번호를 통해서 구분되는 대상은 또 무엇인가?
IP - 개인 컴퓨터에는 NIC(네트워크 인터페이스 카드)이라 불리는 데이터 송수신 장치가 하나씩 달려있는데, IP는 데이터를 NIC를 통해 컴퓨터 내부로 전송하는데 사용된다.
PORT번호 - 소켓의 구분에 활용됨


04.  IP주소의 클래스를 결정하는 방법을 설명하고, 이 근거로 다음 IP주소들이 속하는 클래스를 판단해 보자.
클래스 A의 첫 번째 바이트 범위     0 이상 127 이하
클래스 B의 첫 번째 바이트 범위  128 이상 191 이하
클래스 C의 첫 번째 바이트 범위  192 이상 223 이하

211.121.212.102 ( 클래스 C )
120.101.122.89  ( 클래스 A )
129.78.102.211  ( 클래스 B )



05. 컴퓨터는 라우터 또는 스위치라 불리는 물리적인 장치를 통해서 인터넷과 연결되다. 그렇다면 라우터  또는 스위치의 역할이 무엇인지 설명해 보자.
네트워크를 구성하려면 외부로부터 수신된 데이터를 호스트에 전달하고, 호스트가 전달하는 데이터를 외부로 송수신 해주는 물리적 장치가 필요한데, 이를 가리켜 라우터 또는 스위치라 한다.(라우터보다 기능적으로 작은 것을 가리켜 스위치라 부르는데, 사실상 이 둘은 같은 의미로 사용이 된다.)

06. '잘 알려진 PORT(Well-kown PORT)'는 무엇이며, 그 값의 범위는 어떻게 되는가? 그리고 잘 알려진 PORT중에서 대표적인 HTTP와 FTP의 PORT번호가 어떻게 되는지 조사해 보자.
0~ 1023 까지 Well-known PORT라 한다.
HTTP : 80
20, 21(FTP data, control) 
23(Telnet)


07. 소켓에 주소를 할당하는 bind 함수의 프로토타입은 다음과 같다.
  int bind(int sockfd, struct sockaddr * my addr, socklen_t addrlen);
 
 그런데 호출은 다음의 형태로 이뤄진다. 
 bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr);

 여기서 serv_addr은 구조체 sockaddr_in 변수이다. 그렇다면 bind함수의 프로토타입과 달리 구조체 sockaddr_in의 변수를 사용하는 이유는 무엇인지 간단히 설명해 보자.



08. 빅 엔디안과 리틀 엔디안에 대해서 설명하고, 네트워크 바이트 순서가 무엇인지 그리고 이것이 필요한 이유는 무엇인지 설명해 보자. 

09. 빅 엔디안을 사용하는 컴퓨터에서 4바이트 정수 12를 리틀 엔디안을 사용하는 컴퓨터에게 전송하려 한다. 이때 데이터의 전송과정에서 발생하는 엔디안의 변환과정을 설명해 보자.


10. '루프백 주소(loopback address)'는 어떻게 표현되며, 의미하는 바가 무엇인가? 그리고 루프백 주소를 대상으로 데이터를 전송하면 어떠한 일이 벌어지는가? 
 
 
Posted by Triany
2011. 7. 21. 17:05
01. 프로토콜이란 무엇을 의미하는가? 그리고 데이터 송수신에 있어서 프로토콜을 상의한다는 것은 어떠한 의미가 있는가?
:컴퓨터 상호간의 대화에 필요한 통신규약. 즉 약속


02. 연결지향형 소켓인 TCP 소켓의 전송 특성 세가지를 나열하여라
-중간에 데이터가 소멸되지 않고 목적지로 전송
-전송 순서대로 데이터가 수신
-전송되는 데이터의 경계(Boundary)가 존재하지 않는다.
  => "데이터를 전송하는 컴퓨터가 세 번의 write 함수호출을 통해서 총 100바이트를 전송하였다. 그런데 데이터를 수신하는 컴퓨터는 한 번의 read 함수호출을 통해서 100바이트를 전부 수신하였다.
"신뢰성 있는 순차적인 바이트 기반의 연결지향 데이터 전송 방식의 소켓"
int tcp_socket=socket(PF_INET, SOCk_STREAM, IPPROTO_TCP);


03. 비연결지향형 소켓의 특성 서술.
- 전송된 순서에 상관없이 가장 빠른 전송을 지향
- 전송된 데이터는 손실의 우려가 있고, 파손의 우려가 있다.
- 전송되는 데이터의 경계(Boundary)가 존재한다.
- 한번에 전송할 수 있는 데이터의 크기가 제한된다.
"신뢰성과 순차적 데이터 전송을 보장하지 않는, 고속의 데이터 전송을 목적으로 하는 소켓"
int udp_socket=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);


04. 다음 유형의 데이터 송수신에 가장 적합한 타입의 소켓이 무엇인지 결정, 그렇게 결정을 하게 된 이유를 설명
 a. 서태지와 아이들의 실시간 라이브 방송 멀티미디어 데이터(UDP소켓) _ 약간의 데이터 손상보다 빠른 속도를 우선시 하므로
 b. 철수가 압축한 텍스트 파일의 전송 ( TCP소켓 ) - 압축파일은 조금이라도 데이터 손상시 압축해제시 에러 발생
 c. 인터넷 뱅킹을 이용하는 고객과 은행 사이에서의 데이터 송수신 ( TCP소켓 ) 데이터가 손실되면 안됨

05. 데이터의 경계(Boundary)가 존재하지 않는 소켓은 어떠한 타입의 소켓인가? 그리고 이러한 소켓은 데이터를 수신할 때 무엇을 주의해야 하는지 서술해보자.
TCP소켓 _ read함수와 write함수 호출 횟수에 큰 의미 없음 _ 단 read 함수 호출로 읽혀지는 데이터의 양보다 많은 데이터가 수신되면 버퍼가 꽉 찰 수 있다.


06. tcp_server.c와 tcp_client.c에서는 서버가 한번즤 write함수 호출을 통해서 전송한 문자열을 여러 차례의 read 함수호출을 통해서 읽어 들였다. 그럼 이번에는 서버가 여러 차례의 write함수 호출을 통해서(횟수는 여러분이 결정!) 전송한 문자열을 클라이언트에서 한번의 read 함수 호출을 통해서 읽어 들이는 형태로 예제를 변경해 보자. 단, 이를 위해서 클라이언트는 read 함수의 호출 시기를 다소 늦출 필요가 있다. 서버가 데이터를 모두 전송할 때까지 기다려야 하기 때문이다. 그럼 이를 위해서 리눅스와 윈도우 양쪽 모두에서 다음의 유형의 문장을 이용해서 read또는 recv함수의 호출시기를 늦추기로 하자.
  for(i=0; i<3000; i++)
     printf("Wait time %d \n", i);

 디렇게 CPU에게 불필요한 일을 시켜가면서 실행의 흐름을 지연시키는 것을 가리켜 'Busy Waiting'이라 하는데, 이를 적절히 활용하면 우리에게 필요한 만큼 함수의 호출시기를 늦출 수 있다.

Posted by Triany
2011. 7. 16. 00:41
굉장히 귀여운 효과음과 함께 Sorting 알고리즘을 설명한 자료^^



[insertion sort]
- linear insertion
- binary insertion

[Shell sort]

Insertion(linear, binary) VS Shell

Comparisons
Linear > (Binary = Shell) //거의 유사한 결과

Movements( linear의 이동이 가장 많음 )
linear > binary > shell이

Time ( shell이 가장 빠름 )
linear > binary > shell







[Exchange Sorts]
- Bubble sort
- Shaker sort
- Quick sort

Bubble vs Shaker vs Quick

Comparisons
Bubble sort > Shaker sort >Quick sort

Movements
(Bubble sort = Shaker sort) >Quick sort

Time
(Bubble sort >= Shaker sort) >Quick sort







[Selection Sorts]
- Straight Selection
- Tree Selection

[Heap sort]

Straight Selection vs Tree Selection vs Heap sort

 Comparisons
Straight Selection > Tree Selection > Heap sort

Movements
Straight Selection = Tree Selection > Heap sort

Time
Straight Selection >> Heap sort > Tree Selection








※주의... 저 동영상을 내리 4개 들으면... 저 효과음이.. 듣기 힘들어 질 수도 있음...ㅠㅠ
             귀에서 마구 울림......(이어폰을 끼고 들음 특히..) 이점 주의 바람.
             3번째 동영상 끝부분부터~ 4번째 동영상까지는 앞 동영상 빨리감기임^^

'자료구조' 카테고리의 다른 글

레드 블랙 트리  (0) 2011.05.04
Skip list _ wikipedia  (0) 2011.03.09
Posted by Triany
2011. 7. 13. 00:34
5초간 첫 화면 액티비티를 지속하고, 다음화면으로 자동적으로 넘어가기 위한 방법이다.
2가지 방법이 있다.
첫번째는, 핸들러를 쓰는 방법.
 public class Page1 extends Activity {
 ImageView imgBtn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page1main);
        imgBtn = (ImageView)findViewById(R.id.page1_img);
        imgBtn.setOnClickListener(onClickImgView);
        mHandler.sendEmptyMessageDelayed(0, 5000);  
    }
   
   Handler mHandler = new Handler(){
     public void handleMessage(Message msg){
      
   //두번째 액티비티를 실행하기 위한 인텐트
   Intent intent = new Intent(Page1.this, First.class);
         startActivity(intent); //두번째 액티비티를 실행합니다.
         finish();
     }
    };
 }


2) 함수.. Timer사용.
 
public class Page1 extends Activity {
 ImageView imgBtn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page1main);
        imgBtn = (ImageView)findViewById(R.id.page1_img);
        imgBtn.setOnClickListener(onClickImgView);
        goMap();
     }
   
    public void goMap() {
  TimerTask goGeo = new TimerTask() {   
  @Override
   public void run() {
    Intent intent = new Intent(Page1.this, First.class);
    startActivity(intent); //두번째 액티비티를 실행합니다.
    finish();    
   }
  };
  Timer timer = new Timer();
  timer.schedule(goGeo, 5000);
 }
    
 }


Posted by Triany
2011. 5. 24. 23:20
유닉스가 특별할 수 밖에 없는 이유는 자신의 기본적인 목표를 실현하기 위해 애쓰고 있기 때문이다. 그것은 간결하고 아름다우며, '예외'란 것을 가능한 최소화하는 운영체제이다. 유닉스는 프로세스를 '어떤 것을 하는 어떤것'으로 규정한다. 여기 간단한 예가 있다. 유닉스에서 운영체제에 명령을 내리기 위해 어떤 명령어를 입력하는 것을 의미하는 셸(shell) 명령은 DOS와는 달리 운영체제 속에 내장되어 있지 않다. 그것은 키보드로부터 읽은 것을 모니터에 기록하는 일을 할 뿐이다. 유닉스에서 무엇인가를 하는 모든 것은 '프로세스'이다.
...(중략)
반면 유닉스는 '작은 것이 아름답다'는 철학을 지니고 있다. 유닉스는 간단한 기본 구성요소들을 필요에 맞게 결합함으로써 무한히 복잡한 것을 구축할 수 있는 운영체제인 것이다.
p.95~96

운영체제는 당신이 만들어 낸 세상의 헌법이지만, 그 외의 다른 모든 프로그램들은 관습법일 뿐이다.
                                 - p.123


아름다운 방법으로 문제를 풀 수 있는 방법을 몰라 3일동안 머리를 벽에 부딪혀가며 고민하는 게 얼마나 매력적인 일인지 설명하는 것은 여전히 어려운 일이다. 하지만 당신이 한번 그런 과정을 거쳐 문제를 풀어, 더 나은 방법을 발견하고 나면, 당신은 그것이 세상에서 가장 근사한 경험이라는 것을 알게 될 것이다.
                                                - p. 125

리눅스는 훨씬 더 작고, 훨씬 더 단순한 프로그램에서 시작했다. 그것은 모듈성을 강조하지 않았다. 그러므로 미닉스를 이용했을 때보다 훨씬 직접적으로 많은 것을 할 수 있었다.
                                             - p. 157
Posted by Triany
2011. 5. 10. 23:31

영어를 잘하기 위한 영어소설 100선

안정효 선생님의 책 “영어 길들이기 영작편” 에 보면 선생님은 대략 이런 요지의 말씀을 하셨다.

오늘날, 무슨 무슨 영어 공부법이 난무 하고 있다. 그리고 이런 책들이 많이 읽히고 있다고 한다. 그러나. 백날 한글로 된 영어 공부에 관한 책을 읽은들 영어는 한 톨도 늘지 않는다. 영어 공부법을 연구할 시간에 차라리 영어 소설을 읽자. 직접 영어에 부딪히지 않고는 영어가 어떤것인지 알 수 없다. 100권의 소설이면 영어에 대한 감각이 머리속에 잡힌다. 일주일에 한권이면 2년, 일주일에 2권이면 1년이면 영어에 대한 자신감이 생길 것이다.

사실, 안정효선생님은 하루1권씩 해서 3개월 독파를 말씀하셨는데 그건 좀 무리라고 본다. 대학생이라면 휴학하고 한번 도전해 볼만은 하겠다.. ^^

< 번호. 작가 - 작품 >순이며 작가가 동일할 때는 두번 표기하지 않고 작품만 표시했다.

  1. James Agee - A Death in the Family
  2. Richard Bach - Jonathan Living stone Seagull
  3. - The Bridge Across Forever
  4. Pearl S. Buck - The Good Earth
  5. - The Living Reed
  6. - The Hidden Flower
  7. Eugene Burdick - The 480
  8. Erskine Coldwell - The Lost Night of Summer
  9. - place called Estherville
  10. - Men adn Women
  11. - Claudelle Inglish
  12. - Certain Women
  13. - Gretta
  14. John Cheever - The Stories of John Cheever
  15. John Dos Passos - Streets of Night
  16. - U.S.A
  17. - 1919, - The 42nd Parallel
  18. - The Big Money
  19. Michael Crichton - The Andromeda strain
  20. Robert Crichton - The street of Santa Vittoria
  21. James T. Farewell - The days of Anger , - The Studs Lonigam Story
  22. - Young Lonigam
  23. - The Young Manhood of Studs Lonigam
  24. - Judgement day
  25. F. Scott Fitgerald - the Great Gatsby
  26. Kahlil Gibram - Spiritual Saying of Kahlil Gibram
  27. - Secrets of the heart
  28. William Golding - Lord of the Files
  29. Graham Greene - The Power and Glory
  30. - A burnt-out case
  31. Alex Haley - Roots
  32. Arthur Hailey - Hotel
  33. - Airport
  34. Ernest Heming Way - A Farewell to Arms
  35. - For Whom the Bell Tolls
  36. - a Movable Feast
  37. - The old man and the Sea
  38. - By-line
  39. John hersey - A single Pebble
  40. - A Bell for Adano
  41. James Joyce - A portrait of the Artist as a Young Man
  42. Nikos Kazantzakis - Report to Greco
  43. Milan Kudera - Life is Elsewhere
  44. Mary Lutyens , ed - The penguin Krishnamurti reader I,
  45. - The penguin Krishnamurti reader II,
  46. Harper Lee - To kill a Mocking bird
  47. Sinclair Lewis - Elmer Gantry
  48. Anne Morrow Lindbergh - Gift from the sea
  49. John P. Marguand - H. M. Pulham Esquire
  50. Gabriel Garcia Marquez - One hundred Years of Solitude
  51. Carson McCullers - Reflctions in a Golden Eye
  52. Colleen McCullough - The Thorn Birds
  53. Yukio Mishima - Five no plays
  54. Margaret Mitchell - Gone with the wind
  55. Alberto Moravia - Two Adolesecnts
  56. - Agonisto & - Luca
  57. Iris Murdoch - The sea, the sea
  58. John O’hara - Appointment in Samarra
  59. - Butterfield 8
  60. - A Rage to Live
  61. - Ten North Frederick
  62. - From the Terrace
  63. - Elizabeth Appleton
  64. - The Ewings
  65. - Big laugh
  66. - Assembly
  67. C Northcote Parkinson - East and West
  68. Boris PAsternak - Doctor Zhivago
  69. - Safe Conduct
  70. Hugh Partner - Notes to myself
  71. Erich Maria Remarque - Three comrades
  72. - Spark of life
  73. - All Quiet on the Western Front
  74. - The arch of Triumph
  75. - The Night in Lisbon
  76. - Heavenn Has No Favorites
  77. Ayn Rand - The Fountainhead
  78. Antoine de st - Exupery , - Night Flight
  79. - The Little Prince
  80. William Saroym - Chance Meetings
  81. - The human Comedy
  82. - The Bicycle Riderin Beverly Hills
  83. Irwin Show - The young Lions
  84. - Rich Man Poor Man
  85. Alan Sillitoe - The Loneliness of the Long - Distance Runner
  86. John Steinbeck - America and Americans
  87. - Burning Bright
  88. - Cannery Row
  89. - Cup of Gold
  90. - East of Eden
  91. - The Grapes of Wrath
  92. - The Moon is Down
  93. - of Mice and Men
  94. - The Perl
  95. - The red pony
  96. - Tortilla Flat
  97. - Travels’ with Charley
  98. - The Winter of Our Discontent
  99. William Styron - Lie Down on Darkness
  100. James Thurber - Fables for our Times

58번의 John O’hara와 86번의 John Steinbeck의 책은 모두 읽으면 좋다. O’hara는 짧은 대화체로 되어있어서 소설을 부담없이 읽을 수 있고 Steinbeck의 소설은 정말 주옥같다. 노벨문학상 받을만 하다.

100권을 다 읽기가 부담스러운 분은 파란색체로 되어 있는 책부터 시작해도 좋다. 볼드체로 된 책은 모두 20권이다.

Posted by Triany
2011. 5. 6. 12:08
 

[로마 연합]
   제 2차 포에니 전쟁의 현자유 증인이기도 한 픽토르는 '로마 연합'에 가맹한 동맹국이나  각 지방에서 동원할 수 있는 병력을 열거했는데, 이 기록을 보면 로마인은 패배자조차 자기들한테 동화시켰다고 말한 플루타르코스나 '로마 연합'을 정치 건축의 걸작이라고 평한 토인비의 주장이 전적으로 옳다는 것을 알 수 있다. 후세의 우리가 기원전 4세기 초에 로마에 패한 뒤 소멸해버린 줄 알았던 에트루리아 민족은 기원전 3세기 말의 이 시점에서도 5만 명의 보병과 4천 명의 기병을 동원할 수 있는 '로마 연합'의 훌륭한 일원이었다. 또한 기원전 4세기부터 기원전 3세기에 걸쳐 40년동안이나 로마와 사투를 거듭한 끝에 패배한 삼니움족도 7만 명의 보병과 7천 명의 기병을 동원할 수 있는 '로마 연합'의 동맹자였다.
   로마는 이 패배자들을 피지배민족이라는 소극적인 존재가 아니라 '소키'-이 말은 현대 이탈리아어에 공동 경영자를 뜻하는 낱말로 남아있다.- 라는 적극적인 존재로 대우했다. 그렇기 때문에 가도를 비롯한 로마의 '사회간접자본'설비에서도 동등한 대우를 받았다. 그리고 이것이 제 1차 포에니 전쟁에서도 승리한 요인의 하나가 되었지만, 한니발과 대결하는 제 2차 포에니 전쟁에서도 로마가 가진 진정한 힘이 되었다.


[한니발과 스키피오 episode]
    자마 전투가 있고 몇 년 뒤에 한니발과 스키피오가 우연히 로도스 섬에서 만나 나누었다는 대화의 발췌문이다. 12세 연상인 한니발에게 스키피오가 정중하게 물었다.
 "우리 시대에 가장 뛰어난 장수는 누구라고 생각하십니까?"
   한니발은 즉석에서 대답했다.
   "마케도니아의 왕 알렉산드로스요. 페르시아의 대군을 소규모 군대로 무찔렀을 뿐만 아니라, 인간이 생각할 수 있는 경계를 훨씬 넘어선 지방까지 정복한 업적은 실로 위대하다고밖에는 말할 수 없소."
   스키피오가 다시 물었다.
   "그럼 두 째로 뛰어난 장수는 누굽니까?"
   한니발은 이번에도 망설이지 않고 대답했다.
   "에페이로스의 왕 피로스요. 그는 우선 병법의 대가요. 그리고 숙영지 건설의 중요성을 처음으로 인식한 사람이기도 하오."
   스키피오는 다시 질문을 계속했다.
   "그렇다면 세번째로 뛰어난 장수는 누구라고 생각하십니까?"
   카프타고의 명장은 이 질문에도 주저없이 대답했다.
   "그건 물론 나 자신이오."
   자마 전투를 승리로 이끈 업적으로 '아프리카누스'라는 존칭까지 받은 스키피오 아프리카누스는 이 말에 저도 모르게 미소를 지으며 말했다.
   "만약 장군께서 자마에서 나한테 이겼다면?"
   한니발은 당연하다는 듯이 대답했다.
   "그렇다면 내 순위는 피로스를 앞지르고 알렉산드로스도 앞질러 첫번째가 되었을 거요."
  
 
   ....
   고대 로마에서도, 루키아노스 단 한 사람을 제외하고는 모든 로마인이 구국의 영웅인 스키피오보다 적인 한니발이 더 뛰어난 장군이라는 데 의견이 일치해 있었다. 한니발의 불행은 우수한 제자(스키피오)가 적군 쪽에서 나와버렸다는 점이다.
   그리고 한니발은 전략가로서는 큰 잘못을 저질렀다. '로마 연합'을 쉽게 해체할 수 있으리라고 생각한 점이다. 사회 계급이 고정되어 있는 카르타고 출신의 한니발은 이기면 아량을 베풀어 패자까지도 협력자로 만들어 버리는 로마인의 방식을 이해하기 어려웠을 것이다.

     

 .......(3차 포에니 전쟁 발발시 그리스 침략)
 기원전 146년은 로마가 '온건한 제국주의'에서 '엄격한 제국주의'로 방침을 바꾼 해로 사람들의 기억에 남게 된다. 같은해에 카르타고가 마지막 순간을 맞이하게 된 것도 불행한 우연이 초래한 결과였다.
Posted by Triany
2011. 5. 5. 21:49

[유쾌한 상상. 유쾌한 가정] 그리스의 위대한 왕. 알렉산드로스 대왕이 동방으로 쳐들어가지 않고 서쪽으로 향했다면 어떻게 되었을까?
 고대에도 역사를 기술할 때 '만약'이라는 가정은 금기로 되어 있었다. 실제로 일어난 일이나 자기가 직접 들은 이야기를 서술하는 것이 역사이고, '만약'이라는 가정을 쓰는 것은 '히스토리아'에서는 올바르지 않은 길이라고 여겼다. 그래서 고대 역사가들 가운데 이런 종류의 서술을 한 사람은 아무도 없지만, 오직 리비우스만은 '유쾌한 가정'이라고 전제해놓고 여기에 대해 언급하고 있는 것이다. "만약에 로마가 알렉산드로스 대왕과 맞붙었다면, 어찌 되었을까?" 하고.
 리비우스가 내린 결론은 이렇다.
 "알렉산드로스가 상대였다 해도 최종적으로는 로마의 승리로 끝났을 것이다. 


            첫째, 리비우스는 우선 알렉산드로스가 그렇게 높은 평가를 받은 것은 아직 운명이 바뀌기 전인 젊은 나이에 요절했기 때문이라고 말한다.(∵기록에 따르면 애완용 원숭이 두마리에게 물려 생긴 패혈증으로 죽었다고 한다.)  
 알렉산드로스의 군대에는 지휘관이 대왕 한 사람이었던 반면, 같은 시기의 로마군에는 적어도 11명의 뛰어난 지휘관이 있었다. 로마에는 지휘관 자리가 비어도 대신할 사람이 항상 있었다는 뜻이다.

   둘째, 로마군의 엄정한 규율은 알렉산드로스 군대의 규율과 비교해도 전혀 손색이 없었고, 400
년의 유구한 전통을 가진 로마군 병사들의 사기와 10여 년 만에 양성된 마케도니아군 병사들의 사기는 전통으로 보아도 비교가 되지 않는다. 지휘관이 사기를 북돋울 수도 있지만, 병사 개개인의 가슴 속에 축적된 자신감이야말로 사기에 큰 영향을 주기 때문일 것이다.

            셋째, 알렉산드로스 개인의 전략과 전술적 재능이 타의 추종을 불허했다는 것은 인정하지만, 마군은 다리우스 왕의 병사들이나 인도 병사들과는 다르다. 로마인은 페르시아인이나 인도인처럼 사치에 익숙지 않았다. 
 실질 강건을 당연하게 여겼던 당시의 로마 남자들과 싸웟다면 아무리 알렉산드로 대왕이라 해도 유약한 민족과 싸울 때처럼 승전에 승전을 거듭할 수는 없었을 것이다.

            넷째, 로마와 알렉산드로스의 전쟁은 조직과 개인의 대결이고, 알렉산드로스에게 남아 있었던 10여년 기간으로는 아무리 그의 재능이 뛰어났다 해도 효율적으로 기능을 발휘하는 조직에 최종적인 승리를 거둘수는 없었으리라는 것이 리비우스가 든 네번째 이유다.
리비우스는 "전사 개개인은 각자의 운명에 따라 살거나 죽는다. 하지만 로마에서는 한 전사의 죽음이 당장 국가적인 손실과 결부되지 않는다."고 말했다.

          다섯번째 이유는, 마케도니아군과 로마군의 보병군단이 각각 서로 다른 성질을 가지고 있다는 점이다. 마케도니아의 중무장 보병군단은 한 덩어리가 된 공격에 강하고 방어에도 유리하지만 중대의 연합체인 로마의 중무장 보병군단은 기동성이 뛰어나고 전술 전환에 즉각 응할 수 있는 유연성을 가지고 있었다는 것이다.
     
         여섯번째 이유는, 적지에서 싸우는 알렉산드로스에 비해 자국 영토안에서 싸울 수 있는 로마군이 유리하다는 것이다. 특히 로마는 '로마 연합'에 가입한 식민지와 동맹국으로 둘러싸여 있다. 이들은 로마와 긴민한 관계로 맺어져 있어서, 아무리 알렉산드로스 대왕이라 해도 이 촘촘한 그물을 간단히 돌파할 수는 없었을 것이다.


        리비우스가 마지막으로 든 이유는 "알렉산드로스에게는 전투에 패하는 것이 곧 전쟁에 패하는 것으로 이어질 수밖에 없었다. 반면에 로마군의 전통은 전투의 패배가 전쟁의 패배로 이어지지 않는다는 것이 특징이었다."고 말한다.

                       
-[로마인 이야기 1권. 로마는 하루아침에 이루어지지 않았다 中에서..]p.234~236

Posted by Triany