Ubuntu 16.04에 mysql을 설치하는 것은 별로 어렵지 않았습니다.


my.cnf 파일을 수정해서 utf-8을 기본 설정으로 하는데 역시 한 번에 안 되더군요. 그렇게 mysql 을 삭제하고 설치하고 삭제하고...


그냥 짜증나서 예전에 사용하던 방법을 사용하기로 하였습니다.



설치


sudo apt-cache search mysql-server
sudo apt-get install mysql-server



제거


apt-get purge mysql-server
apt-get purge mysql-common
rm -rf /var/log/mysql
rm -rf /var/log/mysql.*
rm -rf /var/lib/mysql
rm -rf /etc/mysql


apt-get install mysql-server --fix-missing --fix-broken 


utf-8 설정


테이블을 생성할 때마다 DEFAULT SET=UTF8을 붙여줍니다.

create table customer( 
num int not null,
 name varchar(50), 
primary key (num)
)default charset=utf8;


'데이터베이스' 카테고리의 다른 글

[데이터베이스] FK의 사용  (0) 2017.01.12
[데이터베이스] mysql join  (0) 2016.12.05
회복 다시 정리  (0) 2016.11.29
트랜잭션과 회복  (0) 2016.11.16
블로그 이미지

NCookie

,

(이 글은 파이썬 2.7.12 버전을 기준으로 작성하였습니다.)


여러 문자열을 합치거나 변수와 함께 출력하고자 할 떄 포맷팅을 사용합니다.


그 방법에는 여러 가지가 있을 것입니다.


print "Hello %s" % "World"
print "Hello {}".format("World")
print " ".join("Hello", "World")
print "Hello " + "World"


저는 주로 .format() 을 주로 사용하고 % 를 이용한 포맷팅은 가끔씩 사용합니다.


왜 파이썬에서는 이렇게 여러 방법을 혼용할까요. 사람 헷갈리게.


그 이유는 파이썬 2.5 버전부터  .format()이라는 new syntax가 추가되었기 때문이라고 합니다.


그렇다면 저 둘 중 무엇을 사용하는 것이 좋을까해서 구글링을 해보았더니 명확한 답은 찾을 수 없었습니다.


성능 같은 경우에는 상황에 따라 서로 바뀌기도 하고 .format()은 되지만 % 라는 것도 딱히 보지 못하였습니다. 방법이 다를 뿐 구현은 할 수 있더군요.


결과적으로 답은 못 찾았지만 대신 흥미로운 것들을 알 수 있었습니다.


대표적으로 이런 것들이 있겠네요


li = [12,45,78,784,2,69,1254,4785,984]
print map('the number is {}'.format,li)

print map('some_format_string_%s'.__mod__, some_iterable)


from datetime import datetime,timedelta

once_upon_a_time = datetime(2010, 7, 1, 12, 0, 0)
delta = timedelta(days=13, hours=8,  minutes=20)

gen =(once_upon_a_time +x*delta for x in xrange(20))

print '\n'.join(map('{:%Y-%m-%d %H:%M:%S}'.format, gen))



이런 예시도 있었습니다. 이 예시는 가독성 문제 때문에 .format()에 힘을 실어주는 글이었습니다.


# name 은 (1, 2, 3) 같은 튜플입니다
print "hi there %s" % (name,)   # supply the single argument as a single-item tuple
print "hi there {}".format(name)



어쨌든 제가 내린 결론은 둘 중 어느 방법을 사용하던지 중요한 것은 가독성이라고 생각합니다. 성능이나 구현하는 기능이 그렇게 다르지 않다면요.


결국 이것도 코딩 스타일 중 하나이니까요. 즉, 굳이 특정 방법을 고집할 필요는 없을 것 같습니다.



PS1. timeit 이라는 모듈이 있는데 이걸 이용해서 함수의 처리 시간을 알려주는 것도 있더군요. a라는 함수가 있을 떄 timeit.timeit(a) 와 같이 간단하게 사용할 수 있습니다.


PS2. 로그를 찍을 때 logger 모듈을 사용하는데 포맷팅을 하지 않고 함수에 인자를 전달해서 사용할 수 있습니다.


log.debug("some debug info: %s", some_info)



참고


http://stackoverflow.com/questions/5082452/python-string-formatting-vs-format


http://stackoverflow.com/questions/6960442/difference-between-python-print-format-methods

블로그 이미지

NCookie

,

