항해99/웹 개발 종합반 강의

[스파르타코딩클럽] 웹개발 종합반 - 4주차 (4-1~8)

nsean 2023. 12. 28. 01:45

이번주에 배울 내용은 데이터베이스와, 전반적인 웹페이지의 프런트-백엔드를 작성하는 방법과 데이터베이스의 기초에 대한 것이었다.

Project 폴더 구조
- - -
Project
|— venv
|— app.py (서버)
|— templates
         |— motto.html (클라이언트 파일)
         |— music.html (클라이언트 파일)

이러한 형태가 기본적인 웹 프로젝트의 폴더 구조였다.

이후 내용은 3주차 내용을 복습하는 내용이었다.

 

Database에 대하여 배우게 됐는데, database의 사용 목적은 데이터들을 잘 정리하여 정확하고 빠르게 목표 데이터를 찾기 위해서이다.

이러한 db에는 크게 두 종류가 있는데, 표와 같은 형태로 작성하는 SQL과 딕셔너리 형태로 데이터를 저장하는 NoSQl이 있다.

SQL은 데이터의 중간에 열을 더하기는 어렵지만, 정형화되어있어, 데이터의 일관성/분석에 용이하며,  NOSQL은 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족하다.

 

이번주 수업에서는 SQLITE3를 활용하였다.

DB 폴더 구조
- - -
DB
|— venv
|— app.py (서버)
|— database.db (데이터베이스)

FLASK에서의 데이터베이스 폴더 구조이다.

DB를 다루기 위해선 Flask-SQLAlchemy를 pip로 설치한 후에, 다음과 같은 코드들을 사용하여 기본적인 준비를 해줄 수 있다.

from flask import Flask
import os
from flask_sqlalchemy import SQLAlchemy

basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] =\
        'sqlite:///' + os.path.join(basedir, 'database.db')

db = SQLAlchemy(app)

이러한 준비를 맞춰준 후, 데이터베이스 모델을 정의해 주면 된다.

class Song(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, nullable=False)
    artist = db.Column(db.String, nullable=False)
    title = db.Column(db.String, nullable=False)
    image_url = db.Column(db.String, nullable=False)

    def __repr__(self):
        return f'{self.artist} {self.title} 추천 by {self.username}'

with app.app_context():
    db.create_all()

이러한 코드를 작성한 후, flask shell에 진입하여 db 테이블을 생성할 수 있다.

(venv)가 있는지 확인하세요..!
$ flask shell (엔터)
>>> from app import db, Song (엔터)
>>> db.create_all()