728x90
반응형

json, 별도 포멧의 파일에 데이터를 입력하고 사용하려면 데이터 가공 및 배포에 대한 허들이 발생합니다. 

 

트래픽이 많이 발생하지 않는다면 spreadsheet에서 데이터를 일괄 관리하고, 필요한 곳에서 spreadsheet 접속하여 갱신된 최신 데이터를 가져와 사용한다면 데이터 가공/배포에 대한 비용을 극적으로 줄일 수 있습니다. 

 

모듈은 google-spreadsheet를 사용하여 Google Spread Sheet API를 사용하며, document는 theoephraim.github.io/node-google-spreadsheet/#/ 를 참고하시면 됩니다.

 

API 사용을 위해서는 console.developers.google.com/에서 API 사용 허가를 설정해야 합니다. 

 

sheet 사용을 위한 프로젝트를 새로 만들어 보겠습니다. 

상단 프로젝트를 선택하고 "새 프로젝트"를 생성합니다. 

 

 프로젝트를 생성했다면 좌측 메뉴에서 라이브러리를 선택합니다. 

 

API 라이브러리 검색 란에 'sheet'를 입력한 후 "Google Sheets API" 를 선택, 그리고 "사용"버튼을 눌러주시기 바랍니다. 

 

이제 문서 사용을 위한 "사용자 인증 정보"를 세팅해야 합니다. 화면 좌측에서 "사용자 인증 정보"를 클릭한 후 "사용자 인증 정보 만들기"를 선택합니다.

 

 

 

 

 

'sheet-user'라는 이름을 입력 한 후 "완료" 버튼을 선택하여 계정 생성을 마무리 합니다.

 

다음으로 인증에 사용할 키를 생성하겠습니다.

 

서비스 계정 정보 중 우측의 작업 버튼을 누르면 "키 만들기" 메뉴가 있습니다. 이 메뉴를 선택하면 키 유형을 선택하는 다이얼로그가 뜹니다. 

JSON 을 선택 후 "만들기" 버튼을 누르면 키가 생성됩니다. 생성된 json 파일은 코드에서 인증을 위해 사용하게 됩니다.

 

이제 접근하고자 하는 spreadsheet 문서로 가서 "공유"버튼을 눌러 생성된 계정 ( 이 예제에서는 sheet-user@... 로 생성했던 계정을 말합니다.) 사용자 그룹에 편집자로 추가합니다. 읽기만 할 경우 뷰어로 추가하셔도 무방합니다.

 

계정을 추가한 후 문서ID를 복사해 둬야 합니다. 해당 문서가 열린 화면의 주소창에 아래 이미지 중 파락색으로 칠해진 부분이 해당 문서의 ID입니다. 이 값만 별로도 복사해 두시기 바랍니다. 

모든 준비가 마무리 되었습니다. 이제 코드로 해당 문서를 접근해 보겠습니다.

 

const {GoogleSpreadsheet} = require("google-spreadsheet");
const gs_creds = require("./eco-test-d2asdf22849b5bb4.json"); // 키 생성 후 다운된 json파일을 지정합니다.
const doc = new GoogleSpreadsheet("문서ID를 입력하세요.");

async function authGoogleSheet(){
	try{
		await doc.useServiceAccountAuth(gs_creds);
		await doc.loadInfo()
	}catch(err){
		console.log( "AUTH ERROR ", err)
	}
}
authGoogleSheet(); // 처음 시작할 때 문서 접속에 대한 인증을 처리하고 해당 문서를 로드합니다.

.
.
.

async function readFirstSheetRow(){ 
	var sheet = doc.sheetsByIndex[0]; // 첫번째 시티를 가져옵니다.
    var rows = await sheet.getRows({offset:3, limit:100}); // 세 번째 row 부터 100개 row를 가져옵니다.
    rows.forEach((ele)=>{
    	console.log( ele._rawData[0] , ele._rawData[1] ) // 읽어온 rows 중 현재row에서 첫 번째 컬럼과 두 번째 컬럼을 출력합니다.
    });
}
readFirstSheetRow();

 

위 코드를 실행해 보시면 해당 문서의 첫번째 sheet의 세번째 row 부터 100개를 읽어와 각 row의 첫 번째, 두 번째 컬럼의 정보를 화면에 출력합니다. 

 

