카테고리

기술

목록닫기 ▲
⊞ 𝄘 ⊟
[Python] venv(가상환경) 사용법
1. 가상환경의 필요성 Python 프로젝트에서 패키지를 설치했을 때 패키지들 끼리 충돌 이슈를 겪지 않기 위해 개발환경 세팅에 많은 시간을 소모합니다. 불필요한 리소스 낭비를 막기 위해...
2026. 04. 07.
2026. 04. 07. 조회수 표시생략
[Let’s Encrypt] 와일드카드 인증서 발급 & Cloudflare 자동화 방법
1. 개요 Let’s Encrypt 와일드카드 인증서(*.domain.com)는 보안상 DNS-01 챌린지 방식만 지원합니다. 기존의 수동 방식(Manual)은 갱신 때마다 DNS TXT 레코드를 직접 수정해야 하는 번거로움이 있어, Cloudflare...
2025. 04. 28.
2025. 04. 28. 조회수 표시생략
mysql 설정 my.cnf
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0skip-external-locking # 외부(TCP/IP) 잠금비활성skip-name-resolve  # 필수. 대신 도메인 기준으로 사용 못한다.# wait_timeout=200  # 커넥션 종료후 언제까지 기다릴지...
2024. 09. 01.
2024. 09. 01. 조회수 표시생략
Let’s encrypt 인증서 발급할 때 유의사항
Let’s encrypt는 Apache2나 Nginx를 운영할 때 SSL 인증서를 무료로 발급해 주는 툴이다. 구글, 모질라 재단 등에서 후원하고 있는 프로젝트이기도 하다. Let’s encrypt는 리눅스 터미널에서 명령어를...
2024. 08. 18.
2024. 08. 18. 조회수 표시생략
Ubuntu Server 18.04 버전에서 “커널이 정상적으로 부팅되지 않고 부트로더 상태에 멈춰있는 경우에 해결방법
서버를 리부팅시켰는데, 커널이 정상적으로 부팅이 되지 않고 부트로더 상태에서 넘어가지 않는 문제가 발생했습니다. 자신의 서버가 다음과 같은 문제와 비슷한 상황인지 검토하십시오. 1. 메인보드 보안부팅 해제...
2024. 03. 24.
2024. 03. 24. 조회수 표시생략
1 2 3 4

[Python] venv(가상환경) 사용법

1. 가상환경의 필요성

Python 프로젝트에서 패키지를 설치했을 때 패키지들 끼리 충돌 이슈를 겪지 않기 위해 개발환경 세팅에 많은 시간을 소모합니다.

불필요한 리소스 낭비를 막기 위해 각 프로젝트마다 최적의 가상환경을 세팅하면 패키지가 전역에 깔리지 않게 됩니다.

2. venv 사용법

venv는 파이썬에 내장되어 있으므로 별도 설치가 필요 없습니다.

작업 중인 프로젝트 경로에 생성되기 때문에, 가상환경을 세팅할 폴더로 이동한 뒤 사용하면 됩니다.

가상환경을 설치할 경로로 이동

cd 가상환경을 설치할 경로

가상환경 생성

python -m venv 가상환경이름

가상환경 활성화 (활성화를 해야 가상환경이 켜짐)

source 가상환경이름/bin/activate

가상환경 비활성화 (가상환경 끄기)

deactivate

설치된 패키지 리스트 txt 파일로 변환

github에 가상환경 폴더를 ignore하고 푸시하고 싶을 때 패키지 리스트를 txt 파일로 변환할 수 있습니다.

pip freeze > requirements.txt

변환된 txt 파일로 패키지 설치하기

pip install -r 파일이름.txt

[Let’s Encrypt] 와일드카드 인증서 발급 & Cloudflare 자동화 방법

1. 개요

Let’s Encrypt 와일드카드 인증서(*.domain.com)는 보안상 DNS-01 챌린지 방식만 지원합니다. 기존의 수동 방식(Manual)은 갱신 때마다 DNS TXT 레코드를 직접 수정해야 하는 번거로움이 있어, Cloudflare API를 이용한 완전 자동화 설정을 권장합니다.

