사용한 데이터는 AI 허브에서 제공한 여행로그 데이터를 이용한다
사실 데이터 분석이나 자세한 내용을 올리고 싶었지만 저작권때문에 문제가 될만한 부분은 삭제하고 올립니다!
우선 제공하는 데이터 중 여행자 정보, 여행기간, 방문한 여행지 데이터를 이용
tn_visit_area_info_방문지정보_A.csv
tn_traveller_master_여행객_Master_A.csv
tn_travel_여행_A.csv
총 세개를 이용해 데이터를 구성
tabel_creation.py 파일을 실행해 필요한 테이블을 만들어줍니다. (.postgresql 컨테이너가 실행중이어야합니다)
import psycopg2
from dotenv import load_dotenv
import os
HOST_URL = os.environ.get('HOST_URL')
USERNAME = os.environ.get('POSTGRES_USER')
USERPASSWORD = os.environ.get('POSTGRES_PASSWORD')
DBNAME = os.environ.get('POSTGRES_DB')
PORT = os.environ.get('PORT')
db_connect = psycopg2.connect(
user=USERNAME,
password=USERPASSWORD,
host=HOST_URL,
port=PORT,
database=DBNAME,
)
def create_table(db_connect):
create_table_query = """
#여행자 정보 테이블
CREATE TABLE IF NOT EXISTS traveller (
id SERIAL PRIMARY KEY,
"""
데이터 테이블
"""
);
#여행 정보
CREATE TABLE IF NOT EXISTS travel (
id SERIAL PRIMARY KEY,
"""
데이터 테이블
"""
);
#저작권때매 지워진 테이블
CREATE TABLE IF NOT EXISTS {저작권때매 지워진 테이블 이름} (
id SERIAL PRIMARY KEY,
"""
데이터 테이블
"""
);
#여행지 정보
CREATE TABLE IF NOT EXISTS visit_area_info (
id SERIAL PRIMARY KEY,
TRAVEL_ID CHAR(9),
"""
데이터 테이블
"""
);
"""
print("create_table_query")
with db_connect.cursor() as cur:
cur.execute(create_table_query)
db_connect.commit()
실행을 하고 테이블이 잘 생성되었는지 확인하셔야합니다.
확인하는 방법은
docker exec -it {DB 서버 컨테이너 이름} /bin/bash
su postgres #user 변경(리눅스 명령어)
psql --username={DB 사용자 이름} --dbname={DB 이름}
\d # 데이터 베이스 확인
그리고
파일이 3개라서 데이터를 입력하는 컨테이너를 2개로 구성했습니다
이유는 여행과 여행자 정보는 직접적으로 관련되어있고
방문 여행지는 여행마다 여러곳일 수도 있어서 같이 입력하게하면 문제가 생길수도 있을것 같아서 따로 구성했습니다.
물론 직접 관련되어있다고해도 같이 컨테이너 구성했다가 오류가 생길 수 도 있으니
추후에 오류 수정 완료하고 확인해보겠습니다.
traveller_data_insertion.py # 여행자, 여행 정보
visitareainfo_data_insertion.py #방문지 정보
두개의 파일로 구성했습니다.
도커파일
traveller.Dockerfile
FROM amd64/python:3.9-slim
RUN apt-get update && apt-get install -y \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /usr/app
RUN pip install -U pip &&\
pip install pandas psycopg2-binary python-dotenv
COPY traveller_data_insertion.py traveller_data_insertion.py
COPY .env .env
COPY Data/ Data/
ENTRYPOINT ["python", "traveller_data_insertion.py"]
visitareainfo.Dockerfile
FROM amd64/python:3.9-slim
RUN apt-get update && apt-get install -y \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /usr/app
RUN pip install -U pip &&\
pip install pandas psycopg2-binary python-dotenv
COPY visitareainfo_data_insertion.py visitareainfo_data_insertion.py
COPY .env .env
COPY Data/ Data/
ENTRYPOINT ["python", "visitareainfo_data_insertion.py"]
docker-compose.yaml
version: '3'
services:
postgres-server:
env_file:
- .env
image: postgres:14.0
container_name: postgres-server
ports:
- ${PORT}:${PORT}
environment:
POSTGRES_USER: "${POSTGRES_USER}"
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
POSTGRES_DB: "${POSTGRES_DB}"
healthcheck:
test: ["CMD", "pg_isready", "-q", "-U", "${POSTGRES_USER}", "-d", "${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
tarveller-data-generator:
build:
context: .
dockerfile: traveller.Dockerfile
container_name: traveller-data-generator
depends_on:
postgres-server:
condition: service_healthy
command: ["postgres-server"]
visitareainfo-data-generator:
build:
context: .
dockerfile: visitareainfo.Dockerfile
container_name: visitareainfo-data-generator
depends_on:
postgres-server:
condition: service_healthy
command: ["postgres-server"]
networks:
default:
name: mlops-network
여기서 DB서버에 healthcheck에 의존성을 추가해줬는데
그 이유는
데이터를 입력하는 코드가 실행되기 전에 DB 서버가 실행되어야하기 때문에 순서를 맞추기 위해 추가해줬습니다
그리고 그냥 실행하면
Is the server running on that host and accepting TCP/IP connections?
라는 오류가 나오는데 이때문에 networks를 추가해 두 컨테이너의 네트워크를 연결해주었습니다
그리고 연결했는데도 오류가 나는 경우가 있는데 이때
데이터를 입력하는 코드에서
load_dotenv()
HOST_URL = os.getenv('DB_CONTAINER_HOST')
USERNAME = os.getenv('POSTGRES_USER')
USERPASSWORD = os.getenv('POSTGRES_PASSWORD')
DBNAME = os.getenv('POSTGRES_DB')
PORT = os.getenv('PORT')
를 선언할때 HOST_URL 부분을 localhost가 아닌
docker-compose에서 선언한 DB 서버 이름인 postgres-server를 입력해 주어야합니다.
그리고 .env 파일을 이용할때 주의할점은 USERNAME이라는 변수를 사용하면
.env의 변수가 사용되는게 아니라 사용자 PC의 이름이 사용되니 .env에서 변수를 사용할때 주의하셔야합니다
POSTGRES_USER="username"
-> "username"
사용자 PC 이름: myComputer
USERNAME="username"
-> myComputer
이것 때문에 오류를 2시간 넘게 수정해도 안돼서 고생한....
만약 docker-compose의 세팅을 실행하기 전에 확인하고 싶다면
docker-compose config
를 실행해보시면 .env의 변수를 잘 가져왔는지 확인할 수 있습니다.
다음에는 계속해서 데이터를 입력해보는것을 완료하고 추천 모델을 어떻게 구성할지 고민해보겠습니다.
'공부 > MLOps' 카테고리의 다른 글
추천 시스템을 위한 MLFlow 환경 구축하기 (0) | 2024.07.07 |
---|---|
Docker에 데이터베이스 서버 생성하기 (0) | 2024.06.29 |
Docker 설치 하기 (0) | 2024.06.29 |
MLops? (0) | 2024.06.26 |