11월, 2019의 게시물 표시

Software Security1

Bug vs Vulnerability Bug: 소프트웨어에서의 모든 결점을 통칭 Vulnerability: 공격자에게 사용될 수 있는 bug 웹 취약점 종류: CSS, CSRF CSRF(사이트 간 요청 위조, Cross Site Request Forgery):   불특정 다수를 대상으로 로그인 된 사용자가 공격자가 의도한 행위를 하게 된다.   조건 2가지: 위조 요청을 전송하는 서비스에 로그인 된 상태 + 피싱 사이트에 접속   페이스북에 로그인 돼있고(항시 로그인 상태라면) 피싱 사이트의 어떤 버튼이 하는 행위가 페이스북에서 특정한 글을 하는 행위로 연결돼있다면 그 버튼을 누르는 순간 그 계정으로 그 행위가 이루어진다.   방어 방법: Referrer 검증 Security Token 사용(CSRF Token)   Referrer 검증: Back-end에서 request의 referrer을 확인하여 domain과 일치하는 지 확인한다.   Security Token: 사용자의 세션에 난수 값을 저장하고 back-end에서 요청을 받을 때 마다 세션 토큰 값과 요청의 토큰 값이 같은 지 검증한다. --------------------------------------------------------------------------- Shellcode: 기계어 명령들. 원하는 동작을 하도록 한다. Platform dependent하다. Buffer overflow: 데이터를 검사하는 과정에서 그 데이터를 저장할 메모리 위치(크기)가 유효한지를 검사하지 않아 발생한다. 데이터가 담긴 위치 근처에 있는 값이 손상되고 프로그램에 영향을 미칠 수 있다. 스택 영역의 BOF로는 RET값을 변조하는 공격이 있다. BOF가 일어나는 배열에서 RET값이 저장되는 공간까지의 거리를 구해서 RET값을 변조한다. Use After Free 힙은 런타임 시 할당되는 영역인데 바이너리가 실행되고...

Ubuntu 18.04 Hadoop Installation

Oracle Java 11을 설치한다. 하둡을 위한 user를 만들고 그 사용자에 key-based ssh를 설정해준다. adduser hadoop su - hadoop ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys localhost를 hadoop user에 SSH한다. ssh localhost exit 하둡 소스를 다운받는다. tar xzf hadoop-3.1.2.tar.gz mv hadoop-3.1.2hadoop 하둡이 사용하는 환경 변수들을 설정해준다. ~/.bashrc 파일 마지막에 추가해준다.export HADOOP_HOME=/home/hadoop/hadoop export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin 변경된 설정을 적용한다. source ~/.bashrc gg.. ------------------------- Reference https://tecadmin.net/setup-hadoop-on-ubuntu/

Hadoop MapReduce Tutorial - WordCount

하둡과 자바 설치를 확인한다. hadoop version javac -version 아래 링크에서 소스 코드를 받는다. https://www.dropbox.com/s/yp9i7nwmgzr3nkx/WordCount.java?dl=0 튜토리얼 디렉토리에 소스코드를 저장한다. 튜토리얼 디렉토리에 input_file 디렉토리를 만든 뒤 그 안에 input.txt를 만든다. 튜터리얼 디렉토리에 자바 클래스 파일을 위한 디렉토리를 생성한다. HADOOP_CLASSPATH 환경을 설정한다. export HADOOP_CLASSPATH=$(hadoop classpath) 설정을 확인한다. echo $HADOOP_CALSSPATH HDFS에 디렉토리를 만든다. hadoop fs -mkdir /WordCountTutorial 지금 만든 이 디렉토리 안에 input을 위한 디렉토리를 만든다. hadoop fs -mkdir /WordCountTutorial/Input HDFS에 제대로 만들어졌는 지 확인한다. localhost:50070 -> utilities input 파일을 HDFS로 업로드한다. hadoop fs -put <local input file path> <HDFS input directory> HDFS에서 업로드를 확인한다. 자바 소스 코드가 있는 디렉토리로 가서(튜토리얼 디렉토리) 자바 코드를 컴파일 한다. javac -classpath ${HADOOP_CLASSPATH} -d <자바 클래스 파일을 위한 디렉토리> <소스 코드> 자바 클래스 파일 디렉토리에서 만들어졌는 지 확인한다. 이 output 파일을 하나의 jar 파일로 만든다. jar -cvf <jar파일 이름> -C <자바 클래스 디렉토리>/. 이 jar파일을 Hadoop에서 실행시킨다. hadoop jar <jar file> <소스코드의 class ...

Hadoop MapReduce