IDS(Intrusion Detection System)


  침입 탐지 시스템은 일반적으로 시스템에 대한 원치 않는 조작을 탐지하여 준다. IDS는 매우 많은 종류들이 존재하며, 여기서는 그들 중 일부를 설명한다. 시스템에 대한 원치 않는 조작은 악의를 가진 숙련된 해커 또는 자동화된 툴을 사용하는 스크립트 키디에 의한 공격의 형태로 행해질 수 있다.


  침입 탐지 시스템은 전통적인 방화벽이 탐지할 수 없는 모든 종류의 악의적인 네트워크 트래픽 및 컴퓨터 사용을 탐지하기 위해 필요하다. 이것은 취약한 서비스에 대한 네트워크 공격과 애플리케이션에서의 데이터 처리 공격(data driven attack), 그리고 권한 확대(privilege escalation) 및 침입자 로그인 / 침입자에 의한 주요 파일 접근 / 악성 소프트웨어(컴퓨터 바이러스, 트로이 목마, 웜)와 같은 호스트 기반 공격을 포함한다.


  IDS는 여러 개의 구성 요소로 이루어져 있다: 센서는 보안 이벤트를 발생시키며, 콘솔은 이벤트를 모니터하고 센서를 제어하거나 경계시키며(alert), 중앙 엔진은 센서에 의해 기록된 이벤트를 데이터베이스에 기록하거나, 시스템 규칙을 사용하여 수신된 보안 이벤트로부터 경고를 생성한다. IDS를 분류하는 방법은 센서의 종류와 위치 그리고 엔진이 경고를 만드는 데 사용하는 방법론 등에 따라 여러 가지가 있다. 많은 간단한 IDS들은 위의 세 가지 요소들을 하나의 장치 또는 설비로 구현하고 있다.



IPS(Intrusion Prevention Systems)


  침입 차단 시스템은 외부 네트워크로부터 내부 네트워크로 침입하는 네트워크 패킷을 찾아 제어하는 기능을 가진 소프트웨어 또는 하드웨어이다. 일반적으로 내부 네트워크로 들어오는 모든 패킷이 지나가는 경로에 설치되며, 호스트의 IP주소, TCP/UDP의 포트번호, 사용자 인증에 기반을 두고 외부 침입을 차단하는 역할을 한다. 허용되지 않는 사용자나 서비스에 대해 사용을 거부하여 내부 자원을 보호한다. 이를 위하여, IPS는 어떤 한 패킷을 검사하여 그것이 부당한 패킷이라고 판단되면, 해당 IP주소 또는 포트에서 들어오는 모든 트래픽을 봉쇄하는 한편, 합법적인 트래픽에 대해서는 아무런 방해나 서비스 지연 없이 수신측에 전달한다.


  효과적인 침입 방지 시스템이 되려면 개별 패킷은 물론 트래픽 패턴을 감시하고 대응하는 등보다 복잡한 감시와 분석을 수행할 수 있어야 한다. 탐지 기법으로는 주소 대조, HTTP 스트링과 서브스트링 대조, 일반 패턴 대조, TCP 접속 분석, 변칙적인 패킷 탐지, 비정상적인 트래픽 탐지 및 TCP/UDP 포트 대조 등이 있다.


  광범위하게 말하자면, 방화벽이나 앤티바이러스 소프트웨어, 그리고 네트웍 등의 접근 권한을 획득하려는 공격자들을 지키기 위해 사용되는 것이라면 어떠한 제품이나 수단이라도 IPS라 지칭할 수 있다.


  Intrusion Detection and Prevention Systems (IDPS)라고도 한다.



UTM(Unified Threat Management)


  통합 위험 관리는 다중 위협에 대해 보호 기능을 제공할 수 있는 포괄적 보안 제품을 가리킨다. 가상 사설망 등 다양한 보안 솔루션 기능을 하나로 통합한 보안 솔루션. 보안 솔루션은 그 목적에 따라 방화벽, 침입 탐지시스템, 침입 방지 시스템, 가상 사설망, 데이터베이스 보안, 웹 보안, 콘텐츠 보안 등 다양한 솔루션 형태로 분화, 발전되어 왔으나 그 결과 각각의 보안 솔루션 운용 방법을 익히기 위한 시간 비용, 그리고 운용을 위한 물리적 공간과 인력 확보가 요구되었다. 통합 위협 관리(UTM)는 다양한 보안 솔루션을 하나로 묶어 비용을 절감하고 관리의 복잡성을 최소화하며, 복합적인 위협 요소를 효율적으로 방어할 수 있다


  UTM 제품은 대체로 방화벽, 앤티바이러스 소프트웨어, 콘텐츠 필터링 그리고 스팸 필터 등이 하나의 패키지로 통합되어 있는 형태가 많다. UTM이라는 용어는 원래 시장 데이터 분석 관련 서비스를 제공하는 업체인 IDC에 의해 처음 사용되기 시작했다. UTM 공급자로는 Fortinet, LokTek, Secure Computing Corporation 그리고 시만택 등이 있다.


  UTM이 제공하는 가장 주요한 장점은 단순하고, 설치 및 사용이 간결하며, 모든 보안 기능이나 프로그램을 동시에 갱신할 수 있는 점 등을 들 수 있다. 인터넷 위협의 특질과 다양성은 보다 복잡하게 발전하고 있기 때문에, UTM 제품 역시 이 모든 위협들에 대해 적절히 대응할 수 있도록 맞추어질 수 있다. 시스템 관리자들이 오랜 기간에 걸쳐 다양한 종류의 보안 프로그램들을 유지, 관리해야 하는 수고를 덜어준다.