2. 주요 시행착오와 해결 방법

  • 명령어 오류: 블로그 등에서 명령어를 복사할 때 하이픈(-)이 긴 대시 (-)로, 따옴표(“)가 둥근 따옴표로 바뀌어 인식되지 않는 문제가 발생할 수 있습니다. 반드시 표준 ASCII 문자를 사용해야 합니다.
  • 수동 방식의 한계: _acme-challengs 레코드를 중복 등록하거나, DNS 전파 시간을 기다리지 않고 엔터를 누를 경우 NXDOMAIN 또는 Incorrect TXT record 에러가 발생합니다.
  • 알고리즘의 충돌: 기존 인증서가 ECDSA 방식일 때 새 명령어가 RSA를 시도하면 충돌이 발생합니다. –key-type ecdsa 옵션을 명시하여 해결할 수 있습니다.

3. Cloudflare DNS 플러그인 자동화 단계

3.1 패키지 업데이트 및 Certbot 설치

Let’s encrypt는 certbot를 통해 인증서를 발급해야 합니다. 아직 관련 패키지가 설치되어 있지 않았다면, 패키지 설치를 진행합니다.

// 패키지 업데이트
apt-get install update
// 패키지 설치
apt-get install certbot -y
3.2 플러그인 설치
apt-get install python3-certbot-dns-cloudflare
3.3 API 토큰 설정

Cloudflare 대시보드에서 Zone:DNS:Edit 권한을 가진 토큰을 생성한 뒤 서버에 저장합니다.

  • 파일 경로: 예) ~/.secrets/certbot/cloudflare.ini
  • 파일 내용: 예:) dns_cloudflare_api_token = YOUR_API_TOKEN
  • 보안 설정: chmod 600 ~/.secrets/certbot/cloudflare.ini
3.4 인증서 발급 및 자동 갱신 설정
certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini \
  --cert-name mydomain.com \
  --key-type ecdsa \
  -d "mydomain.com" -d "*.mydomain.com" \
  --preferred-challenges dns \
  --non-interactive \
  --agree-tos \
  -m  [email protected]
3.5 기존 수동/Standalone 인증서 전환 팁

기존에 manual이나 standalone 방식으로 발급받은 인증서가 있다면 certbot renew 시 에러가 발생합니다. 이때는 위 명령어를 –force-renewal 옵션과 함께 실행하여 인증서의 갱신 메커니즘 자체를 dns-cloudflare로 교체해 주어야 합니다.

3.6 최종 확인

설정이 완료된 후 아래 명령어를 실행하여 모든 도메인이 성공적으로 업데이트되는지 확인합니다.

certbot renew --dry-run

결과: “Congratulations, all simulated renewals succeeded:” 메시지가 나오면 정상적으로 인증서가 갱신되었습니다.

mysql 설정 my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip-external-locking # 외부(TCP/IP) 잠금비활성
skip-name-resolve  # 필수. 대신 도메인 기준으로 사용 못한다.
# wait_timeout=200  # 커넥션 종료후 언제까지 기다릴지 설정. 보통은 알아서 사라진다. 기본 28800 . sleep 이 너무 많을 경우 설정
max_connections=200 # 최대 접속자수 시스템 필요량에 맞춰 설정

table_open_cache=800 # 기본 64. 모든 쓰레드에서 오픈할 수 있는 테이블 수, ulimit 에서 open file 도 같이 수정 필요. 낮은 버전은 table_cache 라는 이름을 사용한다. ( max_connections * N )
max_allowed_packet=16M # 적으면 긴 쿼리 날릴 때문제가 된다.16M 정도로 (설마 10MB이상으로 쿼리  날릴일 없겠지?)
# max_connections * (sort_buffer_size+read_buffer_size) 만큼 메모리가 사용될 수 있다.

sort_buffer_size=2M   # 소팅용 버퍼

read_buffer_size=2M  # 데이터 읽기용 버퍼
ft_min_word_len=2  # fultext 사용시 한글 사용할 경우, 2정도로 설정하라

