python 에서 mysql 접속 하기

서버사이드 프로그램을 짜더라도 DB에 접근 하여 데이터를 가져다가 작동을 하게 하는 경우가 많다.

python의 경우 프로그래밍 언어 이고 사용자 층도 두껍고 오래 되었기 때문에 대부분 드라이버가 제공이 된다.

그래서 필요한 내용을 설치하여 import 하여 사용 하면 된다 🙂

 

하지만 db 정보가 소스에 삽입되어 있는 것은 좋지 못하기 때문에 YAML 형식의 문서로 config 파일을 생성하고

그 config 파일을 python 에서 읽어서 DB 접속을 해야 한다. (json 은 시인성이 좋지만 주석을 첨부 할 수 없고/xml은 시인성이 너무 떨어진다.)

 

 

여담으로 python은 기본적으로 CentOS linux 에 대부분 설치되어 있으나 import 하는 pymysql 과 yaml은 설치 되어 있지 않기 때문에 아래와 같이 pip를 설치 하고 pip으로 설치 한다..

 

YAML의 경우 python 혼자만 쓰는 설정파일일 경우 info.py 를 만들고 import 하는게 편하지만 다른 언어의 프로그램 이나 로직과 겸용해야 할때 필요하겠지..

 

python 처음 작성하기

개인적으로 Python은 일반적인 서버사이드 개발 언어의 일종이라고 생각을 했었음 ‘ㅅ’a

 

하지만 빅데이터 라던가 블록체인 이라던가 AI 라던가를 구축을 하려면 어쩔수 없이 python을 사용하는 수밖에 없고

저물어 가는 해 라고 생각했지만 오히려 사용자 층이 두꺼워 지기 때문에

bash 정도만 짜는 사람으로서 python 을 배워야 겠다란 생각을 하고 있었고 실제 조금 익혔지만 기본적인 내용 및 중요사항을 기록할 예정.

 

use it! or lose it!

 

아래 순위표는 https://www.tiobe.com/tiobe-index 에서 확인 가능함 ‘ㅅ’a

2020-07-24_172307

 

일반적인 사용법 강좌는 얼마든지 많으니 역시 실무에 사용 할 수 있는 내용으로다가 채워 나갈 예정.

python 은 indent 즉 띄워쓰기가 매우 중요한 언어라서 띄워쓰기에 주의를 해야 함 ‘ㅅ’a

def 는 define 의 약자로 main() 이라는 함수를 정의 하고 아래에서 이를 호출하는 매우 간단한 스크립트…

nginx 에서 특정 국가 와 IP 허용 하기 (centos7)

nginx 에서 IP를 제한 하는 방법은 아래와 같다.

허용된 IP 외에는 403 에러가 발생한다.


아래는 허용된 IP 및 특정한 국가 코드(KR,SG) 와 IP (111.111.111.111)를 허용 하는 방법이다.

위에서 map $geoip_country_code 를 활용하기 때문에 아래와 같이

nginx 에서 GeoIP.dat 를 불러와야 한다.

GeoIP.dat 는 아래와 같이 설치를 해야 한다.


GeoIP data 파일은 주기적인 업데이트를 해야 한다. (매월 초 업데이트 된다.)

cron 에서는 매월 7일 오전 6시에 실행 하도록 처리하였다.

 

Docker for windows – centos8(php, httpd) 설치

Centos 8.1.1911 이 배포 되었다.

당장 OS 를 올릴 필요는 없지만 새로운 OS 가 추후에는 사용이 될것이기 때문에

Docker 환경에서 연습이 필요로 하다고 판단되어 Windows for Docker 를 이용하여 컨테이너를 생성하여 설치 테스트 및 작동 테스트를 해보았다 ‘ㅅ’a

사전에 c 드라이브를 분배 하여 w 드라이브에 workspace 를 생성 하였으며 컨테이너 웹 디렉토리와 연결한다. (windows 환경에서 php 개발 편의성)

 

물론 Docker 부분만 제외 한다면 Centos 8 에서 같은 방법으로 설치가 가능하다.

 

docker 에 centos 8 공식 이미지를 통해 컨테이너 생성을 한다.

 

Remi’s 레포지토리 추가 및 php 7.3 설치 (httpd 는 의존성에 의해 OS 기본 제공 되는 2.4.37이 설치 된다.)

 

apache 설정 (웹 디렉토리는 /var/www/html 으로 진행 하였음.)

 

php-fpm 설정

 

php.ini 설정 (파일 업로드 100M 와 숏코드만 사용 만 수정)

 

apache 및 php-fpm 시작 및 활성화

 

docker hub: https://hub.docker.com/r/san0123/centos8-apache24-php73

도커 이미지(latest)의 경우 php-fpm 이 아닌 libphp7.so 으로 httpd-profork 방식으로 설정 되어 있다. (ssl, http2 등 사용 불가)

php 7.4 : https://hub.docker.com/r/san0123/centos8-apache24-php74


ps. MariaDB 10.4 설치

mariadb 는 centos 에서 10.3.17 이 제공되지만 업데이트는 잘되지 않기 때문에 mariadb 에서 제공 되는 repo를 추가하고 설치한다.

 

mariadb 시작 및 활성화

 

정보보호 관리체계(ISMS) – centos 서버 패치

Information Security Management System(ISMS) / 한국 정보보호 관리체계 인증(K-ISMS)

사실 처음 공부를 시작할때 개발자 vs 엔지니어 로 고민 했던 사람들이 많았다.

그런 우리의 고민을 모든 날려버린 직업이 발생하는데 바로 DevOps 이다.

개발자에게 엔지니어의 역할을 맞기거나 엔지니어에 개발을 요구 하는…

 

그래서 숙련 되지 않는 엔지니어를 위해서(혹은 개발자지만 엔지니어 역량이 요구되는 직무인 사람) 서버 기본 보안 설정에 대한 글을 포스팅 하게 되었다.

(ISMS 혹은 K-ISMS 에 필요한 포스팅을 했을때 블로그에 해당 링크를 통해 유입 되는 사람이 많다.)

 

사실 한국 과학기술정보통신부에서 발행하는 문서 “201712_주요정보통신기반시설_기술적_취약점_분석평가_가이드” 에 따라

centos 7 에서 설정해줘야 하는 부분만 스크립트로 작성 하였다.

 

“계정이 존재하지 않는 GID 금지 / 홈 디렉토리의 존재 관리” 항목은 보여줄뿐 수동으로 맞추어야 한다.

 

가이드 라인 문서중 apache / NFS / ftp / sendmail 은 사용 여부에 따라 추가적인 보안 조치를 해야 한다.

아래는 가이드 라인 문서에 따른 점검 항목 및 centos 에서의 처리 방법 예제 이다.(hwp 로 제작된 pdf 라서 복사가 안됨….)

일반적으로 문제 없음 = centos 7 기본 설치 상태에서 문제가 이미 없거나 설치 되지 않는 서비스 및 명령어

스크립트 = 올려둔 스크립트로 패치가 되는 경우

스크립트(list 수동) = 올려둔 스크립트 실행시 관리자가 인지 할 수 있도록 리스트 출력 (관리자 개입 수정 필요)

서버 관리자 숙지 = 일회성이 아닌 지속 적으로 관리자가 신경 써야 하는 부분

위험 수용 = 사이드 라인을 따라 갈 경우 서버에 장애 발생

서비스에 따라 개별 설정 필요 = 서버 목적에 따라 설치시 별도로 보안 점검이 필요로 하는 부분