본문 바로가기

분류 전체보기189

JVM 과 Garbage Collection 동작 방식 Garbage Collection GC (Garbage Collection) 이란? 힙 메모리를 살펴보고 사용 중인 개체와 사용하지 않은 객체를 식별하고 사용하지 않는 객체를 삭제하는 프로세스이다. Java에서 메모리 할당 해제 프로세스는 GC (가비지 컬렉션)에 의해 자동으로 처리된다. 기본 동작 방식 Step 1: Marking (마킹) 사용 중인 메모리 조각과 사용하지 않는 메모리 조각을 식별하는 단계 Step 2: Normal Deletion (일반 삭제) 일반 삭제는 참조되지 않은 개체를 제거하여 참조된 개체와 포인터를 여유 공간으로 남김 Step 2a: Deletion with Compacting (삭제 및 압축) 성능을 더욱 향상시키기 위해 참조되지 않은 개체를 삭제하는 것 외에도 참조된 나.. 2022. 4. 7.
크롬 확장 프로그램(Chrome Extension)을 개발해보자 크롬 확장 프로그램 (Chrome Extension) 소개 Chrome Extension 이란? Chrome 브라우저의 작은 소프트웨어 프로그램이다. 활용분야 생산성 도구 웹 페이지 콘텐츠 보강 정보 집계 게임 동작방식 웹과 동일하게 HTML, Javascript 및 CSS와 같은 웹 기술을 기반으로 제공한다. 아키텍처 Manifest Chrome Extension에 중요한 정보를 제공하는 매니페스트 (설정) 파일 백그라운드 스크립트 (Background Script) 정의 : Chrome Extension 이벤트 핸들러로 리스너가 포함되어 있는 스크립트 이벤트가 발생하고 지시된 논리를 수행할 때까지 휴면 상태 필요할 때만 로드되고 유휴 상태가 되면 언로드됨 화면 UI (UI Elements) 사용자 인.. 2022. 4. 4.
[알고리즘] algosopt - 여행 짐 싸기 (동적계획법) 여행 짐 싸기 문제 정보 시간 제한 메모리 제한 2000ms 65536kb 문제 여행을 떠나기 전날까지 절대 짐을 싸지 않는 버릇이 있는 재훈이는 오늘도 비행기 타기 전날에야 가방을 싸기 위해 자리에 앉았습니다. 비행기 규정상 재훈이는 캐리어를 하나만 가지고 갈 수 있는데, 아무래도 가져가고 싶은 물건들이 캐리어 안에 다 들어가지 않을 것 같습니다. 재훈이는 가져가고 싶은 각 물건들의 부피와 얼마나 필요한지를 나타내는 절박도를 조사해 다음과 같은 목록을 만들었습니다. 물건 노트북 컴퓨터 카메라 XBOX365 커피그라인더 아령 백과사전 부피 4 2 6 4 2 10 절박도 7 10 6 7 5 4 캐리어의 용량이 정해져 있기 때문에 가져갈 수 있는 물건들의 부피 합은 캐리어의 용량 w 이하여야 합니다. 이때 .. 2022. 4. 1.
K6 성능 테스트 툴 K6이란? k6은 엔지니어링 팀의 성능 테스트를 쉽고 생산적으로 만드는 오픈 소스 부하 테스트 도구이다. k6은 무료이며 개발자 중심적이며 확장 가능하다. 주요특징 테스트 스크립트를 Javascript (ES6) 로 작성. jmeter (jmx) 대비 개발자 친화적이고, 시나리오와 함께 테스트 설정까지 코드로 구현 가능, 재사용을 위한 모듈화 가능 Jmeter 대비 더 작은 리소스로 성능 테스트 구현, 즉, jmeter 보다 동일자원에서 더 많은 트래픽을 생산 가능 window 설치방법 1. PowerShell을 활용하여 Chocolatey 패키지 매니저를 설치 C:\> Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointM.. 2022. 3. 31.
Ubuntu 20.04 LTS에 Ganglia 설치 Ganglia 란? Ganglia는 클러스터 및 그리드와 같은 고성능 컴퓨팅 시스템을 위한 확장 가능한 분산 모니터링 시스템이다. 클러스터 연합을 대상으로 하는 계층적 설계를 기반으로 한다. 데이터 표현을 위한 XML, 컴팩트하고 휴대 가능한 데이터 전송을 위한 XDR, 데이터 저장 및 시각화를 위한 RRDtool과 같이 널리 사용되는 기술을 활용하고 있다. 매우 낮은 노드당 오버헤드와 높은 동시성을 달성하기 위해 신중하게 설계된 데이터 구조와 알고리즘을 사용한다. 구현은 강력하고 광범위한 운영 체제 및 프로세서 아키텍처로 이식되었으며 현재 전 세계 수천 개의 클러스터에서 사용 중이다. 대학 캠퍼스와 전 세계의 클러스터를 연결하는 데 사용되었으며 2000개 노드가 있는 클러스터를 처리하도록 확장할 수 있.. 2022. 3. 31.
인프라 관점의 성능 최적화 성능 최적화 인프라 관점 서버에 과부하가 걸리게되면 소프트웨어로 해결하는데는 어느정도 한계가 있다. 그렇기때문에 그 다음 순으로 물리적인 인프라를 증설하는 방법을 강구해야한다. 그렇다면 어느 시점에 어느 타이밍에 인프라를 증설하는게 맞는 것일까? 하는 물음이 생기게 된다. 정답은 없지만 임계치를 정하고 개념을 알아야 대응이 가능하다. CPU CPU가 100%가 차지하게되어 서버를 증설하려고하면 늦어도 한참 늦는다. 그럴 경우 이미 어플리케이션이나 데이터베이스등은 제대로 동작을 하지 않을 시점으로 장애가 발생한 후이다. 일반적으로 70~80% 까지 임계치를 설정해두고 20% 정도는 항상 여유를 남겨놓아 시간적 여유를 두어 증설할 수 있다. MEM Java와 같은 어플리케이션일 경우 JVM 메모리 제한을 설.. 2022. 3. 30.
모노리틱 아키텍처 vs 마이크로 서비스 아키텍처 모노리틱 아키텍처 (Monolithic Architecture) 정의 간단히 말해서 "하나의 애플리케이션 내에 모든 로직들이 포함되어 있는 웹 서비스 구조" 이다. 예를 들어 쇼핑몰을 구축한다고 가정하면 주문관리, 상품관리 등 백엔드 로직뿐만 아니라 이를 표현하는 프론트 UX 로직까지 모든게 포함되어 있다. 상호 호출을 함수를 이용한 참조에 의한 호출 (Call-by-Reference) 구조를 취한다. 장점 소형 어플리케이션 서비스 개발시 편리하다. 하나의 통짜구조이므로 테스트와 배포가 편리하다. 단점 개발시 크기가 커서 빌드, 배포 시간, 서버의 기동 시간이 오래 걸린다. 개발 단위가 커질수록 협업하기 힘들다. 참조에 의한 호출 (Call-by-Reference) 구조를 취하기 때문에 전체 시스템에 대.. 2022. 3. 30.
Google API - 대량으로 구글 번역 API 활용해보기 문제점 번역할 텍스트가 적다면 오래 걸리진 않겠지만 번역할 텍스트 리스트가 많다면 아래와 같이 반복문을 활용하여 호출 시 굉장히 오래 걸려서 만족한 응답시간을 기대할 수 없을 것이다. 이유는 반복적으로 호출 시 내부적으로는 구글 API를 여러 번 호출하기 때문에 굉장히 오래 걸린다. 웹으로 서비스한다고 생각하면 타임아웃이 걸리거나 오래 걸려서 고객이 이탈할 수도 있다. from googletrans import Translator target_texts = ['안녕하세요', '밥 먹었습니까?'] translator = Translator() translated_texts = [] for target_text in target_texts: translated_texts.append(translator.tr.. 2022. 3. 14.
DNS에 대해 파헤쳐 보자 1. DNS 정의 DNS란? 쉽게 이야기하여 인터넷 주소를 이름으로 바꾸어주는 시스템을 말한다. DNS 필요성 TCP/IP 프로토콜은 개체를 구분하기 위해서 인터넷에서 호스트 연결을 유일하게 식별하는 IP를 사용한다. 하지만 사람들은 주소보다는 이름으로 사용하고자하는 경향이 나타나기 시작하면서 주소를 이름으로 바꾸어주는 시스템이 필요해졌다. 인터넷 규모가 작을때는 호스트 파일(host file)을 사용하여 맵핑이 가능했으나 오늘날에 와서는 규모가 커짐으로써 방대한 역할을 수행하기에는 한계가 있다. 2. 네임서버 도메인은 도메인 네임 공간의 서브트리이다. 도메인 네임은 서브트리의 맨 상위에 있는 노드에 위치한다. www . google . com . 3차 도메인 2차 도메인 1차 도메인 Root 도메인 영.. 2022. 3. 14.
pandas, pyplot로 데이터를 시각화해보자 1. Hello, Seaborn 패키지 로드 register_matplotlib_converters : matplotlib에 pandas 포맷터 및 변환기를 등록한다. %matplotlib inline : IPython 에서 제공하는 Rich output 대한 표현방식으로 도표와 같은 그림, 소리, 애니메이션들을 출력 (Rich output) 하는 것이다. import pandas as pd pd.plotting.register_matplotlib_converters() import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns print(">>> 로드 완료") 데이터 로드 피파 랭킹 데이터를 로드해보자 인덱스 컬럼을 데이터열로 설정.. 2022. 3. 9.
Google API - python을 활용한 구글 번역 API를 사용해보자 Googletrans란? 주의점 공식 Google 번역 API를 사용하지 않고 우회하여 translate.google.com 를 호출하여 사용하기 때문에 비정상적인 호출에 대하여 API가 구글에 의해서 Ban이 당할 수 있으나 빠르게 구현하여 사용할 수 있다는 것이다. ※ 실제 서비스 구축에 대해서는 안정성있는 공식 API를 사용해야한다. 라이센스 및 제한 Googletrans는 Google 번역 API를 구현한 무료 무제한 파이썬 라이브러리이다. 이것은 Google 번역 Ajax API를 사용하여 감지 및 번역과 같은 메소드를 호출한다. 특징 빠르고 안정적이다. translate.google.com에서 사용하는 것과 동일한 서버를 사용한다. 자동 언어 감지 대량 번역 맞춤형 서비스 URL 연결 풀링(r.. 2022. 3. 4.
TIP - 브라우저 드래그, 복사 붙이기 해제 방법 크롬 브라우저 1. 디버깅 창 (F12) 열기 크롬 브라우저의 디버깅 창 (F12)를 열어줍니다. 2. Disable JavaScript 체크 마우스 우클릭이나 복사 붙이기 방지는 JavaScript를 활용하여 막는 경우가 대부분이다. Perferences > Debugger > Disable JavaScript 를 체크하여 비활성화 시켜준다 비활성화 후에 복사나 드래그를 해보면 된다. IE 브라우저 경우 1. 인터넷 옵션 인터넷 옵션 > 사용자 지정 수준을 클릭한다. 2. 보안 설정 스크립팅 > Active 스크립트 > 사용 안 함 을 선택하고 확인을 눌러준다. 설정 후 IE는 반드시 F5를 눌러서 새로 고침 후에 복사나 드래그를 해보면 된다. 2022. 3. 4.
Pandas 구분자로 되어 있는 행 여러 줄 행으로 만들기 1. 데이터 로드 영화 데이터를 로드해본다. 데이터를 보면 "장르 (genres)" 컬럼의 값들이 | 구분자들로 나누어져 있는 것을 알 수 있다. 이 구분자를 쪼개서 다시 여러개의 행 데이터로 재구성을 하고자한다. movies = pd.read_csv("movies.csv") movies.head(10) movieId title genres 0 1 Toy Story (1995) Adventure|Animation|Children|Comedy|Fantasy 1 2 Jumanji (1995) Adventure|Children|Fantasy 2 3 Grumpier Old Men (1995) Comedy|Romance 3 4 Waiting to Exhale (1995) Comedy|Drama|Romance 4 .. 2022. 3. 3.
Pandas 를 활용해보자 Pandas 기초 사용법 1. 생성, 쓰기, 읽기 import pandas as pd 데이터 생성 pd.DataFrame({'컬럼1': [33, 40], '컬럼2': [42, 21]}) 컬럼1 컬럼2 0 33 42 1 40 21 pd.DataFrame({'철수': ['남자', 183], '영희': ['여자', 162]}) 철수 영희 0 남자 여자 1 183 162 pd.DataFrame({'철수': ['남자', 183], '영희': ['여자', 162]}, index=['성별', '키']) 철수 영희 성별 남자 여자 키 183 162 시리즈 pd.Series([1, 2, 3, 4, 5]) 0 1 1 2 2 3 3 4 4 5 dtype: int64 pd.Series([30, 35, 40], index=['.. 2022. 3. 2.
월리를 찾아라 개요 월리 이미지를 찾는 실험입니다. 데이터셋 : https://www.kaggle.com/kairess/find-waldo 참고소스 : https://github.com/kairess/find_waldo/blob/master/train.ipynb 구현 import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as patches import keras.layers as layers import keras.optimizers as optimizers from keras.models import Model, load_model from keras.utils import to_categorical from keras.callbac.. 2022. 3. 1.
ubuntu에 GitLab을 설치해보자 gitlab 설치 1. 리눅스 필수 패키지 설치 root@master:~# apt update root@master:~# apt-get install -y ca-certificates curl openssh-server 2. gitlab-ce 리포지토리 추가 root@master:~# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash root@master:~# cat /etc/apt/sources.list.d/gitlab_gitlab-ce.list # this file was generated by packages.gitlab.com for # the repository at.. 2022. 2. 22.
마스크 착용을 인식할 수 있을까? 개요 마스크를 착용한 사람과 착용하지 않은 사람을 인식하는 실험입니다. 데이터셋 : https://github.com/prajnasb/observations 참고소스 : https://pyimagesearch.com/2020/05/04/covid-19-face-mask-detector-with-opencv-keras-tensorflow-and-deep-learning/ 구현 import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.applications import MobileNetV2 from tensorflow.keras.layers import Avera.. 2022. 2. 22.
Snort를 활용한 네트워크 침입을 차단/방지 Snort 란? Snort는 오픈 소스 침입 방지 시스템(IPS)입니다. Snort IPS는 악의적인 네트워크 활동을 정의하는 데 도움이 되는 일련의 규칙을 사용하고 이러한 규칙을 사용하여 일치하는 패킷을 찾고 사용자에게 경고를 생성한다. 네트워크에 대한 룰을 정의해서 침입에 대한 탐지 및 방지를 위한 오픈소스라고 보면 될꺼 같다. Snort 특징 패킷 스니퍼 : 네트워크상의 패킷을 읽어서 보여주는 기능 패킷 로거 : 탐지한 패킷의 로그를 기록하여 트래픽 및 디버깅을 활용 NIDS (Network IDS) : 침입탐지 시스템, 네트워크 트래픽 분석, 공격 탐지 Snort Inline : 침입방지 시스템, 패킷 분석, 공격 차단 ※ IDS (Intrusion Detection System) 는 네트워크를 .. 2022. 2. 21.
[인공지능] 주차 공간을 알아낼 수 있을까? 개요 주차가 되어있는 데이터와 비어있는 데이터를 학습시켜 주차 공간을 알아내는 실험입니다. 아래 URL을 참고하여 구현하였음을 명시합니다. 데이터셋 : https://www.kaggle.com/daggysheep/find-a-car-park 참고소스 : https://www.kaggle.com/jonghyunlee1993/kaggle-park-lot-full-free-class-activation-mapping 구현 import os import glob import scipy import numpy as np import pandas as pd import matplotlib.pyplot as plt import cv2 import tensorflow as tf from keras.models impo.. 2022. 2. 18.
바코드, QR 코드 인식할 수 있을까? 개요 pyzbar 패키지를 활용하여 바코드, QR 코드를 인식해보는 실험입니다. 바코드, QR 코드 생성기 : https://wepplication.github.io/tools/barcodeGen/ 구현 from pyzbar import pyzbar import cv2 import matplotlib.pyplot as plt import os BASE_DIR = os.getcwd() IMG_DIR = os.path.join(BASE_DIR, 'images') sample_img = cv2.imread(os.path.join(IMG_DIR, 'sample.png')) plt.imshow(sample_img) gray_img = cv2.cvtColor(sample_img, cv2.COLOR_BGR2GRAY).. 2022. 2. 16.
지문을 인식할 수 있을까? 개요 사람의 지문을 인공지능 모델로 인식해보는 실험입니다. 아래 URL을 참고하여 구현하였음을 명시합니다. 데이터셋 : https://www.kaggle.com/ruizgara/socofing 참고소스 : https://www.kaggle.com/prasanjeetkeshriii/biometrics-project 구현 import numpy as np import matplotlib.pyplot as plt import keras from keras import layers from keras.models import Model from sklearn.utils import shuffle from sklearn.model_selection import train_test_split from imgaug .. 2022. 2. 15.
이미지 캡차를 인식할 수 있을까? 개요 여러 사이트를 돌아다녀보면 아래와 같이 흔히 찾아 볼 수 있는 이미지 캡차 (CAPTCHA)를 인공지능 모델로 인식해보는 실험을 하려고한다. ※ CAPTCHA는 HIP 기술의 일종으로, 어떠한 사용자가 실제 사람인지 컴퓨터 프로그램인지를 구별하기 위해 사용되는 방법이다. 아래 URL을 참고하여 구현하였음을 명시한다. 데이터셋 : https://github.com/AakashKumarNain/CaptchaCracker/raw/master/captcha_images_v2.zip 참고 소스 https://www.kaggle.com/xinlux/cnn-rnn-ctc https://keras.io/examples/vision/captcha_ocr 구현 import os import cv2 import num.. 2022. 2. 14.
이미지 유사도 embedding 검증 목표resnet50 모델을 사용하여 이미지 전체 데이터에 관해서 임베딩을 하여 유사한 거리에 있는 이미지를 추천한다.사전준비이미지 분류가 되어있는 폴더 안에 이미지가 N장 준비되어 있다. 이 파일들을 가지고 데이터셋을 생성하고 유사도를 검증해 볼 생각이다.데이터셋 준비from mpl_toolkits.mplot3d import Axes3D from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np import pandas as pd import os import sklearn# 데이터가 많으므로 테스트에서는 1000건만 처리.. 2021. 12. 29.
Kubernetes - Helm (헬름) Helm (헬름) 이란? 헬름은 쿠버네티스 애플리케이션 관리하는 도구이다. 헬름 차트는 복잡한 쿠버네티스 애플리케이션도 편리하게 정의하여 설치하거나 업그레이드할 수 있다. 아키텍쳐 주요 특징 복잡성 관리 차트는 매우 복잡한 애플리케이션도 표현하고, 반복적인 애플리케이션 설치를 제공하며, 단일 권한으로 서비스할 수 있다. 쉬운 업데이트 즉시(in-place) 업그레이드와 커스텀 훅을 통해 업데이트하는 수고를 줄여줄 수 있다. 간단한 공유 차트는 버전 관리, 공유, 퍼블릭이나 프라이빗 서버 호스팅이 편리하다 롤백 helm rollback을 사용하여 릴리스를 예전 버전으로 간편하게 되돌릴 수 있다. 주요 개념 3가지 차트 쿠버네티스 애플리케이션의 인스턴스를 생성하는 데에 필요한 정보의 꾸러미이다. 설정 릴리스.. 2021. 12. 28.
Hadoop - Hive (하이브) 설치 MySQL 설치 1. MySQL 패키지 설치 hadoop@hadoop-001:~$ sudo apt-get update ... * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage 84 updates can be applied immediately. hadoop@hadoop-001:~$ sudo apt-get install mysql-server -y ... Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service. mysql-server (8.0.27-0ubuntu0... 2021. 12. 24.
Hadoop 클러스터 설치 (고가용성) - 2 설치 계획 하둡 3.3.0 버전 설치 hadoop-001 서버 hadoop-002 서버 hadoop-003 서버 JournalNode JournalNode JournalNode NameNode NameNode - DataNode DataNode ResourceManager NodeManager NodeManager JobHistoryServer JobHistoryServer Zookeeper Zookeeper Zookeeper Kafka Kafka Kafka 사전 설정 1. hosts 파일 추가 마스터 노드와 데이터 노드를 hosts 파일에 추가해준다. 물리서버면 설정할 필요없습니다. 필자는 VirtualBox를 활용하여 테스트하였습니다. # hadoop 20.200.0.110 hadoop-001 20... 2021. 12. 20.
kafka 카프카 설치 1. 다운로드 및 압축해제 hadoop@hadoop-001:~$ sudo curl -o /usr/local/kafka_2.13-3.0.0.tgz http://mirror.apache-kr.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 82.3M 100 82.3M 0 0 2716k 0 0:00:31 0:00:31 --:--:-- 2397k hadoop@hadoop-001:~$ sudo mkdir -p /usr/local/kafka && sudo tar -xvzf /usr/local/kafka.. 2021. 12. 20.
Hadoop 클러스터 설치 (고가용성) - 1 HDFS 고가용성 구성 QJM(Quorum Journal Manager) 주키퍼 설치 1. 다운로드 및 압축해제 hadoop@hadoop-001:~$ sudo curl -o /usr/local/apache-zookeeper-3.7.0-bin.tar.gz http://apache.tt.co.kr/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 11.8M 100 11.8M 0 0 4001k 0 0:00:03 0:00:03 --:--:-- 4003k hadoop@had.. 2021. 12. 20.
Hadoop 클러스터 설치 (기본) 설치 계획 1개의 마스터 노드와 2의 데이터 노드로 클러스터를 구성 하둡 3.3.0 버전 설치 hadoop-001 서버 hadoop-002 서버 hadoop-003 서버 NameNode SecondaryNameNode - DataNode DataNode ResourceManager NodeManager NodeManager JobHistoryServer 사전 설정 1. hosts 파일 추가 마스터 노드와 데이터 노드를 hosts 파일에 추가해준다. 물리서버면 설정할 필요없습니다. 필자는 VirtualBox를 활용하여 테스트하였습니다. # hadoop 20.200.0.110 hadoop-001 20.200.0.102 hadoop-002 20.200.0.103 hadoop-003 2. ssh 공개키 생성 및.. 2021. 12. 17.
하둡 (hadoop) 이란? 하둡이란? 하둡은 하나의 성능 좋은 컴퓨터를 이용하여 데이터를 처리하는 대신, 적당한 성능의 범용 컴퓨터 여러 대를 클러스터화하고, 큰 크기의 데이터를 클러스터에서 병렬로 동시에 처리하여 처리 속도를 높이는 것을 목적으로 하는 분산처리를 위한 오픈소스 프레임워크라고한다. 구성요소 Hadoop Common : 하둡의 다른 모듈을 지원하기 위한 공통 컴포넌트 모듈 Hadoop HDFS : 분산저장을 처리하기 위한 모듈. 여러개의 서버를 하나의 서버처럼 묶어서 데이터를 저장 Hadoop YARN : 병렬처리를 위한 클러스터 자원관리 및 스케줄링 담당 Hadoop Mapreduce : 분산되어 저장된 데이터를 병렬 처리할 수 있게 해주는 분산 처리 모듈 Hadoop Ozone : 하둡을 위한 오브젝트 저장소 장.. 2021. 12. 17.
728x90
반응형