key_buffer_size=268435456 # 기본 8M이다. MyISAM 인덱스용. MyISAM 중심이라면 이 값을 많이 늘려라. 메모리 50% 이상도 생각해봐라.
innodb_buffer_pool_size=4G  # 기본은 8M이다. 서버의 메모리에 맞춰서 설정 innoDB 중심이면 메모리의 80%까지 설정
innodb_log_file_size=256M # 기본 5M이다.
innodb_buffer_pool_size 의 10~25% 정도로 설정
innodb_file_per_table=1  # 기본 0(off) 이다. 설정하면 테이블 단위로
innoDB의 파일이 생긴다. (설정안하면 하나의 파일이 너무 커지니 설정하라)
slow_query_log=1 #슬로우쿼리 사용 설정. 디스크 I/O가 많이 예상되거나 너무 긴 쿼리가 많을경우 off(0) 해라slow_query_log_file=/var/run/mysqld/mysqld-slow.log #슬로우쿼리 파일 위치
long_query_time=2          # 슬로추 쿼리 기준 시간 2초 ~ 5초

tmp_table_size=64M  # 기본값:16M. 디스크 임시 테이블 크기

max_connect_error=10000  # 기본값: 10. 10000번 접속이 이상하면 접근 차단

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Let’s encrypt 인증서 발급할 때 유의사항

Let’s encrypt는 Apache2나 Nginx를 운영할 때 SSL 인증서를 무료로 발급해 주는 툴이다. 구글, 모질라 재단 등에서 후원하고 있는 프로젝트이기도 하다.

Let’s encrypt는 리눅스 터미널에서 명령어를 사용해야 하는데, 인증서 발급 시 유의사항이 있다.

Cleaning up challenges
Problem binding to port 80: Could not bind to IPv4 or IPv6.

80포트가 이미 사용 중이라서 certbot 명령어를 사용해 인증서를 발급 받을 수 없다고 출력이 되었다.

이 경우 아파치나 엔진엑스가 실행 중이라면 위와 같은 문구가 출력될 수가 있는 것이다. 따라서 아파치나 엔진엑스를 죽여주면 된다.

예: service apache2 stop (엔진 엑스를 사용중이라면 service nginx start)

서버 엔진이 죽었다면, 다시 certbot 명령을 사용해서 인증서를 발급받으면 된다. 만약 인증서를 발급받았다면, 다시 서버엔진을 실행해 주어야 한다.

예: service apche2 start (엔진 엑스를 사용중이라면 service nginx start)

Ubuntu Server 18.04 버전에서 “커널이 정상적으로 부팅되지 않고 부트로더 상태에 멈춰있는 경우에 해결방법

서버를 리부팅시켰는데, 커널이 정상적으로 부팅이 되지 않고 부트로더 상태에서 넘어가지 않는 문제가 발생했습니다.

자신의 서버가 다음과 같은 문제와 비슷한 상황인지 검토하십시오.

1. 메인보드 보안부팅 해제

서버를 재부팅하여 메인보드 바이오스 설정 모드로 전환합니다. 바이오스 접근법은 일반적으로 DEL 키나 F number key를 연타합니다. 그런데 만약 바이오스 접근이 어렵다면, 자신의 메인보드 제조사를 찾아가 문의하십시오.

바이오스에 접근했다면 부트 설정에서 보안부팅 설정 부분을 체크 해제해야 합니다. 그 다음 과정은 설정 변경을 저장한 다음 재부팅을 하여 서버가 정상적으로 부팅이 되는지 확인합니다.

2. 커널 패닉

커널이 손상된 것입니다. 커널 패닉 상태를 해결하기 위해서는 커널 재설치를 진행해야 합니다. 커널 재설치를 위해서는 우분투 서버 복구가 필요하며, Live USB를 사용하여 복구 모드로 부팅해야 합니다.

그 다음으로 커널 복구를 진행해야 합니다. 커널 복구가 정상적으로 진행됐다면, 복구 부팅을 해제 후 재부팅을 시도합니다. 마지막으로 우분투 서버가 정상적으로 부팅이 되는지 확인합니다.

3. 만약 해결되지 않는 경우

부팅 문제가 잘 해결되지 않는 경우 디스크 포맷 후 OS 재설치를 진행합니다. 또는 이용하고 있는 전문가의 기술지원을 알아보세요. 외부의 도움을 통하여 문제를 해결할 수 있도록 합니다.

4. 참고 자료