보통 외래키는 관계형 데이터베이스에서 무결성을 유지하기 위해서 사용합니다. 저는 테이블 간의 관계를 명시하기 위해서 사용하기도 하였습니다.


아직까지는 진행하는 프로젝트들이 규모가 작고 개인으로 하는 것들이 위주라서 주로 MySQL을 사용해왔습니다. mysql은 관계형 데이터베이스다보니 테이블의 개수가 많아지면 외래키를 사용하는 경우가 가끔 있었는데 외래키와 관련된 무결성 제약조건 때문에 애를 먹었던 적이 많았습니다. 


얼마 전에 친구가 mysql 외래키에 대해서 물어봤을 때 다 까먹어서 제대로 대답하지 못했습니다. 그래서 자료를 찾다가 왜 외래키를 사용하는지 궁금해졌습니다. 그리고 흥미로운 사실을 알 수 있었습니다. 


현업에서는 외래키를 잘 사용하지 않는다는 것이었습니다. 대부분 로직이 수시로 바뀌어서 프로그램이 바뀌면 무결성 때문에 DB의 구조도 바꿔야 되서 업무량이 엄청 늘어나기 때문이었습니다. 저도 웹 프로젝트를 진행하면서 미숙한 설계로 프로그램에 변동이 자주 있었는데 그 때마다 FK로 걸었던 참조 무결성이 가끔씩 오류를 터뜨려줘서 꽤나 고생했어서 공감이 되었습니다.


당연히 현업에서 DB를 논리적 설계 단계에서는 FK가 존재합니다만 그것을 실제로 DB에서 구현할 때에는 명시하지 않고 프로그램의 로직을 무결성을 유지하도록 짠다고 합니다. 그리고 JOIN 등을 이용하여 FK를 사용한 것과 같은 기능을 구현할 수 있다고 합니다.


이렇게 하는 이유는 현실적인 번거로움 뿐만 아니라 성능 개선의 측면도 있습니다. SELECT, DELETE를 할 때에는 상관 없지만 INSERT, UPDATE를 할 때 FK를 사용하면 약간 느려진다고 합니다.


하지만 결제 시스템과 같이 굉장히 중요한 데이터를 다룰 때에는 무결성을 유지하기 위해서 FK를 사용한다고 합니다. 즉, 상황에 따라 융통성있게 사용한다는 것이죠. 그리고 DB에서 무결성을 보장해주지 않는 대신 어플리케이션 단에서 확실히 처리를 해야할 것입니다.


사실 제가 진행하는 프로젝트는 규모가 그렇게 크지도 않고 성능 차이가 확 와닿을 정도로 데이터가 많은 것도 아니라서 FK를 사용할 생각이기는 합니다만... 왠만하면 중요한 테이블에만 달고 다른 것들에는 편의를 위해서 생략하지 않을까 생각합니다.

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

우분투 16.04 msyql 설치 및 utf-8 설정  (0) 2016.12.20
[데이터베이스] mysql join  (0) 2016.12.05
회복 다시 정리  (0) 2016.11.29
트랜잭션과 회복  (0) 2016.11.16
블로그 이미지

NCookie

,

[수학] Chain Rule

수학 2017. 1. 3. 10:20

체인 룰에 대해 공부한 내용들을 정리하겠습니다.



1. 합성함수


우선 체인 룰에 대해서 설명하기 전에 합성함수에 대해 알아야 합니다.


별로 어려운 개념은 아닙니다.


간단하게 말해서 $ f(t) $ 함수의 매개변수가 $ g(x) $ 라는 함수의 결과값인 함수를 말합니다.


즉, $ t = g(x) $ 이므로 $ f(g(x)) $ 와 같이 표현할 수 있을 것입니다.


$ (f \circ g)(x) $ 라고도 표현할 수 있습니다.



예시를 들어보면, $ f(t) = 2t + 1 $ 이고 $ g(x) = x^2 $ 이라고 하겠습니다.


위 식에서 $ x = 3 $ 일 때, 


$$ f(t) = f(g(x)) $$ 

$$= f(x^2) = 2(x^2) + 1 = 2x^2 + 1 $$ 

$$ = 19 $$ 이 될 것입니다.


합성함수는 별로 어려운 개념이 아니기 때문에 설명은 이 이정도로 마치겠습니다.