더 많은 API는 이 문서를 참고하시기 바랍니다.

 

도움이 되셨길 바라며 이상 마치겠습니다.

반응형
728x90
반응형

pytesseractGoogle’s Tesseract-OCR Engine 용 래퍼입니다. (OCR : Optical Character Recognition, 광학 문자 인식)

 

이를 사용하여 이미지에서 숫자를 추출하는 과정을 정리해 보았습니다. 

 

pytesseract는 pip로 설치만 하고 끝나는 것이 아닌, 환경변수와 Tesseract-OCR의 별도 빌드 과정이 필요합니다. 

 

tesseract-ocr.github.io/tessdoc/Home.html 문서를 참고하여 빌드 후 설치합니다.

 

그리고 "고급 시스템 설정" -> "환경 변수" 에서 시스템 변수 혹은 사용자 변수에 "TESSDATA_PREFIX"라는 변수 이름으로 tesseract가 설치된 위치에 포함된 tessdata 의 전체 경로를 넣어준 후 시스템을 재시작합니다. 이는 윈도우에서는 pytesseract가 해당 시스템에 설치된 tesseract.exe를 실행하는 이때 언어 데이터를 TESSDATA_PREFIX에 설정된 경로에서 읽어오는데, 이를 위해 필요한 설정입니다.

 

추후 tessdata에는 github.com/tesseract-ocr/tessdata 에서 인식을 원하는 언어 데이터를 다운받아 삽입 후 사용할 수 있습니다. 

 

설치 과정이 끝났다는 가정하에 관련 샘플 코드를 작성해 보겠습니다. 

 

아래 샘플 코드는 화면의 특정 영역을 캡쳐하여 해당 영역에 포함된 텍스트 중 숫자만 추출하는 작업을 하는 코드입니다.

from PIL import ImageGrab # 화면의 특정 영역을 이미지로 캡쳐할 때 사용합니다.
from pytesseract import *
pytesseract.tesseract_cmd = "C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe" # 설치한 경로를 설정하세요.


def readDigitFromScreen(_rect):
    img = ImageGrab.grab(_rect) # 화면 중 _rect 영역을 이미지로 캡쳐합니다.
    
    digit=''
    try:
        text = image_to_string(img, lang='eng')
        numlist = re.findall("\d", text) # 문자를 한 자씩 확인하며 숫자만을 뽑아옵니다. 한번에 뽑고 싶다면 "\d+" 옵션을 사용하세요.
        for num in numlist:
            digit += num # 숫자는 문자열 형태로 numlist에 저장되니 이를 digit에 묶어줍니다.
    except TesseractNotFoundError: # Tesseract-OCR를 설치하지 않았다면 에러를 발생하고 종료합니다.
        print("you need to install Tesseract-OCR on your system")
        
    return int(digit) # digit에 string 형태로 정리된 문자를 integer로 변환하여 돌려줍니다.

 

최근 툴 제작에는 Python을 공부하면서 사용하고 있는데 C++로 제작할 때 생각하면 ... -0-;;; 편하긴 하네요. 편한만큼 조심해야 할 것들이 많긴 하지만요. :)

 

 

반응형
728x90
반응형

테스트 용 툴 제작하다 재밌어 보여서 동영상만 공개해 봅니다. 

 

Amazon Polly : aws.amazon.com/ko/polly/ , docs.aws.amazon.com/ko_kr/polly/latest/dg/API_Reference.html , pypi.org/project/boto3/

Google Translate API : pypi.org/project/googletrans/

 

엑셀 문서에 한글을 등록한 후 툴에서 오픈해 번역하고 싶은 언어를 추가 후 번역을 시도하면,

Google Translate API로 텍스트로 번역을 하고, Amazon Polly로 음성 파일을 만들어 저장합니다. 

해당 셀을 선택하면 음성 파일을 들을 수 있습니다.

 

 

 

반응형
728x90
반응형

자주 사용하는 툴들을 PyCharm에 External Tools에 연동하는 절차와 사용법을 기록합니다.

 

PyQt5 : pypi.org/project/PyQt5/

Qt Designer : pypi.org/project/PySide2/

