프로젝트
-
Flask Project - MyBlog contactForm, mypage 추가하기프로젝트 2024. 4. 23. 23:01
각 카테고리별 게시글, 특정 사용자의 게시글 등을 확인할 수 있도록 posts_list.html을 적절하게 활용해주겠습니다. 그 뒤에 블로그와 블로그 소유주에 대한 소개를 하는 about_me 페이지와, 문제사항 제보할 수 있는 contact 페이지를 수정해보겠습니다. 그리고 로그인한 후 자신의 정보를 확인해볼 수 있는 mypage를 추가해보겠습니다. 1. posts_list 활용 엔드포인트 추가 home에서는 모든 post, posts_list 에서는 해당 카테고리 post, 사용자 post(user_posts)에서는 사용자가 작성한 모든 post를 보여주도록 하겠습니다. posts_list.html에서 post_category와 post_owner_name 부분을 클릭하면 해당 카테고리, 사용자의 게..
-
Flask Project - MyBlog 댓글 추가하기(feat. flask-migrate)프로젝트 2024. 4. 22. 19:07
사용자, 게시글, 카테고리에 이어서, 댓글 기능을 추가해보도록 하겠습니다. 먼저 DB 스키마 모델을 만든 뒤에 해당 모델을 기반으로 Form을 만들어보겠습니다. 해당 모델을 기반으로 comment 관련 엔드포인트 생성과 기능을 구현한뒤에는 테스트 코드를 작성해서 테스트해보고, CommentAdmin 모델을 만들어서 관리자 페이지용 모델도 생성해보겠습니다. 마지막으로 저번에 구현한 CI/CD 시스템 기반으로 배포가 잘 이루어졌는지 확인도 해보겠습니다. 1. Comment 모델 생성 User, Post, Category 모델에 이어서 Comment 모델도 추가해보도록 하겠습니다. 주요 필드는 content, author_id, post_id입니다. 그리고 author_id, post_id와 관련지어 연관 모..
-
Flask Project - MyBlog CI/CD 적용하기(feat. Github Actions)프로젝트 2024. 4. 19. 14:11
지금까지 docker-compose를 통해 배포까지 해보았습니다. 이제 CI/CD 시스템을 구축해보겠습니다. 1. 배포 자동화(CI/CD) 배포 자동화를 위해 사용하는 툴은 Jenkins, AWS CodeBuild, Github Actions 등 다양하게 존재하는데요. 보통 Jenkins와 Github Actions 툴을 많이 사용한다고 합니다. 각각을 비교해보자면 아래와 같습니다. Github Actions 장점: Github 저장소와 쉽게 연동 가능해 빠르게 CI/CD를 구축할 수 있다. 단점: 비교적 최근에 나온 툴이라 레퍼런스가 상대적으로 적다 Jenkins 장점: 레퍼런스가 많고, 다양한 플러그인들이 지원되어 유연성이 뛰어나다. 단점: 초반 설정과 관리가 다소 복잡하다. 너무 간단하게 정리한 것..
-
Flask Project - MyBlog 배포하기(nginx+gunicorn+flask with docker-compose)프로젝트 2024. 4. 18. 21:18
이번에는 지금까지 만든 프로젝트를 클라우드 서비스를 활용해서 배포해보겠습니다. 배포를 하기 전에 꼭 알아야 하는 것이 있습니다. Flask app은 대표적인 WSGI(Web Server Gateway Interface) 웹 애플리케이션 중 하나로, 배포 시 웹 서버와 WSGI 서버와 묶여서 배포됩니다. 그렇다면 웹 서버는 무엇이고, WSGI 서버는 무엇인지 알아볼까요? 1. 웹 서버 - Nginx, Apache 등웹 서버는 클라이언트로부터 HTTP 요청을 받아들이고, 정적 파일을 제공하거나 동적 요청을 처리하여 해당 요청에 대한 응답을 생성하는 소프트웨어입니다. 주로 정적 파일 서빙, 리버스 프록시, 로드 밸런싱, SSL 암호화 등의 기능을 제공합니다. 본 프로젝트에서는 리버스 프록시 역할을 위해 웹 서..
-
Flask Project - MyBlog views(post 생성,수정,삭제) with unittest프로젝트 2024. 4. 11. 19:11
지금까지 blog 메인 홈페이지(index.html)과 회원가입, 로그인, 로그아웃 기능을 구현 및 테스트까지 해보았습니다. 이제 사용자가 작성한 글을 저장하기 위한 Post 모델과, 관리자만 추가 가능한 Category 모델을 생성해보겠습니다. 그리고 Post 생성, 수정, 삭제 기능 및 테스트까지 구현해보겠습니다. 1. Post, Category 모델 생성 Post는 제목, 본문, 저자, 카테고리, 생성 날짜가 필요합니다. 여기서 제목, 본문, 카테고리는 사용자에게 직접 입력을 받을 예정이고, 저자와 생성날짜는 서버에서 직접 처리할 예정입니다. 해당 정보를 기반으로 다음 단계에서 PostForm을 생성해보겠습니다. Post model에서 가장 중요한 개념은 ForeignKey와 relationship..
-
Flask Project - MyBlog auth(회원가입, 로그인, 로그아웃) with unittest프로젝트 2024. 4. 9. 19:10
지금까지 flask-sqlalchemy를 사용해 DB 스키마 생성 후, admin 페이지를 통해 User 모델을 등록하고 관리해보았습니다. 본격적으로 웹 페이지 개발을 시작하기 전에, admin 페이지에 접근 가능한 관리자용 계정 생성을 해보겠습니다. 플라스크 애플리케이션에서 여러 기능을 테스트해보거나, DB에 접근하는 등의 작업을 할 때 가장 중요한 개념은 app_context입니다. Flask는 요청 처리 동안에만 유효한 current_app, current_user 같은 객체를 제공하는데, 이 객체에 접근하기 위해서는 애플리케이션 컨텍스트(app_context)가 필요합니다. 따라서 관리자용 계정 생성을 위해서는 with app.app_context(): 를 사용하여 데이터베이스에 접근하는 코드를 ..
-
Flask Project - MyBlog Flask-admin(관리자 페이지 생성 및 관리)프로젝트 2024. 4. 8. 22:25
Flask에서는 관리자 페이지를 생성해주는 flask-admin 라이브러리가 존재합니다. 해당 라이브러리를 활용해 관리자 페이지를 생성하고 관리해보겠습니다. 1. 관리자 페이지 생성 + 관련 환경 변수 관리(config.py) # blog/__init__.py from flask_admin import Admin from blog.admin_models import get_all_admin_models from .models import db def create_app(config): ''' 이전 코드 생략 ''' # admin 페이지에 모델뷰 추가 admin = Admin(app, name='MyBlog', template_mode='bootstrap3') for admin_model, model in..
-
Flask Project - MyBlog Flask-sqlalchemy(with Flask-migrate) DB 관리프로젝트 2024. 4. 8. 21:13
DB 관리 통합 ORM: Flask-SQLAlchemy Flask는 데이터베이스 기능이 내장되어 있지 않습니다. 따라서 적절한 데이터베이스를 선택하여 사용해야 하고, 이렇게 될 경우 프로젝트가 특정 데이터베이스에 종속될 수 있습니다. 이 때 ORM은 데이터 객체 모델과 데이터베이스를 매핑해주기 때문에, 특정 데이터베이스에 종속되지 않고 일관된 OOP 코드를 작성할 수 있게 됩니다. 파이썬 환경에서 사용할 수 있는 대표적인 ORM은 sqlalchemy가 있습니다. 그리고 Flask app에서 더 쉽게 사용가능하도록 만든 flask-sqlalchemy가 존재합니다. 따라서 저는 flask-sqlalchemy를 선택했습니다. 데이터베이스 마이그레이션: Flask-migrate 데이터베이스 마이그레이션이란 데이..