업무
-
ssh 키 설정 + alias로 계정만으로 ssh 접속하기 2025.02.20
-
[vegeta] 부하 테스트 2023.11.14
-
[Gunicorn]max_requests와 max_requests_jitter 2023.11.09
-
[개발환경 구성] 모놀로식 아키텍처 2023.07.04
-
[mathplotlib] 한글 깨짐 2023.06.12
-
[Python] 이모지 제거 2023.02.08
-
sanic 오류 (python, pip 버전 문제) 2023.01.31
-
[Python] 클래스에서 다른 클래스 값 가져오기, 변경하기 2023.01.13
ssh 키 설정 + alias로 계정만으로 ssh 접속하기
1. SSH 키 생성 (ssh-keygen)
먼저 로컬 머신에서 SSH 키를 생성해야 한다.
* 키가 이미 존재하는지 확인
ls -l ~/.ssh/
id_rsa, id_ecdsa, id_ed25519 등 여러 키가 있을 수도 있음
보통 id_rsa 또는 id_ed25519가 가장 많이 사용됨
파일이 존재하면 건너뛰고, 없으면 새로 생성
* SSH 키 생성
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
옵션
-t rsa : RSA 방식의 키 생성
-b 4096 : 4069비트 길이 (더 강력한 보안)
-C "email@example.com" : 키에 주석 추가 (선택 사항)
키 생성 후 ~/.ssh 디렉토리에 id_rsa(개인키)와 id_rsa.pub(공개키)가 생성됨
2. SSH 에이전트에 키 추가 (ssh-add)
SSH 키를 사용하려면 SSH 에이전트에 추가해야 한다.
(이미 추가된 경우 생략 가능!)
* 키 추가하기
ssh-add ~/.ssh/id_rsa
* 추가된 키 확인
ssh-add -l
* 출력 예시
4096 SHA256:xxxxx... user@hostname (RSA)
3. 서버에 공개키 복사 (ssh-copy-id)
생성한 SSH 키를 서버로 전송하여 비밀번호 없이 접속할 수 있도록 설정
ssh-copy-id 계정@host
비밀번호를 한 번 입력하면 자동으로 ~/.ssh/authorized_keys 파일에 공개키가 추가된다.
* 정상적으로 추가되었는지 확인
ssh 계정@host "cat ~/.ssh/authorized_keys"
4. SSH 자동 로그인 테스트
이제 SSH 접속 시 비밀번호 없이 자동 로그인이 되어야 한다.
ssh user@192.168.1.100
만약 계속 비밀번호를 묻는다면, 다음 사항을 확인해야 한다.
- 서버의 ~/.ssh/authorized_keys에 공개 키가 제대로 추가되었는지
- ~/.ssh 디렉터리와 authorized_keys 파일의 권한이 올바른지
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
5. Alias 설정
매번 ssh user@1.2.3.4를 입력하는 대신, A 한 글자로 빠르게 접속할 수 있도록 alias를 설정할 수 있다.
echo "alias A='ssh A@1.2.3.4'" >> ~/.bashrc
source ~/.bashrc
이후 터미널에 A만 입력하여 바로 접속 가능하다.
'업무 > 메모' 카테고리의 다른 글
[vegeta] 부하 테스트 (0) | 2023.11.14 |
---|---|
[Gunicorn]max_requests와 max_requests_jitter (0) | 2023.11.09 |
[개발환경 구성] 모놀로식 아키텍처 (0) | 2023.07.04 |
[mathplotlib] 한글 깨짐 (0) | 2023.06.12 |
[Python] 이모지 제거 (0) | 2023.02.08 |
[vegeta] 부하 테스트
vegeta를 사용해 api 부하 테스트를 진행하려 한다.
vegeta 설치 (Mac OS)
brew update && brew install vegeta
vegeta 스크립트 작성
'@payload.json'은 POST 요청에 사용할 JSON payload를 담고 있는 파일 경로
해당 파일을 작성하고 적절한 JSON 데이터를 추가해야 함
# attack-rate-script.txt
POST http://host:port/api-name/
Content-Type: application/json
@payload.json
json payload.json 작성
# payload.json 예시
{
"key1": "value1",
"key2": "value2",
...
}
vegeta 실행
아래 예시는 duration 60초 동안 1초에 요청 5개씩 (rate=5) 보내는 것이다
vegeta attack -targets=attack-rate-script.txt -duration=60s -rate=5 --output results.bin; vegeta report results.bin
이후 아래 명령어로 plot을 볼 수 있다.
cat results.bin| vegeta plot > plot.results.html
json으로 결과를 볼 수도 있다.
vegeta attack -targets=attack-rate-script.txt -duration=60s -rate=5 | vegeta report -type=json > result.json
https://github.com/tsenart/vegeta
GitHub - tsenart/vegeta: HTTP load testing tool and library. It's over 9000!
HTTP load testing tool and library. It's over 9000! - GitHub - tsenart/vegeta: HTTP load testing tool and library. It's over 9000!
github.com
'업무 > 메모' 카테고리의 다른 글
ssh 키 설정 + alias로 계정만으로 ssh 접속하기 (0) | 2025.02.20 |
---|---|
[Gunicorn]max_requests와 max_requests_jitter (0) | 2023.11.09 |
[개발환경 구성] 모놀로식 아키텍처 (0) | 2023.07.04 |
[mathplotlib] 한글 깨짐 (0) | 2023.06.12 |
[Python] 이모지 제거 (0) | 2023.02.08 |
[Gunicorn]max_requests와 max_requests_jitter
max_requests
각 워커가 처리할 최대 요청 횟수
이 값을 너무 작게 설정하면 워커가 자주 재시작하여 자원 소비가 늘어날 수 있음
너무 크게 설정하면 메모리 누수 등으로 인해 자원이 과도하게 사용될 수 있음
max_requests_jitter
각 워커가 max_requests까지의 요청을 처리한 후에 최대 해당 값만큼의 무작위 지연을 추가할 수 있음
이를 통해 워커들이 동시에 재시작하는 것을 방지하고 부하를 분산할 수 있음
gunicorn -w 40 --max-requests 100 --max-requests-jitter 20 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:{service_port} app:app --preload
위 예시는
워커가 40개이고 각 워커가 100회의 요청을 처리하고 난 후, 0~20 중 랜덤만큼의 추가적인 요청을 처리한 후 재시작하는 것이다.
테스트 후 적절한 값으로 설정해야 한다.
'업무 > 메모' 카테고리의 다른 글
ssh 키 설정 + alias로 계정만으로 ssh 접속하기 (0) | 2025.02.20 |
---|---|
[vegeta] 부하 테스트 (0) | 2023.11.14 |
[개발환경 구성] 모놀로식 아키텍처 (0) | 2023.07.04 |
[mathplotlib] 한글 깨짐 (0) | 2023.06.12 |
[Python] 이모지 제거 (0) | 2023.02.08 |
[개발환경 구성] 모놀로식 아키텍처
개발 용도로만 사용할거라면 Ubuntu 컨테이너를 두고 내부에 모든 걸 설치해서 사용하면 된다.
- 1. docker run -itd --name Ubuntu_dev -v /mnt/d/Ubuntu_dev:/home/devSource -p 22:22 Ubuntu:20.04
- 2. docker exec -it 생성된 컨테이너
- 3. apt update
- 4. apt install python3.8 python3-pip -y
Python3.8과 pip를 설치했다.
이제 redis를 설치하고 싶으면 apt-get install redis로 설치하고,
pip install redis를 통해 client를 사용할 수 있다.
마찬가지로 airflow, chromadb 등도 전부 해당 컨테이너에 설치하면 된다.
개발이 완료된 후에는 운영에 맞춰 MSA 방식으로 바꿔야 함.
'업무 > 메모' 카테고리의 다른 글
[vegeta] 부하 테스트 (0) | 2023.11.14 |
---|---|
[Gunicorn]max_requests와 max_requests_jitter (0) | 2023.11.09 |
[mathplotlib] 한글 깨짐 (0) | 2023.06.12 |
[Python] 이모지 제거 (0) | 2023.02.08 |
sanic 오류 (python, pip 버전 문제) (0) | 2023.01.31 |
[mathplotlib] 한글 깨짐
1. https://ddiri01.tistory.com/306
matplotlib, networkx에서 한글사용하기(windows)
import matplotlib.font_manager as fm from matplotlib import rc font_name = fm.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name() rc('font', family=font_name) 이렇게 하면 matplotlib의 title axis의 한글이 정상적으로 나옴. network
ddiri01.tistory.com
2. https://jinyes-tistory.tistory.com/70
[matplotlib] 한글 폰트 사용하기 + Font family [] not found 에러 해결방법
* Font family [] not found. Falling back to DejaVu Sans 에러의 경우 4번부터 시작 1. 폰트 디렉토리 위치 import matplotlib matplotlib.matplotlib_fname() 2. mpl-data 디렉토리로 이동 matplotlibrc 파일을 실행(메모장) Ctrl + f
jinyes-tistory.tistory.com
'업무 > 메모' 카테고리의 다른 글
[Gunicorn]max_requests와 max_requests_jitter (0) | 2023.11.09 |
---|---|
[개발환경 구성] 모놀로식 아키텍처 (0) | 2023.07.04 |
[Python] 이모지 제거 (0) | 2023.02.08 |
sanic 오류 (python, pip 버전 문제) (0) | 2023.01.31 |
[Python] 클래스에서 다른 클래스 값 가져오기, 변경하기 (0) | 2023.01.13 |
[Python] 이모지 제거
test = '🐱💻🐱🐉🐱👓🐱🚀🐱👤'
remove_len = emoji.replace_emoji(test, replace='')
if len(remove_len) > 0:
print('replace_emoji로 지우면 이상함')
print(remove_len, len(remove_len))
remove_ascii = test.encode('ascii', 'ignore').decode('ascii')
if len(remove_ascii) > 0:
print('encode로 지우면 이상함')
print(remove_ascii, len(remove_ascii))
다른 이모지들은 위 두 가지 방법이 모두 잘 된다.
하지만 몇몇 이모지는 encode().decode()를 통해서 지워줘야 한다.
예를 들어,
😺 : 여우는 두 가지 방법이 모두 되지만
🐱👤🐱🏍🐱💻🐱🐉🐱👓🐱🚀 : 여우를 활용한 이모지(여우가 들어있음)들은 backspace로 한 번 지우면 여우가 나온다.
👩🏿🤝🧑🏿👨🏼🤝👨🏻👨🏾🤝👨🏻 : 지울 때마다 사람 한 명씩 지워지고 악수하는 손도 나온다. 피부색을 바꾸면 지우다보면 기본 노란 피부까지 나온다.
위처럼 사람이 손을 잡고 있음, 여우가 무슨 행동을 하고 있음 등에 해당하는 이모지들은 replace_emoji로 지워지지 않는다. 이유는 모르겠음
👩👩👧👩👩👦👦 : 이런 이모지도 한 번 지울때마다 사람 한 명씩 지워진다.
하지만 이건 기본 이모지를 변경하지 않아서(?) 인지는 몰라도 replace_emoji로도 지워진다.
결론 : encode().decode()로 지우자
'업무 > 메모' 카테고리의 다른 글
[개발환경 구성] 모놀로식 아키텍처 (0) | 2023.07.04 |
---|---|
[mathplotlib] 한글 깨짐 (0) | 2023.06.12 |
sanic 오류 (python, pip 버전 문제) (0) | 2023.01.31 |
[Python] 클래스에서 다른 클래스 값 가져오기, 변경하기 (0) | 2023.01.13 |
[Python] 리스트 안 딕셔너리 다루기 (0) | 2023.01.05 |
sanic 오류 (python, pip 버전 문제)
pip3 install sanic으로 설치를 했음에도
no module named sanic 오류 발생
해당 .py를 실행시켜보면
컨테이너에 python3.8을 설치해서 쓰고 있음
pip list를 확인해보면 sanic이 설치되어 있음
pip3.8 list에는 sanic이 없음
python3.8을 쓰고 있으면 그에 맞는 pip버전 내에 설치해야 한다.
pip3.8 install sanic으로 설치
됐다!
'업무 > 메모' 카테고리의 다른 글
[mathplotlib] 한글 깨짐 (0) | 2023.06.12 |
---|---|
[Python] 이모지 제거 (0) | 2023.02.08 |
[Python] 클래스에서 다른 클래스 값 가져오기, 변경하기 (0) | 2023.01.13 |
[Python] 리스트 안 딕셔너리 다루기 (0) | 2023.01.05 |
[Python] 날짜에서 요일 가져오기 (0) | 2023.01.04 |
[Python] 클래스에서 다른 클래스 값 가져오기, 변경하기
class A:
def __init__(self):
self.a = 3
def get_a(self):
return self.a
a = A()
a_num = print('A 클래스에서 a 가져오기 : ', a.get_a())
class B:
def change_a(self):
a_num = a.get_a()
print('B 클래스에서 A클래스의 a 가져오기 : ', a_num)
a_num = 5
print('B 클래스에서 A클래스의 a값 바꾸기 : ', a_num)
b = B()
b.change_a()
print('A 클래스에서 a 가져오기 : ', a.get_a())
class A:
def __init__(self):
self.a = 3
def get_a(self):
return self.a
a = A()
a_num = print('A 클래스에서 a 가져오기 : ', a.get_a())
class B:
a_num = a.get_a()
def change_a(self):
print('B 클래스에서 A클래스의 a 가져오기 : ', B.a_num)
B.a_num = 5
print('B 클래스에서 A클래스의 a값 바꾸기 : ', B.a_num)
b = B()
b.change_a()
print('A 클래스에서 a 가져오기 : ', a.get_a())
'업무 > 메모' 카테고리의 다른 글
[Python] 이모지 제거 (0) | 2023.02.08 |
---|---|
sanic 오류 (python, pip 버전 문제) (0) | 2023.01.31 |
[Python] 리스트 안 딕셔너리 다루기 (0) | 2023.01.05 |
[Python] 날짜에서 요일 가져오기 (0) | 2023.01.04 |
[Python] 문자열이 한 글자들로 이루어졌는지 확인하기 (0) | 2022.12.29 |