2. 체인 룰


미분의 기본적인 개념을 알고 있다고 가정하고 설명하겠습니다.


체인 룰은 두 함수를 합성한 합성 함수의 도함수에 관한 공식입니다. 

(https://ko.wikipedia.org/wiki/%EC%97%B0%EC%87%84_%EB%B2%95%EC%B9%99)


그 공식은 다음과 같습니다.


$$ (f \circ g)'(x) = (f(g(x)))' = f'(g(x))\cdot g'(x) $$ 


체인룰은 변수가 여러 개일 때, 어떤 변수에 대한 다른 변수의 변화율을 알아내기 위해 쓰인다고 합니다.



3. 증명


두 가지 방법을 설명할 것인데 첫 번째는 미분의 정의를 이용하여 증명하는 것입니다.


$ y = f(g(x)) $ 일 때,

$$ y' = \lim_{h\rightarrow 0}\frac{f(g(x+h))-f(g(x))}{h} $$

$$ = \lim_{h\rightarrow 0}\frac{f(g(x+h))-f(g(x))}{g(x+h)-g(x)}\cdot \lim_{h\rightarrow0}\frac{g(x+h)-g(x)}{h} $$

$$ =f'(g(x))\cdot g'(x) $$


위에서 $ \lim $ 이 두 개로 나뉘어진 이유는 다음과 같습니다.


$ \lim_{x\rightarrow a}f(x) = A, \lim_{x\rightarrow a} g(x) = B $일 때, 


$$ \lim_{x\rightarrow a}f(x)g(x) = AB $$ 인 성질을 이용한 것이라고 이해하시면 될 것 같습니다.




두 번째 증명은 극한을 이용하는 것입니다. 


$ y = f(t) $ 이고 $ t = g(x) $이고 $ \Delta t \neq 0 $ 라고 할 때,


$$ \frac{\Delta y}{\Delta x} = \frac{\Delta y}{\Delta t} \cdot \frac{\Delta t}{\Delta x} $$ 입니다.


위의 식은 딱히 의미가 있는 것이 아니라 증명을 하기 위한 장치라고 생각하시면 될 것 같습니다.


여기서 $ y = f(t), t = g(x) $ 모두 미분가능하므로, 


$$ \lim_{\Delta t \rightarrow 0} \frac{\Delta y}{\Delta t} = \frac{dy}{dt}, \lim_{\Delta x \rightarrow 0} \frac{\Delta t}{\Delta x} = \frac{dt}{dx} $$


미분가능한 함수 $ t = g(x) $는 연속이므로 $ \Delta x \rightarrow 0 이면 \Delta t \rightarrow 0 $ 입니다. 따라서 다음이 성립하게 됩니다.



$$ \frac{dy}{dx} = \lim_{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x} $$


$$= \lim_{\Delta x \rightarrow 0}\left ( \frac{\Delta y}{\Delta t} \cdot \frac{\Delta t}{\Delta x} \right ) = \lim_{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta t} \cdot \lim_{\Delta x \rightarrow 0} \frac{\Delta t}{\Delta x} = \lim_{\Delta t \rightarrow 0} \frac{\Delta y}{\Delta t} \cdot \lim_{\Delta x \rightarrow 0} \frac{\Delta t}{\Delta x} $$


$$= \frac{dy}{dt} \cdot \frac{dt}{dx} $$


$$ \therefore \frac{dy}{dx}=y'=\frac{dy}{dz} \cdot \frac{dz}{dx}=f'(g(x)) \cdot g'(x) $$


위의 식 $ \frac{\Delta y}{\Delta x} = \frac{\Delta y}{\Delta t} \cdot \frac{\Delta t}{\Delta x} $ 은 단순히 상수끼리의 곱이었지만 $ \frac{dy}{dx}=y'=\frac{dy}{dz} \cdot \frac{dz}{dx}=f'(g(x)) \cdot g'(x) $은 라이프니츠 표기법으로, 편의를 위해 분수처럼 계산한 것일뿐  실제로는 나눗셈 연산이 불가능합니다. 



참고로 위의 증명과 그를 뒷받침하기 위한 증명 또한 KHAN ACADEMY에서 자세히 설명하고 있습니다.


위키피디아에서는 위의 방법들을 포함한 다양한 증명에 대해 설명하고 있습니다.


4. 예시


간단한 문제 몇 개를 풀어보겠습니다.


Ex1) $ y = (x^2 + 7)^3 $