PyUIC5 : pypi.org/project/pyqt5-tools/

PyInstaller : pypi.org/project/pyinstaller/

 

아래 내용은 PyCharm 2020.2.x, Python 3.8x와 Windows 10에서 진행된 내용입니다.

 

Qt Designer

Qt Designer는 Window를 디자인하기 위한 툴 입니다. 

 

PySid2를 설치하면 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Lib\site-packages\PySide2 에 설치됩니다.  (YOURNAME는 사용하는 계정으로 바꿔주세요.)

 

File -> Settings -> Tools -> External Tools 에서 + 아이콘을 눌러 툴을 설정합니다. 

 

Name에 "Qt Designer" 입력

Program에 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Lib\site-packages\PySide2\designer.exe 입력

Arguments에 $FilePath$ 입력

Working directory에 $ProjectFileDir$ 를 입력

 

등록이 완료되면 Tools -> External Tools 메뉴에서 Qt Designer를 확인할 수 있습니다. 

 

PyUIC5 

Qt Designer로 제작된 .ui 파일을 .py 파일로 변환해주는 툴입니다.

 

File -> Settings -> Tools -> External Tools 에서 + 아이콘을 눌러 툴을 설정합니다. 

 

Name에 "Ui2Py" 입력

Program에 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Scripts\pyuic5.exe 입력 (YOURNAME는 사용하는 계정으로 바꿔주세요.)

Arguments에 $FileName$ -o $FileNameWithoutExtension$.py 입력

Working directory에 $ProjectFileDir$ 를 입력

UI 파일을 열고 마우스 우측 버튼을 눌러 External Tools 메뉴에서 Ui2Py를 선택하면 ui파일을 py 파일로 변환합니다.

 

PyInstaller 

프로젝트를 단독으로 실행 가능한 파일로 만들어주는 툴입니다. 

 

File -> Settings -> Tools -> External Tools 에서 + 아이콘을 눌러 툴을 설정합니다. 

 

Name에 "PyInstaller" 입력

Program에 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Scripts\pyinstaller.exe 입력 (YOURNAME는 사용하는 계정으로 바꿔주세요.)

Arguments에 --onefile --windowed $FilePath$ 입력 (콘솔 응용 프로그램일 경우 --windowed 옵션을 삭제하시면 됩니다.)

Working directory에 $ProjectFileDir$ 를 입력

등록이 완료되면 Tools -> External Tools 메뉴에서 PyInstaller를 선택해 실행하면 빌드가 진행됩니다. 빌드 후 프로젝트 폴더에 dist 폴더가 생성되고 그 안에 실행 가능한 파일이 생성됩니다. 

 

프로젝트에 어떤 모듈을 설치했는지에 따라 간혹 "Failed to execute script ... " 라는 에러 메세지가 뜨면서 실행되지 않는 경우가 발생할 수 있습니다. 

 

이때는 --windowed 옵션을 제거 후 터미널 화면에서 실행해보면 어떤 모듈을 찾을 수 없어 실행이 안되는지 확인이 가능합니다.

 

이 문제가 발생하는 이유는 PyCharm의 경우 빌드환경을 툴에서 프로젝트 별로 운영하기 때문인데, 이는 해당 프로젝트에 venv로 시작하는 폴더명이 있는 것을 통해 알 수 있습니다. 

 

PyCharm에서 프로젝트를 만들면 기본적인 venv 폴더를 만들어 운영하며, 프로젝트에 설치한 모든 모듈들은 해당 프로젝트에만 종속적으로 설치됩니다. 설치 위치는 해당프로젝트폴더\venv\Lib\site-packages 입니다.

 

pyinstaller는 기본 설치 환경인 C:\Users\YOURNAME\AppData\Local\Programs\Python\Python38\Lib\site-packages 에서 모듈을 찾아 프로젝트에 포함시키기 때문에 PyCharm에서 프로젝트에 종속적으로 설치된 모듈의 경우는 찾을 수 없습니다. 

 

이를 해결하기 위해서는 터미널에서 다시 한번 관련 모듈을 설치한 후 재빌드하면 문제가 해결됩니다.

 

 

반응형
728x90
반응형

PyCharm 2020.1.x 이후 버전에 Packages 설치를 위한 저장소 설정에 문제가 있는지 패키지 리스트가 보이지 않네요.

 

