https://haksuperman.tistory.com/70
이전 게시물에 이어 진행
- 샘플 애플리케이션은 데이터베이스에서 샘플 데이터를 가져와 출력하는 기능을 갖고 있다. 이를 위해 애플리케이션 서버에도 MySQL 클라이언트를 설치해야 한다.
- 파이썬 Flask 모듈을 사용해서 테스트용 웹 서버를 만들어 웹 응용 프로그램을 개발한다.
- 파이썬 샘플 웹 애플리케이션에서는 MySQL 데이터베이스에 연결하는 데 pymysql 모듈을 사용하며, 샘플 데이터 생성을 위해 faker 모듈을 사용한다.
1. MySQL 클라이언트 설치
원격 접속
1) MySQL 리포지터리 설치
MySQL 리포지터리 설치
2) 언어 팩 설치
언어 설정 관련 에러 "Failed to set locale, defaulting to C.UTF-8" 오류를 방지하기 위해 언어 팩 설치
3) 설치한 리포지터리 활성화
yum-config-manager 명령을 통해 리포지터리 활성화
4) 오라클 리눅스에 기존 활성화 되어 있는 MySQL 모듈 비활성화
기존 모듈을 비활성화 해서 최신 버전의 MySQL 설치해서 사용 가능
5) MySQL 설치
GPG 에러
(MySQL 패키지가 제공하는 GPG 키와 일치하지 않아서 발생한 에러이다 -> 일치하는 GPG 키를 가져와 시스템에 추가시켜야 한다)
2023 버전이 새로 추가되어서 시스템에도 import
다시 설치
성공!
2. 파이썬 가상 환경 구성
현재 사용 중인 Oracle Linux 8에는 파이썬 3 버전이 기본적으로 설치되어 있다.
파이썬 가상 환경은 파이썬 프로젝트를 독립적으로 관리하는 데 사용되며, 각 환경은 다른 파이썬 버전과 라이브러리를 사용할 수 있어 하나의 시스템에서 여러 프로젝트를 동시에 다룰 수 있다.
1) 파이썬 가상 환경 생성 및 활성화
venvs 디렉터리 내에 파이썬 가상 환경 생성 후 활성화
mkdir venvs cd venvs python -m venv ocisampleweb cd ocisampleweb/bin source activate |
2) alias 설정
위의 가상 환경 활성화를 alias 설정해 편리하게 작업 가능
echo 'alias ocisampleweb='cd /home/opc/venvs/ocisampleweb;source /home/opc/venvs/ocisampleweb/bin/activate'" >> ~/.bash_profile deactive . ~/.bash_profile ocisampleweb |
3) VIM 설정 파일 수정 및 인코딩 설정
vi ~/.vimrc set encoding=utf-8 set fileencodings=utf-8,cp949 |
4) pip 업그레이드
파이썬 가상 환경이 활성화 된 상태에서 /home/opc/venvs/ocisampleweb/bin 경로로 이동
pip 업그레이드
pip install --upgrade pip |
파이썬의 pip(Package Installer for Python)는 패키지를 관리하는 도구로 패키지의 설치, 업그레이드, 제거 등을 처리한다. pip를 통해 파이썬 패키지 인덱스(PyPI)에서 다양한 공개 패키지를 설치할 수 있다.
5) Flask, pymysql, faker 모듈 설치
pip 명령으로 flask 설치
pip install flask |
pip 명령으로 pymysql 설치
pip install pymysql |
pip 명령으로 faker 설치
pip install faker |
3. 샘플 애플리케이션 배포 및 실행
1) Flask 프레임워크의 동작 확인
hello.py 파일 작성
Hello World 애플리케이션 실행
(종료하려면 ctrl+c 입력)
http://<애플리케이션 서버 퍼블릭 IP 주소>:5000 으로 실행 중인 Hello World 애플리케이션 이용 가능
(작성한 hello.py 파일에 의해 Hello, OCI! 가 출력 됨)
https://haksuperman.tistory.com/69
해당 게시물에서 이미 시큐리티 리스트와 호스트 레벨에서의 자체 방화벽도 개방을 해놨기 때문에 접속 가능하다.
별도의 애플리케이션 서버에 접속하는 터미널을 하나 더 열어서 이용중인 포트 정보 확인
-> 5000번 포트가 인터넷으로 서비스 중인 것 확인 가능
Ctrl + C 로 hello 애플리케이션 종료
2) 데이터베이스에 접속하는 파이썬 애플리케이션 생성
- 첫 번째 함수는 MySQL에 접속해서 "users" 테이블에 유저의 접속 기록을 남기고, 최신 10건의 이력을 조회해서 HTTPS 응답을 하는 간단한 웹 서비스이다. faker 라이브러리를 사용해서 테스트 데이터를 생성하고 있다.
- 두 번째 함수는 "Hello, OCI!" 텍스트를 출력하는 서비스이다.
첫 번째 함수는 "http://<퍼블릭 IP 주소>:5000/" URI로 서비스 되고, 두 번째 함수는 "http://<퍼블릭 IP 주소>:5000/hello" URI로 서비스 될 것이다.
alias 설정해 놓은 ocisampleweb 명령으로 파이썬 가상 환경 활성화 및 "sample-monolity.py" 이름의 파이썬 코드 파일 생성
import logging, pymysql, json
from datetime import datetime
from flask import Flask
from faker import Faker
app = Flask(__name__)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
fake = Faker()
mysql_db_host_ip = 'x.x.x.x'
mysql_db_user_name = 'root'
mysql_db_passwd = 'xxxxxxxxxxx'
mysql_db_name = 'test'
@app.route('/',methods=['GET'])
def index():
try:
mysql_conn = pymysql.connect(host=mysql_db_host_ip, user=mysql_db_user_name, password=mysql_db_passwd, db=mysql_db_name)
mysql_cursor = mysql_conn.cursor()
mysql_sql = "insert into users(user_name,job,client_ip,last_conn_date) values (%s,%s,%s,current_timestamp)"
mysql_sql_val = (fake.name(),fake.job(),fake.ipv4_private())
mysql_cursor.execute(mysql_sql,mysql_sql_val)
mysql_sql = "select user_name,job,client_ip,DATE_FORMAT(last_conn_date, '%Y-%m-%d %T.%f') from users order by last_conn_date desc limit 10"
mysql_cursor.execute(mysql_sql)
mysql_results = mysql_cursor.fetchall()
mysql_result = json.dumps(mysql_results, default=str)
mysql_conn.commit()
mysql_conn.close()
except Exception as e:
logger.error("mysql error : cloud not fetch data")
logger.error(e)
logger.info("success : querying data succeeded.")
return mysql_result
@app.route('/hello', methods=['GET'])
def hello():
return 'Hello, OCI!')
"mysql_db_host_ip"는 데이터베이스 서버의 프라이빗 IP 주소
"mysql_db_passwd"는 MySQL 패스워드로 설정한 값으로 지정
3) 샘플 데이터를 저장할 테이블 생성 스크립트 작성
mysql_schema.sql 파일 생성
CREATE TABLE users
(
user_id int,
user_name VARCHAR(100),
country VARCHAR(100),
job VARCHAR(100),
email VARCHAR(100),
client_ip VARCHAR(100),
last_conn_date timestamp
);
스키마 생성 스크립트 명령 수행
4) Flask 애플리케이션 실행
Flask 애플리케이션의 이름 지정 후 애플리케이션 실행
스크립트로 작성해 생성한 스키마의 컬럼 값이 출력 된다.
(이 값들은 Faker가 샘플 데이터를 생성한 것)
Ctrl + C 로 샘플 애플리케이션 종료
5) 인스턴스 실행 시 애플리케이션 자동 실행 설정
해당 경로에 서비스 파일 생성
[Unit]
Description=Demo APP Service to serve flask web-app.
After=network.target
[Service]
User=opc
Group=opc
WorkingDirectory=/home/opc/venvs/ocisampleweb
Environment="FLASK_APP=sample-monolith"
ExecStart=/bin/bash -c "cd /home/opc/venvs/ocisampleweb; source /home/opc/venvs/ocisampleweb/bin/activate ; flask run --host=0.0.0.0"
[Install]
WantedBy=multi-user.target
systemctl enable 명령으로 서버에 등록(활성화)
데몬 시작 및 상태 확인
Flask 프레임워크 애플리케이션으로 실습을 진행하고 있지만, Flask와 같은 웹 프레임워크를 사용해서 개발한 애플리케이션을 운영 환경에 배포할 때는 별도의 웹 서버나 애플리케이션 서버(WAS)와 함께 구성하는 것이 일반적이다!
'Cloud > OCI(Oracle Cloud Infrastructure)' 카테고리의 다른 글
[OCI] 로드밸런서, 오토스케일링 설정 (+프리티어 계정 업그레이드) (0) | 2024.06.28 |
---|---|
[OCI] HTTPS 연결 설정 (Feat. OCI Vault, RSA 마스터 암호화 키, CA 생성, CA 인증서 발급) (0) | 2024.06.21 |
[OCI] 데이터베이스 설치 및 기본 구성 (Feat. MySQL) (0) | 2024.06.20 |
[OCI] 통신을 위한 네트워크 설정 (Feat. 시큐리티 리스트, Bastion 세션, 서버 자체 방화벽 설정) (0) | 2024.06.20 |
[OCI] 오라클 클라우드에서의 Bastion 서버(점핑 호스트) (0) | 2024.06.19 |
개인 공부 목적으로 사용하는 블로그입니다 :)
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!