sol) $ z = x^2 + 7, y = z^3 $ 라고 할 때,


$ \frac{dy}{dx} = \frac{dz}{dx} \cdot \frac{dy}{dz} $ 이므로


$ \frac{dy}{dx} = 2x(3z^2) = 6x(x^2 + 7)^2 $



Ex2) $ y = \frac{1}{(x^3 + 2x + 4)^5} $


sol) $ z = x^3 + 2x + 4, y = z^-5 $ 라고 할 때,


$ \frac{dy}{dx} = \frac{dz}{dx} \cdot \frac{dy}{dz} $ 이므로


$ (3x^2 + 2)(-5z^{-6}) = -5(3x^2 + 2)(x^3 + 2x + 4)^{-6} = \frac{-5(3x^2 + 2)}{(x^3 + 2x + 4)^{-6}} $





참고


http://bhsmath.tistory.com/184


http://newsight.tistory.com/223


http://blog.naver.com/PostView.nhn?blogId=alwaysneoi&logNo=100171733834



블로그 이미지

NCookie

,

이전까지는 블로그에 수학 수식을 보여주기 위해 이미지를 복사하거나 업로드했지만 너무 비효율적이라고 생각해서 다른 방법을 찾게 되었고 MathJax라는 것을 알게 되었습니다.


MathJax는 HTML 문서에서 수학 수식을 표현할 수 있게 해주는 오픈소스 스크립트라고 합니다.


그리고 수식 입력은 LaTeX나 MathML로 할 수 있습니다.


적용 방법은 간단합니다. <head>...</head> 사이에 아래 코드를 삽입하면 됩니다.


<script type="text/x-mathjax-config"
      MathJax.Hub.Config({
	      tex2jax: {
		      inlineMath: [['$','$'], ['\\(','\\)']]
      }
</script>
<script type="text/javascript" 
src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

여기서 중요한 것은 x-mathjax-config 가 MathJax.js 파일을 호출하는 코드보다 위에 있어야 한다는 것입니다.


x-mathjax-config는 MathJax를 사용할 때 설정 등을 할 수 있는 부분입니다.


기본적으로 MathJax를 사용하면 자동으로 줄바꿈이 됩니다. 그래서 줄바꿈을 하고 싶지 않다면 위와 같이 설정해주어야 합니다.



실제로 사용할 때 줄바꿈을 하고 싶다면 $$ x = 0 $$ ($$ 로 수식을 감싸면 됨)과 같이 하고 쭉 이어서 쓰고 싶으면 $ x = 1 $ ( $ 로 수식을 감싸서)로 하면 됩니다.


만약 MathJax가 제대로 적용이 되지 않는다면 편집기 말고 HTML 모드로 들어가서 $ $ 사이에 다른 내용들이 없는지 확인합니다. 저 같은 경우에는 span 태그가 사이에 있어서 제대로 적용이 되지 않았었습니다.

' > JS' 카테고리의 다른 글

[웹][JS] HTML 코드에서 스크립트의 위치  (0) 2016.10.26
블로그 이미지

NCookie

,

구글링을 하다가 apt 명렁어를 이용하여 패키지를 다운받는 경우를 종종 봤습니다. 처음에는  단순히 apt-get 을 줄여놓은 것으로 생각했었는데 아니더군요.


사실 apt 와 apt-get 은 다른 패키지 관리자이지만 하는 일이나 명령어들은 거의 비슷합니다. (아예 코드부터가 다릅니다)


인터페이스는 약간 다릅니다. 그리고 apt-get이 먼저 나오고 apt 가 나중에 나왔습니다.


apt-get 과 apt-cache 를 하나의 명령어로 사용하기 위해 apt 가 탄생했다더군요.


결과적으로는 굳이 그 둘을 구분해서 사용하지는 않아도 된다는 것입니다.


이것도 마찬가지로 상황에 따라 달라질 수 있겠습니다만...

블로그 이미지

NCookie

,

코드를 작성한 파일의 이름이 sqlite3.py 이기 때문에 되지 않는 것입니다.


파일 이름을 다른 것으로 변경해주면 정상적으로 작동합니다.

블로그 이미지

NCookie

,

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

,