Python에서는 ++ 나 -- 와 같은 증감 연산자가 없다. 
만일 아래와 같이 int 형 변수에 ++ 를 사용하게 되면 증감연산자로 작용하지 않고 아무 의미 없이 사용된다. 

a = 1
++a
print (a)
결과는 1 임

"파이썬을 이용한 시스템 트레이딩" (https://wikidocs.net/book/110) 문서를 따라하던 중에 약간의 오류가 발생하였다.

확인해 보니 , 해당 자료는 PyQt4 기준인데, 내 PC의 Anaconda는 PyQt5 가 인스톨되어 있었다. 
PyQt5에는 이벤트 처리 시 connect 함수가 다르게 호출되어야 한다. 

PyQt4 에서는 QMainWindow 를 상속받아서 self.connect 함수의 인자에 이벤트를 발생 시킨 객체명, 발생 이벤트명, 이벤트 처리기에서 수행 함수명을 기재한다.  self.connect(self.pushButton, SIGNAL("clicked()"),self.btn_clicked) 와 같이 호출한다. 
PyQt5 에서는 객체의 이벤트에서 connect 함수를 호출하고 인자에 이벤트 처리기에서 수행하는 함수를 기재한다. 
self.pushButton.clicked.connect(self.btn_clicked) 와 같이 호출한다. 

아래는 PyQt4 의 예제임. 
import sys

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import uic


form_class = uic.loadUiType("main_window.ui")[0]

class MyWindow(QMainWindow , form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        #pushButton은 이벤트를 발생시킨 QPushButton 객체명,
        #SIGNAL("clicked")는 QPushbutton의 클릭 함수,
        #self.btn_clicked 는 QPushbutton 클릭시 Event 처리기에서 수행하는 함수
        self.connect(self.pushButton, SIGNAL("clicked()"),self.btn_clicked)

    def btn_clicked(self):
        QMessageBox.about(self,"message","clicked")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()


아래는 PyQt5 의 예제임. 
import sys

from PyQt5.QtCore import *
from PyQt5.QtGui import *
import signal
from PyQt5.QtWidgets import *
from PyQt5 import uic


form_class = uic.loadUiType("main_window.ui")[0]

class MyWindow(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        #객체의 이벤트에서 connect 함수를 호출하고 인자에 이벤트 처리기에서 수  행하는 함수를 기재한다. 
        self.pushButton.clicked.connect(self.btn_clicked)

    def btn_clicked(self):
        QMessageBox.about(self"message""clicked")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

특정 테이블의 통계정보가 생성되지 않거나 올바른 통계정보가 수집되지 않았을 경우 SQL 실행계획에 문제가 생길 수 있다. 이 경우 보통은 dbms_stat.gather_table_stat 패키지를 사용하여 통계정보를 실행하여 문제를 해결할 수 있다.


그러나 통계정보를 실행하더라도 실행계획이 바로 반영되지 않아서 SQL 의 실행계획 문제를 여전히 해결하지 못하는 상황이 발생할 수 있다.
오라클 10g 부터는 새롭게 통계정보가 생성되더라도 바로 해당 실행계획에 이를 적용하지 않고 적당한 시점을 찾아서 해당 테이블에 연관된 실행 계획 변경을 적용하기 때문이다. . 

물론 ALTER SYSTEM FLUSH SHARED POOL 명령어를 사용하여 모든 SQL 및 실행계획을 Shared Memory 에서 FLUSH OUT 시켜도 된다. 그러나 이 명령은 업무 시간에 동시접속 프로그램이 수행중인 운영 DB에 적용했다가는 문제를 일으킬 소지가 크기 때문에 함부로 적용할 수는 없다. ( 부하가 없는 경우라면 ok ) 

10g 부터 dbms_stat 패키지에 no_invalidate option이 추가되었는데 이를 잘 활용하면 해당 테이블을 사용하는 SQL 만 새로운 실행계획을 생성할 수 있게 해준다. no_invalidate 가 false 이면 실행계획 변경이 바로 적용되도록 함. 

dbms_stats.gather_table_stat 을 수행하기 이전에 dbms_stat.set_param ( no_invalidate false) 와 같이 수행하거나

또는 exec dbms_stats.gather_table_stat( ...... , no_invalidate => false) 로 호출하면 해당 테이블에 관련된 실행계획이 통계정보 update와 동시에 변경 반영됨. 

 하나의 오라클 세션에 할당할 수 있는 메모리는 PGA_AGGREGATE_TARGET를 통해 설정 가능하다.  주지해야 할 것은 PGA_AGGREGATE_TARGET 값이 한개의 오라클 세션값이 가지는 최대 메모리 크기가 아니라는 것이다. 즉 PGA_AGGREGATE_TARGET을  32GB로 설정하더라도 32G를 하나의 세션이 점유하여 사용하지 않는다. 

 
PGA_AGGREGATE_TARGET 설정값을 기반으로 Real Memory 의 사용값은 hidden parameter로 설정이 되며 , 이 hidden parameter를 통해 실제로 세션이 사용되는 메모리 값이 결정되며 보통 OLTP 세션에서는 최대 사용 가능한 세션 메모리는 PGA_AGGREGATE_TARGET의 5% 정도임.

주요 hidden parameter

1. _pga_max_size : 
  한개의 세션이 PGA영역에서 최대 사용가능한 메모리

  단 Serial Operation일 경우에 적용되며  Parallel Operation일 경우는 _smm_px_max_size를 따른다. 

2. _smm_max_size : 
  한개의 세션이 단일 operation에서 최대 사용 가능한 메모리. 
  
  여기서 단일 Operation 이란 sort 또는 hash join과 같이 PGA를 사용하는 Operation 중 하나라는 뜻임. 즉 _pga_max_size는 PGA내에서 수행하는 모든 Operation 들이   
최대 사용가능한 메모리, _smm_max_size는 단일 Operation이 사용 가능한 메모리임.
9i 이전에는 이런 단일 operation에 대한 max 메모리 설정이 Default 였음. 즉 SORT_AREAR_SIZE , HASH_AREA_SIZE 에 해당됨.

  Parallel Operation 일 경우에는 하나의 PQ가 단일 Operation에서 최대 사용가능한 메모리임. _smm_px_max_size 와 결합하여 PQ시 사용 메모리가 결정됨. 

3. _smm_px_max_size
   PQ 수행 시 DOP가 5 이상일 경우 _smm_px_max_size가 PGA 크기에 영향을 미침.  PQ 처리시 하나의 세션이 최대 사용 가능한 메모리. 

   _smm_px_max_size가 12G 일 경우 _smm_max_size가 1G , DOP 가 100개라면 세션이 차지하는 메모리는 12G로 제한된다. 즉 각 PQ가 가지는 _smm_max_size는 전체 12G를 넘지 않는 정도에서 동적으로 크기가 제한된다. 

4. Hidden parameter 로 해당 파라미터를 조회 할 경우 _smm_max_size 와 _smm_px_max_size는 KB 단위로 보이므로 유의할 것. 

5. 크기 설정
  Default 설정 크기는 아래와 같음 ( 정확하게 아래 룰을 따르는지는 추가 확인 필요 )
   5.1 _pga_max_size 의 경우는 PGA_AGGREGATE_TARGET의 5%가 부여됨. (PGA_AGGREGATE_TARGET의 크기가 매우 커지면 3%정도로 추정됨)
   5.2 _smm_max_size 는 _pga_max_size의 50% 임. 
   5.3 _smm_px_max_size는 PGA_AGGREGATE_TARGET의 50% 가 부여됨. 
   5.4 PGA_AGGREGATE_TARGET을 64G로 설정했을 때 
        _pga_max_size 는 2G, _smm_max_size 는 1G , _smm_px_max_size는 32G로 셋팅됨. 

요즘 파이썬을 공부하고 있는데, 파이썬 2.7 로 실습하다가 , 파이썬 3으로 바꾸다보니 기존에 사용하던 print 함수가 제대로 동작하지 않는 경우가 있음.


제일 중요한것은 2.7 버전에서는 print 가 괄호없이도 사용가능하였으나 3버전에서는 반드시 괄호를 사용해야 한다.


먼저 2.7 버전에서는


1. print 가 괄호 없이 사용 가능함. 즉 print "test123"  이 가능

2. C 언어의 printf와 같이 %d, %f 등의 포맷팅 사용 가능

print " test%3d " % (123)

3. format 내장함수를 이용하여 format

print "test{0} ".format(123)


그런데 3 버전에서는


반드시 괄호를 사용해야 하고, C언어의 printf 와 같은 형태의 포맷팅은 사용 불가하다. 그리고 포맷팅은 format 내장함수와 {} 기호를 이용한다.

print "test{0} ".format(123)


기존의 2버전 print "test%3d " % (123)의 경우에는

print ("test{:3d}".format(123)) 으로 변환

C의 printf 포맷팅에 사용되는 %3d 의 경우 {:3d} 로 변경되고 .format 을 이용하여 해당 포맷대로 값을 입력된다.



기존 2버전의 경우에 C형식의 printf 포맷팅이 지원되어 매우 반가웠는데, 3버전에서는 이에 대한 지원이 중단되어서 아쉬움이 남는다.


2버전에서 3버전의 주요 변화는 아래에 좋은 자료가 있으니 참조하기 바란다.

https://wikidocs.net/743

curl Windows 버전 Binary 를 다운로드 하기.


curl Windows 버전 Binary 를 다운로드 할때 바보같이 실수한 부분이 있어서 공유하고자 한다.


curl download 사이트에 가보면 기본이 source code download로 되어 있다.

https://curl.haxx.se/download.html





쭉 밑으로 스크롤 해서 window 버전의 32/64 bit 파일을 선택한다. Binary를 원하면 MSI 확장자를 선택한다. 



클릭하면 다른 DOWNLOAD 페이지로 이동한다.



쭉 아래로 스크롤하면 DOWNLOAD 화면이 나온다.


이때 반드시 아래와 같이 "로봇이 아닙니다" 부분을 선택해야 한다. 이것을 선택하지 않아서 계속 Download 오류가 발생하였다. Without Administrator Privileges 를 선택하여 '관리자 권한으로 실행' 할 필요가 없게 바이너리를 선택


   

org.apache.hadoop.mapred 패키지는 Hadoop mapreduce 를 위한 기본 Interface mapreduce 를 위한 기본  부모 클래스를 다양하게 정의함.
org.apache.hadoop.mapred.lib  패키지는 mapreduce 를 위한 hadoop에서 자체 구현한 class 들을 제공.


Org.apache.hadoop.mapred  주요 interface



interface 명

interface 설명

주요 Method 설명

InputFormat

InputFormat Map-reduce 잡의 Input의 여러가지 타입과 형태를 기술하게 지원.

Map-reduce는 다양한 format 으로 input 을 받을 수 있는데(주로 Text ) , 이렇게 input file 들이 특정 key,value 로 구성되었다면 KeyValueTextInputFormat 클래스로 지원 가능함.

Input으로 주어지는 파일들의 text format, key-value, 특정 length 고정, 특정 라인씩 무조건 분할 등 여러 조건으로 input file의 특성을 기재할 수 있다.

대표적인 구현 클래스는 TextInputFormat .  

InputSplit[] getSplits(JobConf job , int numSplits) throws IOException

논리적으로 InputFormat으로 정의된 Input 들을 정해진 numSplits 개수만큼 분할함. 이때 논리적으로 분할된 InputSplit가 물리적인 Chunk 단위를 의미하지 않는다.

RecordReader<K,V> getRecordReader(InputSplit split, JobConf job , Reporter reporter) throws IOException

논리적으로 분할된 InputSplitRecord 형식으로 접근하기 위한 Collection을 반환. RecordReaderrecordboundary 를 규정하고 record를 보다 쉽게 접근할 수 있는 api 제공함.

InputSplit

개별 Mapper에 의해 처리되어야 할 분할 데이터를 나타냄. Data Node 별로 존재하는 개별 Mapper에 원본 데이터를 분할하여 전달 되어야 함. 이렇게 분할 전달되는 입력 데이터의 기본 셋이 InputSplit .

InputSplit RecordReader 를 통해서 쉽게 record 기반의 데이터 처리 가능


Mapper

Input 으로 받은 key/value 쌍들을 reducer로 전달하거나 또 다른 mapper  전달을 위한 중간 형태의 key/value 쌍으로  mapping

중요한 map 메소드를 정의함.

다양한 Mappling 형태를 지원하기 위해 hadoop에서는 Mapper Interface 여러가지 형태로 구현한 Class 제공. IdentityMapper, InverseMapper, RegexMapper , TokenCountMapper 를 제공.  

Void map(K1 key , V1 value , OutputCollector<K2,V2> output , Reporter reporter) throws IOException

K1, V1 으로 Input mapping 하여 OutputCollector 형태로 반환하는 함수. OutputCollectormap의 일차 mapping 결과를 Collection 형태로 저장함. OutputCollector를 이용하여 map 결과 이용 가능.

RecordReader

RecordReader inputsplit 로 분할된 데이터를 MapperReducer에세 record 기반으로 쉽게 접근하기 위한 interface 를 제공.

Recordboundary를 규정(Iterator와 유사하게 다음 record가 있는지로 검사 )하고 쉽게 Access가능하게 해줌.

Boolean next(K key , V value) throws IOException

다음 key ,value 값을 읽어서 K , V 에 입력한다.  Key/value가 읽히면 true 그렇지 않고 EOF 일경우 false;

K createKey()  : Key 로 사용될 적절한 타입의 object 생성.

K createValue() : Value로 사용될 적절한 타입의 object생성.

Reducer

Reducer<K2,V2,K3,V3>

Mapper부터의 output을 받아 동일한 key 를 가지는 값들을 하나로 묶는 중간 Set를 제공.

Shuffle Sort 를 통해 동일한 key 값을 가지는 결과를 효율적인 병렬처리를 위해 최적화 함. Reduce를 통해 동일한 keyValue를 하나로 통합.

Void reduce(K2 key , Iterator<V2> values , OutputCollector<K3, V3> output , Reporter report) throws IOException

Map 의 결과 K2Iterator value 값을 받아 shuffle/sort/reduce 결과를 OutputCollector에 저장.

OutputFormat

출력데이터를 파일형태로 편리하게 만들 수 있는 기능 제공을 위한 인터페이스.  RecordWriter 객체를 반환할 수 있는 메소드를 제공하여 쉽게 파일 형태로 Write 가능하게 해줌.

RecordWriter<K,V> getRecordWriter(FileSystem ignored, JobConf job, String name,Progressable progress) throws IOException

해당 job RecordWriter  객체를 반환함. Name 파라미터는 output의 이름을 결정.

Partitioner

Map 에 중간 결과  partitioning을 조정할 수 있는 기능을 제공. 일반적인 partitioning  방법은 key 값에 대한 hash 함수를 적용하는 것이다. Partitioning의 개수는 reduce task의 개수와 동일하다.

Int getPartition( K2 key , V2 value , int numPartitions)

Numpartitions에 주어진 총 partition개수 중에서 주어진 key 에 따른 partition 번호를 반환한다.  


Window 상에서 Cygwin을 통해 SSH 설정하기

0. Cygwin 설치하기

"하둡 프로그래밍: 기초에서 실무까지 하둡의 모든것" 책을 보던 중 Windows에 Hadoop 을 셋업하는 법을 실행해 보았다. 먼저 sshd 를 사용하는데 이를 CYGWIN기반에서 인스톨하고 기동해야 한다. 책 대로 해보다가 sshd 가 cygwin에서 기동되지 않아 여러 시행 착오를 거쳤다.


1. Cygwin에서 SSH  설정하기.

셋업시 발견한 가장 중요한 요소들을 아래와 같다. 

가. cygwin 터미널을 관리자 권한으로 실행한다. 관리자 권한으로 실행하지 않을 경우 권한 문제로 ssh 환경 파일들의 Write가 되지 않는 문제가 발생할 수 있다.

나.  Enter the value of CYGWIN for the daemon: [] 에 ntsec을 입력한다. ntsec은 windows의 보안정책을 따르겠다는 것임. ( 아마도 ntsecurity의 줄임말인듯 )

다. cyg_server의 password 설정 시 반드시 엄격한 패스워드 규칙사용 필요.
( set the password between 5 to 8 characters and combination of Uppercase, lowercase and numbers. 예를 들어 Jdk1234# )  설정 시 cyg_server라는 권한을 가진 account 가 사용되는데 해당 account의 password를 cyg_server, 1111 같이 기억하기 편한 password를 입력하였더니 아래와 같은 오류가 발생하였다.

*** Warning: Creating the user 'cyg_server' failed!  Reason:
▒▒ȣ▒▒ ▒▒ȣ ▒▒å ▒䱸 ▒▒▒׿▒ ▒▒▒▒ ▒ʽ▒▒ϴ▒. ▒ּ▒ ▒▒ȣ ▒▒▒▒, ▒▒ȣ ▒▒▒⵵ ▒▒ ▒▒ȣ ▒▒▒ ▒䱸 ▒▒▒▒▒▒ Ȯ▒▒▒Ͻʽÿ▒.

NET HELPMSG 2245▒▒(▒▒) ▒Է▒▒ϸ▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒ֽ▒▒ϴ▒.

cygwin에서 한글이 깨지는 바람에 오류 메시지가 무슨 내용인지 몰랐는데, 이유를 찾고 보니 , 패스워드가 너무 쉽게 생성이 되었다는 것이다.  Cygwin에서의 한글 설정도 먼저 필요해 보인다.




2. Windows 환경 변수 설정.

내 컴퓨터->오른쪽버튼 클릭->속성->고급 시스템 설정->환경변수 에서 새로운 환경 변수를 생성 CYGWIN=ntsec 입력

시스템 변수인 PATH에도 Cygwin의 bin 디렉토리를 추가. 

PATH=......;C:\Dev\cygwin64\bin


3. 관리자 권한으로 cygwin 실행.

Cygwin 아이콘을 오른쪽 마우스 클릭하고 관리자 권한으로 실행.



4. 기존 설정된 sshd 환경 Reset

처음 설정하는 단계에서는 필요없으나 본인은 여러번 셋업하면서 실패하였기 때문에 기존에 만들어진 sshd 관련 파일 및 프로세스 down

가.  cygrunsrv -R sshd 로 sshd 서비스 삭제.
나.  /etc 디렉토리 밑에 ssh_로 시작하는 파일들및 , sshd_config 삭제
rm ssh_*; rm sshd_config


5. 이제 ssh-host-config로 ssh 셋업 명령어 수행.  no 또는 yes로 설정.

strict mode 설정 : no , privilege seperation은 yes로 설정

sshd를 서비스로 install : yes , Enter the value of CYGWIN for the daemon: [] ntsec

cyg_server이름을 바꿀 필요 없음. no로 설정

주의 : password는 반드시 엄격한 패스워드 규칙사용 필요.
set the password between 5 to 8 characters and combination of Uppercase, lowercase and numbers. 예를 들어 Jdk1234#


$ ssh-host-config

*** Info: Generating missing SSH host keys
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
*** Info: Creating default /etc/ssh_config file
*** Info: Creating default /etc/sshd_config file

*** Info: StrictModes is set to 'yes' by default.
*** Info: This is the recommended setting, but it requires that the POSIX
*** Info: permissions of the user's home directory, the user's .ssh
*** Info: directory, and the user's ssh key files are tight so that
*** Info: only the user has write permissions.
*** Info: On the other hand, StrictModes don't work well with default
*** Info: Windows permissions of a home directory mounted with the
*** Info: 'noacl' option, and they don't work at all if the home
*** Info: directory is on a FAT or FAT32 partition.
*** Query: Should StrictModes be used? (yes/no) no
    -- StrictMode 는 no로 설정한다.
*** Info: Privilege separation is set to 'sandbox' by default since
*** Info: OpenSSH 6.1.  This is unsupported by Cygwin and has to be set
*** Info: to 'yes' or 'no'.
*** Info: However, using privilege separation requires a non-privileged account
*** Info: called 'sshd'.
*** Info: For more info on privilege separation read /usr/share/doc/openssh/README.privsep.
*** Query: Should privilege separation be used? (yes/no) yes

  -- privilege seperation은 yes로 설정

*** Info: Updating /etc/sshd_config file

*** Query: Do you want to install sshd as a service?
*** Query: (Say "no" if it is already installed as a service) (yes/no) yes

-- sshd를 서비스로 install : yes

*** Query: Enter the value of CYGWIN for the daemon: [] ntsec

--ntsec으로 설정

*** Info: On Windows Server 2003, Windows Vista, and above, the
*** Info: SYSTEM account cannot setuid to other users -- a capability
*** Info: sshd requires.  You need to have or to create a privileged
*** Info: account.  This script will help you do so.

*** Info: It's not possible to use the LocalSystem account for services
*** Info: that can change the user id without an explicit password
*** Info: (such as passwordless logins [e.g. public key authentication]
*** Info: via sshd) when having to create the user token from scratch.
*** Info: For more information on this requirement, see
*** Info: https://cygwin.com/cygwin-ug-net/ntsec.html#ntsec-nopasswd1

*** Info: If you want to enable that functionality, it's required to create
*** Info: a new account with special privileges (unless such an account
*** Info: already exists). This account is then used to run these special
*** Info: servers.

*** Info: Note that creating a new user requires that the current account
*** Info: have Administrator privileges itself.

*** Info: The following privileged accounts were found: 'cyg_server' .

*** Info: This script plans to use 'cyg_server'.
*** Info: 'cyg_server' will only be used by registered services.

*** Query: Do you want to use a different name? (yes/no) no

-- cyg_server이름을 바꿀 필요 없음. no로 설정

*** Query: Please enter the password for user 'cyg_server':
*** Query: Reenter:
*** Query: Please enter the password for user 'cyg_server':
*** Query: Reenter:
-- 주의 : password는 반드시 엄격한 패스워드 규칙사용 필요. 예를 들어 jdk1234#

*** Info: The sshd service has been installed under the 'cyg_server'
*** Info: account.  To start the service now, call `net start sshd' or
*** Info: `cygrunsrv -S sshd'.  Otherwise, it will start automatically
*** Info: after the next reboot.

*** Info: Host configuration finished. Have fun!


6. sshd 서비스 기동

net start sshd 또는 cygrunsrv -S sshd


이렇게 기동하면 윈도우즈 서비스에 기동이 표시된다.


만일 제대로 기동이 되지 않을 시에 아래와 같은 메시지를 출력하면 이 또한 password 설정 문제 이다.


cygrunsrv: Error starting a service: StartService:  Win32 error 1069:


해당 메시지는 window log on 을 pass하지 못했으며, password 가 기준에 맞게 설정되지 않았다는 것이다. ( 대문자, 소문자, 숫자를 섞어서 5 ~8 문자가 되어야 한다. )


이경우 아래와 같이 cygwin shell 에서 cyg_server의 패스워드를 변경 후에 윈도우 control 서비스에서 CYGWIN sshd 를 오른쪽 마우스로 선택한 뒤에 Log On 탭에서 변경된 패스워드를 입력해 준다.


$ passwd sshd_server

(set the password between 5 to 8 characters and combination of Uppercase, lowercase and numbers.)

다음에 변경된 패스워드를 윈도우의 서비스 에서 로그온 탭에서 동일하게 변경한다.





아래 블로그에서 많은 도움을 받았다. 특히 cygwin에 대한 한글 설정도 잘 나와 있는 좋은 자료 이다.

http://yard.tistory.com/entry/CygWin-SSHD



AWS EC2 인스턴스에 Putty, SecureCRT 로  SSH 접속하기


0. SSH 접속을 위한 Public/Private Key Pair 생성.


AWS EC2 인스턴스에는 SSH 를 이용하여 Remote 접속이 가능하다. AWS 메뉴얼에는 Putty 를 권장하지만, SecureCRT와 같이 보다 다양한 기능을 제공하는 SSH 클라이언트로 접속이 가능하다.


EC2 인스턴스에 접속 시 가장 중요한 것은 EC2 인스턴스 생성 시 만들어진 Public/Private Key pair 를 로컬 컴퓨터에 잘 저장한 뒤 이를 SSH Client에서 import하여 사용하는 것이다.

Key Pair 는 EC2 인스턴스 생성시에 Key Pair 생성시에 만들어진다.

만드는 과정은 아래와 같이 크게 7단계이며, 6단계인 Configure Security Group에 SSH 22번 포트가 모든 ip에 Default로 Open 되어 있다. ( 만일 이 설정을 없애면 SSH로 접속할 수 없으므로 유의 할것. )

1. Choose AMI
2. Choose Instance Type
3. Configure Instance
4. Add Storage
5. Tag Instance
6. Configure Security Group

7. Review

아래 그림은 Security Group을 설정하는 화면임. Security Group은 EC2 인스턴스의 방화벽이라고 생각하면 이해하기 쉬움. type 필드에 SSH 를 확인하고 source 에 anywhere를 선택하면 어떤 클라이언트 ip에서도 ssh 접속 가능함. 



7단계에 Review 화면에서 Instance 생성에 대한 모든 속성을 확인 후에 화면 하단의 맨 오른쪽에 있는 Launch 버튼을 누르면 "Select an Existing Key Pair or Creating New Key Pair" 화면이 Pop up 된다. 해당 화면이 바로 SSH Client 접속을 위한 Private/Public Key Pair를 생성하는 것이다. 기존에 만들어 놓은 Key Pair로 여러개의 EC2 Instance들을 접속하려면 Existing Key를 선택하고 그렇지 않고 새로운 Key pair를 이용하려면 Create a new key pair를 선택하고 Key Pair Name을 설정한다. 아래 그림은 Key pair name을 AWS_TEST01_KP 를 설정하였다. Download Key Pair 버튼을 누르면 방금 지정한 Key pair를 로컬 컴퓨터에 Download 할 수 있다. 




Download Key Pair를 선택하면 로컬 컴퓨터의 특정 디렉토리에 key pair 를 .pem 확장자로 저장할 수 있다. 이때 다운로드된 key pair 파일의 디렉토리 및 파일 내용을 잘 기억하고 있어야 한다. 후에 SSH 클라이언트 (Putty , SecureCRT)에서 이를 활용할 것이기 때문이며, 만일 분실 시에는 여러분이 애써서 만들어 놓은 EC2 인스턴스에 접속하지 못하기 때문이다.  저의 경우 C:\Dev\aws\AWS_TEST01_KP.pem 로 파일을 저장하겠습니다.



파일을 저장하였으면 최종적으로 Launch Instance를 클릭하여 EC2 Instance를 생성함.



인스턴스가 생성되기까지 10~ 20분 사이가 소모되므로 완전히 인스턴스가 생성되면 SSH 클라이언트로 접속해보자.


1.  Putty로 접속하기.

Putty는 AWS에서 내려받은 pem 형식의 Key pair 파일을 putty 전용의 key generator를 통해서 ppk 형식으로 변경하여 인증키에 사용 가능하다.

puTTygen 을 이용하여 putty 전용 인증키 생성이 가능하다 ( putty와 puTTygen은 모두 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 에서 Download 가능하다. )


puttygen을 실행한다. Load an existing private key의 Load 버튼을 클릭하여 AWS에서 Download 받은 pem 파일을 선택한다. 이때 SSH-2 RSA가 선택되어 있어야 한다.



Default로 putty의 ppk 파일확장자만을 가지는 셋팅으로 되어 있으므로 우리가 EC2에서 Download 받은 pem 파일이 보이지 않을수 있다. 화면 하단 오른쪽의 확장자 선택 option을 All Files(*.*) 으로 변경하면 DownLoad 받은 파일이 보일 것이다. Download 된. C:\Dev\aws\AWS_TEST01_KP.pem를 선택한다.



Key가 Successfully import 되었고 save private key 버튼을 클릭하라는 메시지 pop up 창이 나온다. "확인" 버튼을 누르면 popup 창이 사라지고 이후 save private key 버튼을 클릭하여 putty의 ppk 파일확장자로 저장을 시도한다.




Save Private key 를 클릭하면 "해당 key를 password없이 저장할 것인지" 를 묻는 popup 창이 나오며, 그냥 예(Y)를 클릭한다.



AWS_TEST01_KP.ppk 라는 이름으로 private key 를 저장한다.



이제 putty가 이용할 수 있는 private key 가 만들어 졌으므로 puttygen 프로그램은 종료하고 putty를 실행하자.

putty가 접속할 수 있게 설정하는 2개의 주요 정보는 Host Name(or Ip Address) 와 인증파일이다. 먼저 Host Name에 입력할 정보를 확인하기 위해 다시 AWS의 Management Console에서 방금전 생성한 EC2 Instance의 정보를 확인하자.

해당 EC2 Instance 를 선택하면 Public DNS 항목이 나타난다. Public DNS 길이가 길기 때문에 Instance Dashboard에 바로 나타나지 않을 수 있다. 아래의 Description 탭을 클릭하면 Public DNS의 Full Name을 확인할 수 있다.





Putty의 Host Name 컬럼에 바로 이 Public DNS를 붙인다. 기본적으로 Putty 접속은 username@Public DNS 와 같은 접속환경을 허용한다. 여러분이 생성한 EC2 Instance 가 Amazon Linux AMI라면 username은 ec2-user가 된다. 따라서 Host Name 컬럼에 ec2-user@ec2-52-88-11-182.us-west-2.compute.amazonaws.com  을 입력하면 된다.



다음으로는 방금 전 puttygen으로 생성한 ppk 파일을 로드하는 것이다.

먼저 화면 왼쪽 Category 에서 Connection->Auth 메뉴를 선택한다.  "Private Key file for authentication " 에서 Browse 를 클릭한 후 해당 ppk 파일을 선택한다. 




Host Name 설정과 private key 파일 설정이 완료되었으면 맨 아래 Open 버튼을 클릭하여 접속한다. 성공적으로 접속되면 아래와 같은 화면이 나타날 것이다.



2. SecureCRT로 접속하기.

SecureCRT로 접속하는 방법은 Putty 접속과 유사하다. SecureCRT는 더 편리하게도 putty 와 같이 pem 파일을 ppk로 변경하지 않고 pem 파일 그대로 적용 가능하다.


먼저 Quick Connect 메뉴를 선택하여 접속화면을 열자. Protocol 항목은 SSH, Port 는 22번을 확인한 뒤, EC2 Instance의 Public DNS를 Host Name 항목에 복사/입력한다. 다음 username 항목에 ec2-user 를 입력한다.

Authentication 항목에서 PublicKey를 마우스로 클릭하면 옆의 Properties 버튼이 활성화 된다. PublicKey 를 마우스로 클릭하지 않으면 Properties 버튼이 활성화 되지 않으므로 유의한다. 활성화된 Properties 버튼을 클릭한다.  




Public Key Properties 화면의 Default 는 use global public key setting임. 이를 use session public key setting으로 변경함.

Session Settings 에서 use identity or certificate file 을 선택한 뒤, AWS에서 다운로드 받은 Key pair 파일 (pem 확장자) 를 선택하여 OK 버튼을 누른다. 




Quick Connect에서 Connect버튼을 누르면 아래와 같이 성공적인 접속 화면이 나타난다.








+ Recent posts