PMS(Patch Management System)


  패치 관리 시스템은 운영체제를 비롯한 소프트웨어에서 발견되는 오류나 보안 취약점을 보완하기 위해 보안 패치뿐만 아니라 각종 백신 등 주요 보안 소프트웨어의 설치 및 업데이트 등을 중앙에서 관리하는 종합적인 자동화 시스템을 말한다. 보안 패치의 관리와 설치를 불특정 다수의 수많은 다른 환경을 가진 컴퓨터를 대상으로 중앙에서 자동으로 통제 및 제어함으로써 각종 소프트웨어의 취약점에 대한 보안 사고를 사전에 예방한다.


  PMS는 주로 정부·공공기관에서 대부분 사용되지만 민간기업에 대한 사용은 상대적으로 적지만, 공공기관에 비해 민간기업이 차지하는 비중은 상대적으로 크다. 향후 민간기업에서도 PMS 사용이 활성화되어야 할 것이다. 아직까지 민간기업은 PMS의 필요성을 인식하지 못하는 문제점이 있다. PMS는 나날이 다양해지는 보안 위협에 대해 기업이 갖추어야 할 필수적인 요소임을 인식하고, 민간기업의 PMS 사용에 대해 적극적으로 검토해야 한다.


  PMS는 나날이 기술적 진화가 이루어지고 있다. 최근 이종 보안솔루션과 통합하여 제공되는 양상을 보이고 있다. 또한 사용자들의 통합보안 수요에 대응하기 위해 하드웨어 일체형 솔루션이 출시하였다. 앞으로의 PMS는 단독 솔루션보다는 보안관리 제품의 필수 기능으로서 통합흡수될 것으로 전망된다.


  PMS를 단순히 패치 설치 이상의 전문화된 보안 솔루션이라는 사용자 인식 변화를 주기 위해서는 지속적인 인식 개선이 필요할 것이다.



ESM(Enterprise Security Management)


  통합 보안 관리는 보안 솔루션들의 로그를 한 곳으로 모아 로그 간 연관 분석을 통해 다양한 외부의 위협을 막을 수 있다. 기업별로 하루에 쌓이는 보안 솔루션들의 로그의 용량이 적게는 GB 단위에서 많게는 TB 단위로 발생을 하고 있다. 그러면 지능화된 공격이 진행되는 상황에서 외부의 위협을 막기 위해 엄청난 용량의 로그들을 단일 보안 솔루션에 개별적으로 확인해서는 외부의 위협을 찾아서 대응하기가 불가능하다. 이러한 요구에 맞춰 등장한 것이 ESM이다.


  ESM은 매니저, 콘솔, 에이전트 3가지로 구성이 된다. 에이전트에서 로그를 수집하고 수집된 로그를 매니저로 전송을 한다. 매니저에서는 수집된 로그들의 연관 분석을 통해 정보를 발생시키고 콘솔에서 해당 정보를 확인할 수 있다.


  ESM에는 보안솔루션들로부터 수집되는 로그들을 실시간으로 콘솔에서 확인이 가능한 실시간 로그 기능, 로그 및 자원 정보를 그래프 형태로 보여주는 그래프 기능, 다양한 이기종의 장비들의 상관관계를 통해서 정보를 발생시키는 연관 정보 기능, 수집된 로그 및 연관 정보 로그를 검색할 수 있어 침해대응 사고에 대한 로그를 검색하는 검색 기능 등이 있다. 뿐만 아니라 네트워크 환경을 관제맵으로 나타낼 수 있으며, 보안관제를 하기 위해서 사용되는 관계 프로세스 등을 포함하고 있다.



