본문 바로가기

Software Engineering

(83)
FTP 서버에 대해 배운 내용 (ubuntu, vsftpd) FTP 서버를 셋업하다 알게 된 내용들을 정리하였습니다. Ubuntu 20.04 / vsftpd FTP server를 사용하였습니다. 1. FTP 기본 개념FTP는 제어 연결, 데이터 연결 2개의 연결을 사용하여 파일을 송수신한다.제어 연결은목록 보기(ls), 다운로드(get), 업로드(put)과 같은 명령을 전송하는데 사용 된다.21번 포트를 기본값으로 사용한다. (사용자 정의 포트로 변경 가능)클라이언트가 서버에 접속하는 연결이다.제어 연결은 active/passive 모드와 상관 없이 공통 연결이다.제어 연결은 FTP 세션이 끝날 때 까지 유지 된다.데이터 연결은제어 연결에서 전송된 명령을 실행하기 위해 파일 데이터나 디렉토리 목록을 전송하는데 사용된다.데이터 전송이 필요할 때 일시적으로 생성되고,..
[실습 코드] 리팩토링 예제 # 리팩토링 전: 테스트하기 어려운 구조import redisimport pymysqlimport requestsimport jsonfrom typing import Dict, Anyclass MessageProcessor: def __init__(self): # 하드코딩된 연결 정보 self.redis_client = redis.Redis(host='localhost', port=6379, db=0) self.db_config = { 'host': 'localhost', 'user': 'user', 'password': 'password', 'database': 'mydb' ..
[MySQL] 환경 설정 파일로 sql_mode 변경하기 실행 환경Ubuntu 20.04MySQL 8.0.3bash설정 파일 위치 확인다음 명령을 실행하여 mysql이 설정 파일을 찾는 경로 우선순위를 확인한다.# -A 1 옵션은 찾은 라인의 다음 줄 1개를 같이 출력하는 옵션mysql --help | grep -A 1 "Default options" 아래와 같이 출력되면 순서대로 설정 파일이 적용된다. 가장 마지막에 읽은 설정이 최종적으로 적용된다.Default options are read from the following files in the given order:/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf/etc/my.cnf/etc/mysql/my.cnf~/.my.cnf : 유저 홈 디렉토리의 설정이 가장 높은 우선 순위를 ..
[streamlit] custom label 예제 label code# widget.pyimport streamlit as stfrom enum import Enumfrom typing import Literal, Optionalfrom libs.theme import Colorsdef label( text: str, width: Optional[int] = None, height: Optional[int] = None, forecolor: str = Colors.DARKSLATEGRAY, backgroundcolor: str = Colors.FLORALWHITE, font_size: int = 14, text_align: Literal["left", "center", "right"] = "center"): d..
[Linux] Disk 관리용 명령어 모음 사용 환경Ubuntu 20.04명령어디스크 사용량 확인df -h디스크 지정 경로 사용량 확인sudo du -sh /* 2>/dev/null | sort -hr | head -n 10디스크 하위 경로 포함 사용량 확인sudo du -h --max-depth=1 / | sort -hr | head -n 10디스크 확보 임시 조치# 임시 파일 삭제sudo rm -rf /var/log/*.gzsudo rm -rf /tmp/*sudo journalctl --vacuum-time=1dsudo apt-get cleansudo apt-get autocleansudo apt-get autoremove로그 파일 truncate (파일을 삭제하지 않고 크기를 0으로 만듦)sudo truncate -s 0 /var/log/m..
[MySQL] 사용자 계정 생성 및 권한 관리 방법 실행 환경MySQL 8.0Ubuntu 20.04MySQL 접속하기localhost에서 root 계정으로 접속합니다.# password 기반 인증을 사용하는 경우mysql -u root -p# auth_socket 인증을 사용하는 경우 localhost에서 비밀번호 없이 접속sudo mysql계정 인증 방식 확인하기 (plugin)auth_socket: sudo mysql로 비밀번호 없이 접속 가능mysql_native_password, caching_sha2_password: mysql -u root -p로 비밀번호 입력 후 접속 가능SELECT user, host, plugin FROM mysql.user WHERE user = 'root';+------+-----------+--------------..
[Linux] 서버 인증서 추출 및 시스템 추가 방법 실행 환경Ubuntu 20.04진행 방법OpenSSL을 사용하여 추출하려는 서버의 인증서를 추출한다.openssl s_client -connect google.com:443 -showcerts 출력되는 내용에서 -----BEGIN CERTIFICATE----- 부터 -----END CERTIFICATE-----까지 복사한다.여러 항목 출력되는 경우(certs chain) 마지막 항목이 주로 root certs 이므로 마지막 항목을 사용한다.시스템 인증서 파일을 편집하여, 가장 마지막 부분에 항목을 추가 한다.sudo vi /etc/ssl/certs/ca-certificates.crt해당 서버와 정상 핸드쉐이크가 동작하는지 테스트 한다.openssl s_client -connect google.com:44..
[MongoDB] MongoDB 스터디 1 몽고 디비는 json과 유사한 형태의 도큐먼트를 저장한다.도큐멘트는 직관적이고 모든 형태를 표현할 수 있다.컬렉션 = 도큐멘트 그룹데이터베이스 = 컬렉션 그룹출력은 json으로 저장은 bson으로 됨bson은 json 보다 더 많은 데이터 타입을 지원한다.ObjectID (_id) 는 PK이다. 지정하지 않으면 몽고디비가 자동 생성한다._id는 데이터 타입은 아니다.스키마가 자유롭지만, 벨리데이션/컨스트레인츠을 추가할 수 있다.임베딩과 레퍼런스로 데이터 관계를 표현 할 수 있다.임베딩임베딩을 통해 쿼리를 단순화 할 수 있다.네스티드 다큐먼트다.액세스 투게더, 스토어 투게더 원칙을 지킬 수 있다.조인을 예방한다.조회 성능을 높인다.한번의 쓰기로 업데이트 할 수 있다.단점도큐멘트를 계속 크게 만든다.메모리 ..