찾아보니 daumkakao에서 저장소를 제공해서 pip 의 저장소 설정 변경 방법을 정리해 둡니다. 

 

저장소가 http로 되어 있어 몇 가지 세팅이 필요합니다.

 

 

우선 File -> Settings -> Project:your_project_name -> Project Interpreter 에서 '+' 기호를 누른 후 패키지 리스트가 잘 나오면 그냥 설치하시면 됩니다. ^^

 

만약 패키지 리스트가 안보인다면 하단의 "Manage Repositories"를 눌러 설정된 저장소를 삭제 후 "http://ftp.daumkakao.com/pypi/simple/"를 추가해 주세요.

이제 아래와 같은 패키지 리스크를 보실 수 있습니다. 그런데 저장소가 https가 아닌 http라서 trusted-host 옵션을 별도로 설정해야 설치가 가능합니다. 

 

원하는 패키지를 선택 후 우측 하단의 "Options" 버튼을 눌러 활성화 후 --trusted-host ftp.daumkakao.com 을 입력 후 인스톨 버튼을 누르시면 원하는 패키지를 정상적으로 설치하실 수 있습니다. 

(https는 아직 지원하지 않는 듯 하네요. 불편하지만 그래도 지원해줘서 무한 감사할 따름입니다. ^^)

 

반응형
728x90
반응형

타 팀에서 서비스 중인 DB 중 트랜잭션 로그 백업 처리 스케쥴을 등록하지 않아 디스크 용량이 0이 되버려서 이러지도 저러지도 못하는 경우가 있어 처리해준게 벌써 두 번째. 

 

RDBMS에서 기본 복구 모델 설정은 보통 full로 되어 있기 때문에 Management studio에서 축소 처리를 해도 백업 전에는 줄어들지 않습니다. 

 

DB 관리를 위해 트랜잭션 파일 옵션에 대해서는 두 가지를 신경써야 합니다. 

 

1. 사고 발생 시 복구가 필요한 DB 인가.. 

 

중요한 정보가 기록되고 사고 발생 시 분 단위로 정보를 복구해야 하는지를 생각해서 꼭 필요한 경우 full로 그렇지 않고 하루 혹은 주 단위로 전체 백업을 한 파일로 복구 하거나 혹은 분실되도 상관없는 DB는 simple로 설정하는게 좋습니다. 

 

2. 스케쥴러에 정기적으로 백업하는 옵션 설정. 전체 백업 주기에 맞춰 자동으로 삭제.

 

트랜잭션 로그는 정기적으로 백업을 해서 파일 크기를 일정하게 유지하는게 좋습니다. 그리고 전체 백업 파일이 생성되는 시점 이전의 트랜젝션 로그들은 존재 의미가 없습니다. 

 

예를들어 매주 월요일 0시에 전체 백업을 한다면 그 이전에 생성된 트랜젝션 로그 파일들은 자동 삭제되도록 설정하는게 좋습니다.

 

만약 최신 데이터 뿐만 아니라 1년전 정보를 특정 시간 간격 단위로 복구해야 한다면 그 기간안에 백업된 파일들은 유지해야겠죠.

 

 

그리고 간혹 트랜잭션 로그가 별 의미없는 DATABASE를 만들어 사용하는 경우가 있습니다. 

 

테스트 DB용, 로그 DB 등 ... 

 

테스트 DB의 경우 일정 기간 사용 후 삭제한다면 모를까.. 지속적으로 사용할 경우 트랜잭션 로그 설정을 잊지 말아야 합니다. 

 

로그  DB를 RDBMS에 기록한다는게 아이러니 하지만... 써야만 하는 상황이라면... 복구 옵션을 simple로 두고 문제 발생 시 언제든 삭제되도록 하는게 좋습니다. 

 

 

[복구 모델 변경 쿼리]

USE myDBName;
ALTER DATABASE myDBName SET RECOVERY FULL;   -- 쿼리 하나하나를 확인하며 복구가 필요한 경우
ALTER DATABASE myDBName SET RECOVERY SIMPLE;

[로그 파일 삭제]

DBCC SHRINKFILE (myDBName_log, TRUNCATEONLY)