출처


IDS


https://ko.wikipedia.org/wiki/%EC%B9%A8%EC%9E%85_%ED%83%90%EC%A7%80_%EC%8B%9C%EC%8A%A4%ED%85%9C


IPS


http://www.terms.co.kr/IPS.htm


https://ko.wikipedia.org/wiki/%EC%B9%A8%EC%9E%85_%EC%B0%A8%EB%8B%A8_%EC%8B%9C%EC%8A%A4%ED%85%9C


UTM


http://terms.naver.com/entry.nhn?docId=3436325&cid=42346&categoryId=42346


http://www.terms.co.kr/UTM.htm


PMS


https://books.google.co.kr/books?id=rHW3BQAAQBAJ&pg=PA198&dq=%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9Cpms&hl=ko&sa=X&ved=0ahUKEwic0pqd-fXQAhUGjZQKHWQGDzEQ6AEIJjAA#v=onepage&q=%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9Cpms&f=false


ESM


https://books.google.co.kr/books?id=rHW3BQAAQBAJ&pg=PA198&dq=%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9Cpms&hl=ko&sa=X&ved=0ahUKEwic0pqd-fXQAhUGjZQKHWQGDzEQ6AEIJjAA#v=onepage&q=esm&f=false



블로그 이미지

NCookie

,

라즈베리 파이에 원격 접속하느라 몇 일 동안 생고생을 했지만 이쪽 분야에 대해 잘 아는 친구에게 물어봤더니 허탈할 정도로 간단한 답변이 돌아왔습니다.


sd 카드에 라즈베리안을 굽고 나면 더 이상의 준비는 필요 없다는 것입니다.


라즈베리파이 3부터는 기본적으로 ssh가 켜져 있기 때문에 바로 랜선을 랩탑에 연결하면 원격 접속할 수 있다고 합니다.


그 이후의 방법은 간단합니다.


전원과 랜선을 파이에 연결하고 우분투 16.04 기준으로 시스템 설정-유선-옵션-IPv4 설정에서 방법을 다른 컴퓨터와 공유로 선택한 다음에 "이 연결이 되려면 IPv4 주소 부여 필요"에 체크를 해줍니다.




그리고 nmap을 이용하여 파이의 IP 주소를 검색합니다. 저는 학교 네트워크를 사용하기 때문에 nmap 10.42.0.* 로 입력하였습니다.




nmap으로 알아낸 파이의 ip 주소로 ssh 접속하면 됩니다.


ssh pi@10.42.0.139


라즈베리 파이의 초기 비밀번호는 raspberry 입니다.



위의 과정을 간단하게 정리하면


1. 라즈베리안 OS를 구운 sd 카드를 라즈베리 파이에 삽입


2. 랜선으로 파이와 랩탑에 연결


3. 우분투 16.04 기준으로 유선랜 공유 설정


4. nmap 명령어를 이용하여 파이 ip 주소 탐색


5. 파이의 ssh 서버에 접속



만약 ssh에 접속할 때 ssh: connect to host 10.42.0.1 port 22: No route to host 같은 메시지가 뜬다면 파이를 HDMI로 연결하여 ssh를 enable 해주어야 합니다.


위의 방법말고 다른 방법은 모르겠습니다.

'대회' 카테고리의 다른 글

전국 고등학교 동아리 SW경진대회  (0) 2016.11.21
3D 메이킹 경진 대회(결선)  (0) 2016.11.12
3D 메이킹 경진 대회(예선)  (0) 2016.11.06
블로그 이미지

NCookie

,

우분투를 다시 설치하고 새로운 마음으로 tensorflow를 설치했습니다. 전에 할 때는 별 고생을 다하면서 했는데 이번에는 한 번에 깔끔하게 깔렸네요.


Ubuntu 16.04 위에서 gpu를 호환시키기 위해 CUDA Toolkit 8.5와 cuDNN 5.1을 설치하였습니다. 몇 개월 사이에 버전이 업그레이드 되면서 최근 문서에서는 권장하는 버전도 업그레이드 된 것 같습니다.


아무래도 기본적인 수학 지식이 부족해서 머신러닝 알고리즘만 공부하다가는 한 세월 걸리고 저번에 멘탈이 나가서 한동안 공부를 손에서 놓았었습니다. 그래서 tensorflow로 소스 코드를 작성하면서 병행할 계획입니다.

'인공지능' 카테고리의 다른 글

[TensorFlow] 텐서플로우 Ubuntu 14.04 설치  (0) 2016.11.04
블로그 이미지

NCookie

,