간단한 단위 작업을 처리하는 Map과 그 결과물을 모아서 집계하는 Reduce 단계로 구성된다. 이 작업들은 병렬로 처리가 가능하여 여러 컴퓨터에서 동시에 작업을 처리하여 속도를 높일 수 있다. 하둡 v1의 작업 단위는 Job이고 v2의 작업 단위는 Application이다. YARN 아키텍쳐가 도입되면서 이름이 바뀌었지만 동일하게 관리된다. Job은 Map Task와 Reduce Task로 나뉘고, Task는 Attemp단위로 실행된다. 실행 중 오류가 발생하면 설정된 횟수만큼 자동으로 반복한다. 맵의 입력은 InputSplit단위로 분할된다. 스플릿이 작으면 작업 부하가 분산되어 성능을 높일 수 있지만 너무 작으면 작업 개수가 증가하고 맵 작업 생성을 위한 오버헤드가 증가해서 오히려 느려질 수 있다. 일반적으로 가장 적절한 스플릿 크기는 데이터 지역성의 이점을 얻을 수 있는 HDFS블록의 기본 크기인 128MB이다. 맵 작업의 결과는 로컬 디스크에 임시저장된다. 리듀스 작업의 입력으로 쓰이는 임시 결과물이기 때문이다. 리듀스 작업은 지역성의 장점이 없다. 리듀스 작업의 결과는 HDFS에 저장된다. 리듀스 작업이 없는 경우: raw data를 읽고 바로 쓰는 경우. 매퍼 수만큼 파일이 생성된다. 리듀서가 하나인 경우: 모든 데이터의 정렬작업과 같은 경우. 시간이 오래 걸린다. 리듀서가 여러개인 경우: 리듀서의 수만큼 파일이 생성된다. 하둡은 잡의 진행 상황을 확인할 수 있는 카운터를 제공한다. 맵리듀스 처리 단계 1. Input: 데이터를 읽어서 맵으로 전달 2. Map: 입력을 분할하여 키별로 데이터를 정리 3. Combine(로컬 리듀서): 네트워크를 타고 넘어갈 크기를 줄이기 위해 맵의 결과를 정리 4. Partition: 맵의 출력 결과 키 값을 해쉬 처리하여 어떤 리듀서로 넘길 지 결정 5. Shuffle: 각 리듀서로 데이터 이동 6. Sort: 리듀서로 전달된 데이터를 키 값 기준으로 정렬 7...

postgresql vs sqlite

이미지
기본적으로 SQLite는 embedded 데이터베이스이다. 즉, 앱 안에서 돌아간다. 반면 PostgreSQL은 클라이언트 서버를 바탕으로 작동한다. 따라서 세팅을 하고 실행하기 위해서 DB 서버가 필요하다. <SQLite> <PostgreSQL> SQLite는 다섯가지의 타입을 지원한다: BLOB, NULL, INTEGER, TEXT, REAL Postgresql은 거의 모든 타입을 지원한다. 라이브러리 측면에서는 PostgreSQL이 훨씬 크다. SQLite는 500kb정도로 작다. SQLite는 데이터베이스를 그냥 하나의 디스크 파일에 저장해서 복사 이동이 용이하다. PostgeSQL은 파일로 export하고 다른 서버에 업로드해야 이동이 가능하다. SQLite는 minimal design이기 때문에 속도가 빠르다. 하지만 복잡한 작업에서는 PostgreSQL이 효율적이다. PostgreSQL은 ACID를 따른다. ACID stands for Atomicity, Consistency, Isolation, Durability. SQLite는 기본 작업에 제한되는 반면 PostgreSQL은 확장이 용이하다. SQLite를 쓰는 것이 좋은 경우:   다른 앱과의 상호 작용이 없고 단독으로 동작하는 앱.   확장할 일이 없는 작은 앱.   디스크에서 바로 읽거나 써야되는 앱   IoT 장치. PostgreSQL를 쓰는 것이 좋은 경우:   데이터의 integrity와 reliability가 중요할 때.   복잡한 작업을 할 수 있어야 할 때. ------------------------------------------- Reference https://tableplus.com/blog/2018/08/sqlite-vs-postgresql-which-database-to-use-and-why.html

Hadoop