파일 축소 시 DB 명은 select * from sys.database_files 로 타겟 DB명을 확인하세요. 일반적으로 트랜잭션 로그 파일은 DB명 뒤에 _log가 붙어 있습니다.

 

 

반응형

'개발 이야기 > DATABASE' 카테고리의 다른 글

MSSQL RECOVERY 옵션  (0) 2020.09.09
MSSQL 버전 별 암호화 지원 정리  (0) 2020.01.30
MSSQL Linked Server 설정 방법  (0) 2020.01.27
MariaDB, Galera Cluster, MaxScale 전체 정리  (0) 2019.07.04
SELinux for Galera cluster  (0) 2019.07.03
mariadb 시작 오류  (0) 2019.03.18
728x90
반응형

https://aws.amazon.com/ko/blogs/korea/amazon-ebs-update-new-elastic-volumes-change-everything/

 

Amazon EBS 업데이트 – 언제나 자유롭게 볼륨 유형 및 크기 변경 가능 | Amazon Web Services

AWS 고객은 서비스를 시작한 후, 사용자 트래픽 및 데이터 사이즈가 증가함에 따라 기존 볼륨을 수정하여 용량을 추가하거나 I/O 성능 특성을 변경해야 할 경우가 생깁니다. 이를 변경하기 위해, 2

aws.amazon.com

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/recognize-expanded-volume-linux.html

 

볼륨 크기 조정 후 Linux 파일 시스템 확장 - Amazon Elastic Compute Cloud

볼륨 크기 조정 후 Linux 파일 시스템 확장 EBS 볼륨 크기를 늘리고 난 후에는 파일 시스템 관련 명령을 사용하여 파일 시스템의 크기를 늘려야 합니다. 볼륨이 optimizing 상태가 되자마자 파일 시스�

docs.aws.amazon.com

2017년 발표된 신규 EBS가 출시되면서 EC2에서 EBS를 사용할 경우 저장 공간에 대한 탄력적인 운영이 가능해졌습니다. 

 

예를들어 용량이 부족할 때는 일정 비율 이상으로 자동 증가하는 방법들을 선택할 수 있게 되었죠.

 

최근 수동으로 용량을 증가할 일이 있어서 관련 내용을 정리해봤습니다. 

 

만약 해당 시스템이 현재 서비스 중인 시스템이라도 중단 없이 처리가 가능합니다. 하지만, EBS에 손실될 경우 문제가 될만한 중요한 정보가 있다면 스냅샷을 꼭 만든 후 진행하시기 바랍니다. 

 

스냅샷을 생성해두면 문제가 발생 시 기존 EBS를 해제하고 스냅샷으로 새로운 볼륨을 생성 후 기존 인스턴스에 연결할 수 있습니다. 

 

우선 AWS Console에서 EC2 >> EBS >> 볼륨을 선택합니다. 

그리고 수정이 필요한 볼륨을 선택한 후 "볼륨 수정"을 선택합니다.

그리고 필요한 볼륨으로 크기를 조정합니다.

이제 시스템에 접속해서 lsblk 명령으로 인스턴스에 연결된 블록 디아비스 정보를 확인합니다. 

 

현재 8G를 사용중이며 총 용량이 16G인 것을 확인할 수 있습니다. 

사용하지 않고 있는 8G를 xvda1에 추가해 보겠습니다. 

growpart 명령으로 파티션을 확장합니다. 디바이스 이름과 파티션 번호 사이에는 띄어쓰기가 있으니 유의하세요.

df 로 파일 시스템을 확인해보면 아직 이전 상태인 것을 확인 할 수 있습니다. 

xfs_growfs 명령으로 파일 시스템을 확장합니다. 

이후 df로 다시 확인하면 xvda1 의 용량이 8G 에서 16G로 확정된 것을 확인 할 수 있습니다.

 

확장된 volume은 다시 축소할 수 없으니 꼭 필요한 경우 진행하시고, 확정 전에 꼭 스냅샷을 만들어 두시는걸 추천드립니다.

 

복잡하진 않지만 찾아보지 않으면 알 수 없는 내용이라 간단히 정리해 보았습니다. 

 

조금이라도 도움이 되셨길 바랍니다. :)

반응형
728x90
반응형

