On Boarding Assignment Version2

🌻Truthful·2023년 9월 19일

1단계: 로컬에서 포트폴리오 웹 앱 설정

포트폴리오 예시에서 클론합니다.

그 다음 우선 파이썬을 설치해줍니다.

brew install python3.

가상 환경을 설치합니다.

View > Command Palette를 클릭한 이후 venv를 선택하여 가상환경을 설치합니다.

그리고 새로운 터미널을 열어봅시다. 그리고 가상환경에 Flask를 설치합니다.

python -m pip install flask

파일이름을 main.py에서 app.py로 바꿔줍니다.

왜냐하면 Flask는 기본적으로 app.py 또는 wsgi.py 파일을 애플리케이션의 시작점으로 찾습니다.

다른 방법도 존재합니다. FLASK_APP 환경 변수를 사용하여 Flask에게 애플리케이션의 시작점이 main.py라는 것을 명시적으로 알려주는 것입니다.

export FLASK_APP=main.py

그 다음 아래 코드를 통해 실행합니다.

python -m flask run

2단계: 로컬에서 Python 앱 및 API 연결

새 Python 프로젝트 생성하고 가상 환경을 설정합니다.

아래와 같이 라이브러리들을 설치합니다.

pip install requests pyodbc Flask

requests는 API 요청을 위한, Flask는 웹 애플리케이션을 만들기 위한 라이브러리입니다.

pyodbc는 Python에서 ODBC (Open Database Connectivity)를 사용하여 데이터베이스에 접근할 수 있게 해주는 라이브러리입니다.

만약 ODBC를 설치하라는 문구가 뜨면 ODBC 설치를 참고하여 설치해주세요.

그리고 app.py에서 아래 코드와 같이 작성합니다.


from flask import Flask, jsonify # Flask는 웹 어플리케이션을 생성하고 관리하는 기본 클래스이고, jsonify는 JSON 형식으로 데이터를 응답으로 반환하는데 사용합니다.
import requests # HTTP 요청을 쉽게 수행할 수 있게 해주는 라이브러리입니다.
import pyodbc

app = Flask(__name__) # Flask 앱 인스턴스를 생성합니다.

def create_table():
    server = '서버이름을 작성해주세요'
    database = '데이터베이스 이름을 작성해주세요'
    username = 'admin 이름을 작성해주세요'
    password = '비밀번호를 작성해주세요'
    driver = '{ODBC Driver 17 for SQL Server}'

    connection = pyodbc.connect('DRIVER=' + driver + ';SERVER=' + server + ';PORT=1433;DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
    cursor = connection.cursor()

    create_table_query = """
    CREATE TABLE DogImages (
        ID INT PRIMARY KEY IDENTITY(1,1),
        ImageURL NVARCHAR(1000) NOT NULL
    );
    """

    cursor.execute(create_table_query)
    connection.commit()
    connection.close()

# 프로그램을 처음 실행할 때 테이블을 생성합니다.
create_table()



def fetch_api_data():
    """API에서 데이터를 가져오는 함수"""
    response = requests.get("https://dog.ceo/api/breeds/image/random")
    data = response.json()
    return data["message"]

def save_to_azure(image_url):
    """Azure SQL 데이터베이스에 데이터를 저장하는 함수"""
    
    # 연결 정보 설정
    server = '서버이름을 써주세요'
    database = '데이터베이스 이름을 써주세요'
    username = 'admin 이름을 써주세요'
    password = '비밀번호를 써주세요'
    driver = '{ODBC Driver 17 for SQL Server}'

    # 데이터베이스 연결
    connection = pyodbc.connect('DRIVER=' + driver + ';SERVER=' + server + ';PORT=1433;DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
    cursor = connection.cursor()

    # 데이터를 저장할 테이블 및 컬럼 정보 설정 후 쿼리 실행
    insert_query = "INSERT INTO DogImages (ImageURL) VALUES (?)"
    cursor.execute(insert_query, image_url)

    connection.commit()
    connection.close()
    
@app.route('/')
def home():
    return "Welcome to the Home Page!"

@app.route('/fetch_and_save')
def fetch_and_save():
    image_url = fetch_api_data()
    save_to_azure(image_url)
    return jsonify({"message": "Data fetched and saved successfully", "image_url": image_url})

if __name__ == '__main__':
    app.run(debug=True) # debug=True는 개발 모드에서만 사용해야 합니다. 배포 시에는 제거하거나 False로 설정하세요.

그 다음 아래 명령어를 통해 실행합시다.

flask run

그 다음 http://127.0.0.1:5000/fetch_and_save에 들어가면 성공했다고 나옵니다.

이를 확인하려면 Azure 포털에서도 확인 가능합니다.

Query editor에 들어가서 아래 코드를 입력합니다.

SELECT * FROM DogImages;

만약 결과가 보인다면 성공입니다.

3단계: Docker 및 Docker Compose를 사용하여 로컬 실행

포트폴리오 웹 사이트에 Dockerfile을 만듭니다.

FROM python:3.10-slim

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python", "app.py"]

그리고 docker-compose.yml 파일도 만듭니다.

version: '3.8'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    environment:
      - AZURE_DB_SERVER=서버 이름을 써주세요
      - AZURE_DB_NAME=데이터베이스 이름을 써주세요
      - AZURE_DB_USER=유저이름을 써주세요
      - AZURE_DB_PASS=비밀번호를 써주세요

그 다음 아래 코드를 입력합니다.

docker-compose up --build

이렇게 하면 Flask 웹 애플리케이션과 Azure SQL 데이터베이스의 연결을 Docker와 docker-compose를 사용하여 로컬에서 실행하게 됩니다.

참고 자료
Azure SQL Database 만들기

❗️ 질문 기록

  1. 환경 변수는 왜 필요한가? 굳이 해야하는가? 어떤 이점이 있는가?
profile
"인생의 목적은 타인을 따르는 것이 아니라 자신을 창조하는 것이다."

0개의 댓글