이미지
HDFS Hadoop Distributed File System 데이터 저장을 위한 것. NameNode(master) DataNode(slave)가 있다. 데이터노드는 여러개 있다. 데이터를 여러 블록으로 나눠서 저장한다. 기본값은 128메가인데 바꿀 수 있다. 반응속도보다는 시간당 처리량에 최적화 돼있다. 한번 쓰고 여러번 읽는 모델에 적합하다. 즉, write가 한번 있으면 수정이 없는 모델에 적합하다. 계산 할 때 자료가 워낙 크니까 자료를 옮기기 보다는 계산 작업을 자료 쪽으로 옮긴다. 데이터노드에서 직접 알고리즘을 처리하는 건가. 이걸 데이터 지역성이라 한다. 네임노드에 저장되는 메타데이터는 네임스페이스와 블록 정보가 담겨있는 Fsimage파일과, 파일의 생성, 삭제에 대한 트랜잭션 로그, 메모리에 저장하다가 주기적으로 생성되는 Edits파일이 있다. 네임노드가 구동되고 나면 Edits파일이 빠른 속도로 주기적으로 생성된다. 이 때문에 디스크 부족이 발생하고 재구동 되는 시간도 느려진다. 따라서 세컨더리 네임노드가 Fsimage와 Edits파일을 주기적으로 머지해서 Edits파일을 삭제하기 때문에 디스크 부족 문제를 해결한다. Yarn Yet Another Resource Negotiator Cluster resource management 노드의 뭉텅이를 관리한다. Resource Manager(master) NodeManager(slave)가 있다. 하둡2.0부터 제공되는 리소스 관리 플랫폼으로 MapReduce의 단점을 보완한다. 하둡1.0에서는 MapReduce의 JobTracker가 두 가지 기능을 했는데 하나는 클러스터 전체의 리소스 관리이고 다른 하나는 잡 스케쥴링 및 모니터링이다. TaskTracker는 slave node에서 map reduce 작업을 수행했다. YARN(하둡2.0)에서는 JobTracker의 기능은 ResourceManager, Application Master의 두 가지 프로세...

Big Data and Hadoop

빅데이터 데이터가 너무 크고 복잡해서 수작업 또는 기존의 프로세싱 툴로는 처리하기 힘들 때. Web logs, sensor network, social media, internet pages, scientific research, etc. 3v: volume, velocity, variety 데이터의 종류 Structured data Tabular format으로 나타낼 수 있는 데이터. Mysql 등등 Semi-structured data Formal data model이 없는 데이터. XML 파일 등등 Unstructured data Pre-defined model이 없는 데이터. Text file 등등 빅데이터를 쓰면 Understand and navigate big data sources. Manage and store a huge volume of a variety of data. Process data in reasonable time. Ingest data at a high speed. Analyze unstructured data. Bear faults and exceptions. 2가지 challenges How to handle the system uptime and downtime? Using commodity hardware for data storage and analysis. Maintaining a copy of the same data across clusters. How to combine data accumulated from all systems? Analyzing data across different machines. Merging of data. 하둡 용어 commodity hardware: cluster를 만들 수 있는 PC cluster: 네트워크에서 시스템간의 연결된 묶음 node: 네트워크 장치를 통해 서로 연결된 commodity server Ha...

Machine Learning Basic

Machine Learning Experience E, task T, performance measure P. 어떤 T에 대해서 E를 통해 P를 향상시킨다. E, T, P를 명확히 하고 시작해야한다. 축구를 예로 들면, T: 게임 이기기, P: 골의 수, E: 패스, 움직임, 수비 등등.. Classification: 결과가 불연속하다. 손글씨 인식하는 것 등등. 어떤 사진에 대해서 그게 어떤 숫자인 지를 알아낸다. 0~9중에서니까 discrete한 결과이다. 이건 0-1 loss function을 쓴다. 맞으면 1 틀리면 0. 레이블된 데이터를 준다. 어떤 그림에 대해 그게 어떤 숫자인지를 알려줘서 학습시킨다. Regression: 결과가 연속적이다. 회귀. 이때는 L2 loss function을 쓴다. 실제랑 얼마나 떨어졌는지를 계산해서 그걸 최소로 시키는 것이다. 이때도 x가 뭐일 때 y는 뭐가 돼야돼라는 걸 알려줘서 학습시킨다. 그래서 새로운 x에 대해서도 y를 나타낼 수 있도록. Clustering: 레이블이 아예 없는 경우. 이렇게 레이블이 없는 경우는 unsupervised. 위에 두개는 supervised이다. 이것도 L2 loss function을 쓸 수 있다. 이건 레이블된 데이터가 없다. 그냥 데이터들이 주어지고 그걸 어떤 기준으로 뭉텅이로 모으는 것. 줄이고자 하는 거를 objective function 혹은 cost function이라고 한다. Gradient descent method: 이 cost function이 주는 방향으로 계속 이동한다. 어떤 임의의 지점에서 시작해서 cost function이 줄어드는 방향으로 이동하다가 다시 증가하면 그만둔다. 그런데 이게 적용되지 않는 경우가 있다. Local minimum만 찾을 수 있다. Local minima problem. 데이터를 모아왔으면 어떤 모델을 적용해야할 지가 중요하다. 나이에 따른 운동능력을 분석한다고 할 때 선형모델을 ...

First Post

이미지
This is a temporary post.