일반적으로 시스템 부팅 후 자동으로 시작되도록 서비스를 등록할 때 systemctl 혹은 init.d 스크립트 등록하여 사용합니다. 

 

systemctl 혹은 init.d 스크립트를 등록하는 방법이 쉽지많은 않으며, 혹시 해당 서비스에 문제가 발생할 경우 서비스가 다운되면 다시 시작되지 않는 문제도 있습니다.

 

이를 해결하기 위해 upstart 같은 프로그램을 사용하여 간단히 해결할 수 있습니다. 하지만 이마저도 각 서비스 별로 별도 등록, 관리해야 합니다. 

 

만약 당신이 pm2를 사용하여 Node.js로 제작된 서비스를 관리하고 있다면 위의 모든 문제를 손쉽게 해결할 수 있습니다. 

 

pm2에 서비스를 등록, 중단, 삭제하는 방법은 아래와 같이 간단합니다. 

 

pm2 start your_app.js  >> 서비스 등록 및 시작하기
pm2 stop your_app      >> 서비스 중단하기
pm2 restart your_app.js>> 서비스 재시작하기
pm2 del your_app       >> 등록된 서비스 정보를 삭제하기

부트 스크립트에 추가하기 전에 당신의 서비스를 pm2에 모두 등록했다고 가정하고 진행하겠습니다. 

 

부트 스크립트와 관련해서 startup과 unstartup 명령만 알고 있으면 됩니다. 

 

startup은 해당 시스템의 init system을 찾아 pm2의 초기 실행 스크립트를 등록하고, 필요한 환경 변수 설정을 위한 값을 출력해 줍니다. 실제 환경 변수 등록과 부팅 스크립트에 등록을 위해서는 출력된 내용을 복사하여 실행해야 하니 해당 과정을 잊지 마세요. 

 

$ pm2 startup
[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/home/user/.nvm/versions/node/v14.7.0/bin /home/user/.nvm/versions/node/v14.7.0/lib/node_modules/pm2/bin/pm2 startup systemd -u user --hp /home/user
# 위 sudo env .. 라인 전체를 복사해서 실행하면 필요한 설정이 모두 적용됩니다.

끝!!!

반응형
728x90
반응형

>> EPEL(Extra Packages for Enterprise Linux) 저장소 활성화하기

https://aws.amazon.com/ko/premiumsupport/knowledge-center/ec2-enable-epel/

>> 원격접속을 위한 키 발급 및 설정

EC2는 기본적으로 생성 시 발급한 공개키를 사용하여 원격접속 할 수 있도록 설정되어 있습니다. EC2에 키 페어를 설정하는 방법은 아래와 같습니다.

 

EC2 생성 전에 키 페어로 가서 ...

"키 페어 생성" 버튼을 눌러 ppk를 생성합니다. 이때 비번 설정은 없으니 참고하세요. 

 

EC2 기본 설정을 완료 후 시작을 누르면 키 페어 설정 화면이 나옵니다. 여기서 새로 생성할 수도 있으며 생성된 키 페어를 설정할 수 있습니다. 

 

키 페어가 변경된 경우에 대해서는 이 링크를 참고하세요. 

 

이제 putty에서 Auth에 다운받은 ppk 파일을 설정합니다. 

그리고 ssh 연결 설정에서 host name에 public dns 값을 입력, 사용자에 ec2-user를 입력 후 연결할 수 있습니다. 

 

파일 이동을 쉽게 하기 위해 WinSCP를 사용하는 경우 아래 이미지를 참고해서 ppk 파일을 설정하면 됩니다. 

 

보안 그룹에서 접속할 instance의  inbound 설정에 ssh 연결을 위해 22 번 포트를 가능한 제한되고 안전한 PC에서만 접속할 수 있도록 접속 가능한 IP를 제한해야 합니다. 

 

예를들어 자신의 회사에서 사용하는 public ip가 1.1.1.0 ~ 1.1.1.255까지 사용하며 자신의 ip가 1.1.1.11이라고 가정해 봅시다. 

 

인바운드 규칙에서 소스에 값을 적용할 때는 CIDR 표기법으로 기록해야 합니다. 

 

만약 회사원 일부가 접속을 할 경우 1.1.1.0/24 로... 자신만 접속한다면 1.1.1.11/32로 설정하면 됩니다. 

 

혹시 원격접속을 "브라우저 기반 ssh 연결"하려면 추가 설정이 필요합니다. 

 

"브라우저 기반 ssh 연결"은 "웹 브라우저 -> EC2 Instance Connect -> EC2 Instance"의 과정을 거쳐 연결됩니다. 이때 EC2 Instance Connect은 각 지역별로 별도의 IP 대역이 할당되어 있습니다.  예를들면 서울 리전(ap-northeast-2)의 경우 13.209.1.56/29를 ssh의 포트에 같이 포함하여 적용되어 있어야 합니다. 이에 대한 상세한 내용은 https://ip-ranges.amazonaws.com/ip-ranges.json 파일을 참고하시면 됩니다.

 

>> VPC를 생성하면..

라우팅 테이블 , 네트워크 ACL, 보안 그룹이 자동으로 같이 생성됩니다.

>> 실행중인 EC2로 이미지 생성 시

실행중인 인스턴스로 이미지 생성을 하게 되면 인스턴스가 일시적으로 중단된 듯 한 상황이 발생할 수 있습니다. 주의하세요.

>> EC2에서 다른 EC2로 원격 접속하기

해당 EC2에 설정된 키 페어를 다운받고, ppk일 경우 pem 파일로 변경(https://aws.amazon.com/ko/premiumsupport/knowledge-center/convert-pem-file-into-ppk/)합니다.

$ sudo puttygen ppkkey.ppk -O private-openssh -o pemkey.pem

puttygen이 설치되지 않은 경우 putty(혹은 putty-tools) 패키지를 설치하면 됩니다. EC2의 경우 epel을 활성화되지 않을 경우 패키지를 찾을 수 없습니다. 

sudo ssh -i your-key.pem ec2-user@ec2-ip

>> node 설치 방법

https://docs.aws.amazon.com/ko_kr/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html

 

# download
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

# nvm 활성화
. ~/.nvm/nvm.sh

# nodejs 설치
nvm install node

#pm2 설치
npm install pm2 

 

 

반응형
728x90
반응형

Redis와 같은 VPC 안에 EC2를 생성했다고 가정합니다. 다른 VPC에 있을 경우 VPC Peering 설정이 필요하며 이 내용은 곧 다시 업로드할 예정입니다. 

 

일단 EC2에 redis-cli 설치를 위해 gcc를 설치합니다. redis를 별도 설치해되 되지만 ec2 에서는 redis-cli만 사용할 예정이니 redis 자체 설치를 하는 방법은 사용하지 않겠습니다.

 

 

sudo yum install -y gcc 

 

redis-stable 버전을 다운받아 빌드를 해야 하니 임시 폴더 혹은 프로그램 빌드를 위한 별도 폴더를 만들어 작업하실것을 추천드립니다.

 

wget http://download.redis.io/redis-stable.tar.gz && tar xvzf redis-stable.tar.gz && cd redis-stable && make

 

redis 자체를 쓰지는 않고 redis-cli만 사용합니다. redis-cli를 사용하기 쉽게 /usr/bin에 복사합니다. 

sudo cp src/redis-cli /usr/bin 

 

redis-cli가 잘 실행된다면 redis에 원격접속을 해봅니다.

 

redis-cli -h redis-endpoint-address

redis의 주소는 기본 엔드포인트나 리더 엔드 포인트나 상관없이 잘 연결됩니다. 

 

만약 접속이 안된다면 보안 그룹에 설정된 인바운드 설정에 port가 잘 열려 있는지 확인해야 합니다. 

 

VPC 의 보안 -> 보안 그룹에서 redis에 설정된 보안 그룹을 찾아 inbound 규칙에서 TCP 6379 포트 혹은 별도 설정한 redis 포트가 규칙에 적용되어 있는지 확인해 보세요.

 

아래와 같은 설정으로 규칙이 적용되어 있어야 합니다. 

 

 

이상입니다.

 

다음은 VPC Peering 설정 방법과 EC2와 Redis가 서로 다른 VPC, 다른 리전에 있을 경우 연동하는 방법을 정리해 보겠습니다.

반응형

+ Recent posts