TigerCow.Door


안녕하세요. 문범우입니다.

이번 포스팅부터는 aws 서버에 장고 프로젝트를 배포하는 방법에 대해서 알아보도록 하겠습니다.


먼저 진행되는 환경은 다음과 같습니다.


macOS High Sierra

python version: 3.6.5

django version: 2.0


이번 포스팅에서 진행되는 가상환경을 구성하기 위해 필요한 pyenv, virturalenv 등을 제외하고는 윈도우도 거의 비슷한 진행방식으로 가능할 것이라 생각됩니다.


1. pyenv 설치


장고 프로젝트를 배포할때 먼저 로컬에서 가상환경을 구성하고, 그 위에 배포할 장고 프로젝트를 구성해야 합니다.

또한 aws 서버에서 ubuntu를 이용하며 똑같이 가상환경을 이용합니다.

먼저 pyenv 설치하기 전에 아래와 같은 추가적인 패키지들을 설치해줍니다.


1
2
3
$ sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev
cs


위의 내용들은 서버 배포시에 공통적으로 발생하는 문제들을 막기 위해 설치하는 것들이며 pyenv 사이트에도 나오는 내용입니다.

https://github.com/pyenv/pyenv/wiki/Common-build-problems


이제 git clone을 통해 실제로 pyenv를 설치하고 환경변수 설정까지 진행해 보도록 하겠습니다.


1
2
3
4
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
cs


저와 같은 경우에는 zsh를 사용하기 때문에 위의 명령어 중 아래 3줄에 대해서 ~/.bash_profile 대신 ~/.zshrc 를 입력합니다.


1
2
3
$ source ~/.bash_profile
$ pyenv versions
* system (set by /home/nelp/.pyenv/version)
cs


이제 위의 명령어로 터미널창을 재시작해주고 정상적으로 설치되었는지 확인하기 위해 pyenv versions 명령어를 입력합니다. 현재 우리는 pyenv를 통해 추가적으로 설치한 것이 없기 때문에 단순히 system만 나올 것 입니다.


이제 pyenv를 통해 원하는 파이썬 버전을 설치하고 즉각적으로 이용할 수 있습니다.

특정 버전을 설치하는 방법은 아래와 같습니다.


1
$ pyenv install 3.6.5
cs


위와 같이 pyenv install ~ 뒤에 특정 버전을 입력해주면 설치가 되고, 해당 버전을 사용하기 위해서는


1
$ pyenv shell 3.6.5
cs


와 같이 입력하면 됩니다.



2. virtualenv 설치


먼저 pyenv와 같이 git clone을 이용하여 설치합니다.


1
2
3
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
cs


이를 통해 virtualenv가 설치되었으면 이제 우리는 특정 파이썬 버전을 가지는 가상환경을 구성할 수 있습니다.


가상환경을 만드는 방법은,


1
pyenv virtualenv 3.6.5 myenv
cs


와 같이, pyenv virtualenv <원하는 파이썬 버전> <가상환경 이름> 을 입력해주면 됩니다.

이때 파이썬 버전은 pyenv 를 통해 설치되어 있는 버전만 가능합니다.


현재 생성되어 있는 가상환경 목록을 보기 위해서는 다음의 명령어를 입력하면 됩니다.


1
pyenv virtualenvs
cs


또한, 자신이 만든 가상환경으로 진입하기 위해서는,


1
pyenv activate myenv
cs


와 같이, pyenv activate <가상환경 이름> 을 입력하면 됩니다.


가상환경에 진입하면 터미널에서 유저이름 앞에 (myenv) 와 같이 진입되어 있는 가상환경의 이름을 보여줍니다.


만약 가상환경을 나가고 싶다면,


1
pyenv deactivate
cs


를 입력하시면 됩니다.



3. 서버 배포를 위한 장고 환경 구성하기


위에서 pyenv 와 virtualenv의 설치가 정상적으로 되었다면, 실제로 서버 배포를 위해 장고프로젝트의 가상환경을 구성해보도록 하겠습니다.


먼저 파이썬 3.6.5 버전의 django_deploy라는 가상환경을 만듭니다.


1
pyenv virtualenv 3.6.5 django_deploy
cs


그리고 django_deploy라는 이름의 폴더를 새로 만들고 해당 폴더로 들어갑니다.


1
2
mkdir django_deploy
cd django_deploy
cs


그리고 해당 위치에서 다음과 같은 명령어를 입력합니다.


1
pyenv local django_deploy
cs


위의 명령어는 해당 위치에 .python-version 파일을 만들어주면서, 해당 폴더로 가면 바로 django_deploy라는 가상환경에 진입하도록 해주는 명령어 입니다.



이렇게 장고 프로젝트를 위한 기본적인 가상환경 구성은 완료입니다.

이제 해당 가상환경에서 django를 설치하고, pip freeze > requirements.txt 명령어를 통해 패키지목록을 저장해둡니다.

또한 자유롭게 git 설정을 하시면 됩니다.

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요.

이번 포스팅에서는 django에서 admin 페이지를 사용해보도록 하겠습니다.



1. Admin 계정 만들기


먼저 우리는 지난 포스팅까지해서 django와 postgresql의 django_test라는 데이터베이스를 만들어서 연결하였습니다.

그리고 django에서 post라는 모델을 생성하여 migrate 해줌으로써 실제 django_test라는 데이터베이스 내부에 blog_post라는 테이블이 생성된 것을 확인하였습니다.


django에서는 model에 대한 data를 간편하게 확인하고 조작할 수 있는 admin 페이지를 제공해주는데, 이때 admin페이지에는 아무나 접근 가능한 것이 아니고, 서버개발 과정에서 admin 계정을 직접 만들어주어야 합니다.

admin 계정을 만들기 위해서 manage.py 파일이 있는 위치에서 아래 명령어를 입력해줍니다.


python manage.py createsuperuser



명령어를 입력하면 위와 같이 admin 계정에 대한 정보를 입력할 수 있습니다.

여기서 입력한 Username과 password를 통해 admin 페이지에 접근가능합니다. 



2. Admin 페이지 사용하기


이렇게 admin 계정을 만들었다면 이제 서버를 돌려서 주소의 가장 끝에 /admin 을 붙여 admin 페이지에 접근해보겠습니다.



이렇게 접근하면, 아래와 같은 화면이 나타나게 됩니다.



이제 위에서 만들었던 admin 계정의 username과 password를 입력해서 로그인을 합니다.


그런데 로그인을 하고나서 확인을 해보아도 우리가 이전에 만들었던 post와 관련된 것은 찾아볼 수 없습니다.

우리가 마이그레이션을 통해 만들었던 post 모델을 admin 페이지에서 보기 위해서는 이를 admin 페이지에 등록을 해주어야 합니다.


우리가 만든 blog라는 app의 폴더로 들어가보면 admin.py 라는 파일이 있습니다. 해당 파일을 켜서 아래와 같이 작성해줍니다.


1
2
3
4
5
from django.contrib import admin
from .models import Post
# Register your models here.
 
admin.site.register(Post)
cs


그리고 해당 파일을 저장한 뒤에 다시 admin 페이지를 새로고침 해보면,



위와 같이 blog 라는 app에 Posts 라는 것이 새로 생긴것을 확인할 수 있습니다.

실제로 저것을 통해 Posts 라는 테이블에 저장된 값들을 확인할 수 있으며 우리가 직접 데이터를 추가할 수도 있습니다.


이를 직접 확인해보기 위해서, admin 페이지에서 데이터를 입력해보고 postgresql에서 확인해보도록 하겠습니다.


admin 사이트에서 Posts 우측에 있는 Add 버튼을 눌러서 데이터를 추가해보겠습니다.



위와 같이 제목과 내용을 입력하고 Save 버튼을 눌러 데이터를 저장합니다.


그럼 실제로 admin 페이지에서 데이터가 성공적으로 입력되었다는 문구가 뜨고, Posts object도 하나 생긴것을 볼 수 있습니다.


이제 postgresql에서 확인해보도록 하겠습니다.



간단한 SQL문장으로 해당 테이블을 확인해보니 정상적으로 데이터가 입력된 것을 볼 수 있습니다.



이렇게 해서 admin 페이지 사용에 대한 간략한 설명을 진행해보았습니다.

추후에 지속될 포스팅 내용으로는, 개발된 django 어플리케이션을 aws를 이용하여 배포하는 방법을 진행해보도록 할 예정입니다.

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 문범우입니다.

이번 포스팅에서는 django에서 postgreSQL을 사용하는 방법에 대해서 알아보도록 하겠습니다.

현재 진행되는 환경은 django 2.0 / OS X / python 3.6.4 입니다.


1. postgreSQL 설정


postgreSQL은 관계형데이터베이스 중 하나로써, 먼저 이를 사용하기 위해 설치를 필요로 합니다.


postgreSQL 설치방법은 아래 글에 나와있으니 참고하시길 바랍니다.


http://doorbw.tistory.com/179?category=711158


postgreSQL 설치가 완료되었으면 터미널로 아무 데이터베이스나 접속합니다.

그리고 django에서 사용할 데이터베이스를 새로 만들어보도록 하겠습니다.


create database django_test;


를 입력합니다.



그리고 새롭게 만든 데이터베이스로 들어갑니다.


새롭게 만든, django_test 데이터베이스로 들어왔으면, 새로운 유저를 만들고 몇가지 설정과 함께 권한을 부여합니다.

순서대로 아래의 명령어를 입력합니다.


create user root with password 'password';

root는 유저 이름이고, password는 비밀번호입니다. 이때 비밀번호는 따옴표로 감싸주어야 합니다.

alter role root set client_encoding to 'utf-8';

alter role root set timezone to 'Asia/Seoul';

grant all privileges on database django_test to root;



위와 같이 하면 데이터베이스에 대한 설정이 마무리됩니다.



2. django 설정


먼저, django 설정을 진행하기 전에 필요한 것을 설치해야 됩니다.


psycopg2 라는 것을 설치해야 되는데, 터미널창에서 pip로 설치를 진행합니다.


pip install --no-binary :all: psycopg2




이렇게 설치가 마무리 되었으면, 이제 postgreSQL을 적용할 django 프로젝트로 들어가서 settings.py 파일을 열어봅니다.


그리고 그 중 아래와 같이 installed_apps 항목을 찾아서 우리가 만든 app을 추가합니다.




그리고 아래와 같이 database항목을 찾아봅니다.




위의 DATABASES 항목을 아래와 같이 수정합니다.


1
2
3
4
5
6
7
8
9
10
DATABASES = {
    'default': {
        'ENGINE''django.db.backends.postgresql',
        'NAME''django_test',
        'USER''root',
        'PASSWORD''password',
        'HOST''localhost',
        'PORT''',
    }
}
cs


name은 database의 이름을

user는 user의 이름,

password에는 user의 비밀번호를 입력합니다.


그리고 blog라고 새롭게 만든 app의 models.py 파일을 열어서 아래와 같이 작성합니다.


1
2
3
4
5
6
7
from django.db import models
 
# Create your models here.
class Post(models.Model):
    name = models.CharField(max_length = 20)
    content = models.TextField()
 
cs


이것은 우리가 blog라는 앱에서 데이터베이스 내부에 Post라는 table을 만드는 것이라고 생각하시면 됩니다.

일단은 간단하게 name과 content만을 갖도록 하였고, id같은 경우는 자동적으로 만들어지게 됩니다.


이렇게 까지 하고 django 프로젝트 폴더로 들어가서 아래와 같은 명령어를 입력해 줍니다.


python manage.py makemigrations


python manage.py migrate


이렇게 하고 


python manage.py runserver


를 통해 서버가 정상적으로 돌아가는지 확인합니다.


이제 다시 postgresql로 돌아와 우리가 만든 테이블이 잘 있는지 확인해보겠습니다.

실제로 django project내에서 따로 admin 페이지를 통해 확인할 수도 있지만, admin과 관련된 것은 다음포스팅에서 다뤄보도록 하겠습니다.


postgresql 터미널로 들어와서 아래 명령어를 입력하여 테이블 리스트를 확인합니다


\dt 



다양한 테이블이 많은데, 그중 가운데쯤 잘 보시면 blog_post 라는 테이블이 있습니다.

해당 테이블이 우리가 위에서 django 프로젝트를 통해서 만들게된 테이블입니다.



이렇게 하여 django 프로젝트에서 데이터베이스를 postgresql 로 연결하는 방법을 알아보았습니다.

다음 포스팅에서는 admin을 사용해보면서 실제로 데이터베이스에 데이터를 입력하고 확인해보도록 하겠습니다.

블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 문범우입니다.

이번 포스팅에서는 django에서 첫화면을 만들어보도록 하겠습니다.

먼저 우리가 만들어볼 전체적인 그림은 MVC패턴을 이용하여 간단한 블로그를 만들어 보는 것 입니다.

글을 작성하고 이것이 데이터베이스에 저장되고, 글을 삭제하거나 그에 대한 댓글을 다는 등의 기능을 구현해보도록 할 것 입니다.

먼저 이번 포스팅에서는 위에서 말씀드린 것과 같이 간단하게 첫화면을 만들어보도록 하겠습니다.


1. App 만들기


먼저 우리는 지난 포스팅을 통해서 start_django라는 프로젝트를 만들었습니다.

장고에서는 프로젝트 내부에 여러개의 app이 존재하면서 여러개의 기능을 구현할 수 있습니다.


먼저 우리는 blog라는 app을 만들어 보도록 하겠습니다.


터미널(윈도우의 경우 cmd창)을 열어서 지난 포스트에서 만든 프로젝트까지 이동합니다.

그리고 아래의 명령어를 입력합니다.


python manage.py startapp blog



그럼 위와 같이 start_django라는 우리의 프로젝트 폴더안에 blog라는 폴더가 새로 생긴 것을 확인할 수 있습니다.

현재 명령어 창이 위치한 start_django 폴더는 프로젝트의 기본 폴더라고 생각하시면 되고, 이 내부에 blog라는 app이 존재하며, 또 존재하는 start_django 폴더는 프로젝트 전체에 대한 설정 파일들이 담겨 있다고 생각하시면 됩니다.



2. 첫번째 화면 만들기


그럼 첫번째화면을 만들기 위해서 먼저 url지정을 진행해보도록 하겠습니다.

에디터를 통해 start_django > start_django > urls.py 파일을 열어봅니다.



위와 같이 매우 긴 주석처리와 약간의 코드가 존재합니다.

django 1.x 버전과 2.0 버전의 차이점 중의 하나가 여기서 나타나는데, 1.x 버전에서는 url 지정에서 url 함수를 사용하며 정규식을 사용하는데 2.0 이후부터는 path함수를 통해 정규식이 필요 없어지게 되었습니다.


우리가 추가하고자 하는 url은 맨처음 들어올 메인화면에 대한 것이므로 다음과 같이 코드를 수정합니다. (주석처리된 곳은 삭제하여도 무방합니다.)


1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import path, include
 
urlpatterns = [
    path('', include('blog.urls')),
    path('admin/', admin.site.urls),
]
cs


2번째 줄을 보시면 include라는 함수를 추가로 import 하였습니다.

그리고 5번줄에서 path함수를 활용하여 첫 화면, 아무것도 입력되지 않은 url에서는 blog의 urls를 참고하도록 하였습니다.


이제 blog라는 폴더안에 urls.py 이라는 파일을 새로 만들어서 아래와 같이 코드를 작성합니다.


1
2
3
4
5
6
from django.urls import path
from . import views
 
urlpatterns = [
    path('', views.index),
]
cs


해당 urls.py 파일은 위에서 작성한 파일과 다른 파일입니다.

blog라는 폴더 내부에 새롭게 만든 파일입니다.

먼저 해당 blog에서는 존재하지 않은 admin관련 import를 삭제하였습니다.

admin과 관련되어서는 추후 model을 다루게 될때 살펴보도록 하겠습니다.

그리고 화면을 보여주도록 할 views 파일을 import 하였고, url패턴에서 아무것도 입력되지 않은 주소에 대해서 views의 index를 참고하도록 하였습니다.


그럼 마지막으로 blog 폴더에 있는 views.py 파일을 열어 아래와 같이 코드를 작성합니다.


1
2
3
4
5
6
from django.shortcuts import render
from django.http import HttpResponse
 
# Create your views here.
def index(request):
    return HttpResponse("Main Screen!!!")
cs


2번째 줄에, HttpResponse 라는 함수를 추가로 import하였습니다.

그리고 index라는 함수를 만들었고 단순히 HttpResponse함수를 통한 반환을 하도록 하였습니다.


이렇게 하고 명령어창을 기본 start_django 폴더에 위치하게 한다음, 아래의 명령어를 입력하면 서버가 돌아가게 됩니다.


python manage.py runserver



migrations 에 대한 경고가 뜨는데 일단은 무시하겠습니다.

그리고 이제 localhost:8000 으로 접속하게 되면 아래와 같이 우리가 작성한 첫화면이 나오게 됩니다.



블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 문범우입니다.

최근 동아리 친구들과 장고 스터디를 하며 프로젝트를 진행하게 되었습니다.

공부하는 겸, 나중에 다시 참고할 수 있도록 정리해서 포스팅해보도록 하겠습니다.

앞으로 진행되는 django 프로젝트는 17년말에 새롭게 릴리즈된 django 2.0 버전을 바탕으로 진행됩니다.


먼저 이번 포스팅 장고 설치하는 방법과 기본 프로젝트 시작방법에 대해서 알아보도록 하겠습니다.


1. Django 설치하기


django 설치 방법은 매우 간단합니다.

구글링을 해보니 어떤 분들은 가상환경을 구성해서 설치하기도 하지만, 가상환경 구성에 있어서 까다로워 하시는 분들도 있고 아직 그럴만한 필요성을 크게 느끼지 못해서(제가 부족한 탓일겁니다..) 단순하게 로컬에 설치해보도록 하겠습니다.


아래 주소의 django 공식 홈페이지에도 설치 방법이 나와있으나 간단하기 때문에 굳이 참고하지 않으셔도 될 듯 합니다.


https://docs.djangoproject.com/en/2.0/intro/install/


우선 준비되어야 하는 점은,

python이 3.x 버전 이상이어야 하는 점 입니다.

저는 현재 OS X 환경에서 진행하고 있지만, 설치방법은 윈도우도 동일합니다.


먼저 터미널(윈도우의 경우 cmd)을 실행시켜서 아래와 같이 명령어를 입력합니다.


python --version


만약 해당 명령어에 대한 결과로, python 2버전이 나오시는 분들은,


python3 --version


을 입력해보시길 바랍니다.


대표적으로 맥에서는 python 2버전이 기본적으로 설치되어있어서 python 3버전을 설치시 따로 python3라고 명시하여 명령어를 내려줘야 합니다.


장고 프로젝트는 파이썬 3버전 이상을 바탕으로 진행할 예정이기 때문에, python 3버전이 아니신 분들은 python 공식 홈페이지를 통해서 3버전을 다운받으시길 바랍니다.


파이썬 3버전이 준비되었다면 다음과 같은 명령어로 장고를 설치합니다.


pip install django


만약, python3 --version 을 통해 파이썬 3버전을 확인하신 분들은


pip3 install django


로 입력해주셔야 합니다.


약간 기다리면 장고 설치가 완료됩니다.



2. 장고 프로젝트 시작하기


장고 설치가 완료되었으면 다음과 같은 명령어로 장고 프로젝트를 시작합니다.


django-admin startproject start_django


위의 명령어에서 start_django 는 단순히 프로젝트 이름이기 때문에 변경해주셔도 무관합니다.



위와 같이 django-admin startproject start_django 를 입력해도 아무런 결과가 뜨지 않지만, 실제로 ls 명령어(윈도우의 경우 dir)로 확인을 해보면 start_django라는 폴더가 생긴것을 확인할 수 있습니다.

( mysite 는 이전에 제가 혼자 공부하느라 만들었던 프로젝트이니 신경안쓰셔도 됩니다. )



이제 방금 생긴 start_django 폴더로 들어가서 다시 ls 명령어를 통해 확인해보면 

manage.py 파일과 start_django 폴더가 생긴것을 확인할 수 있습니다.


먼저 추가적으로 해당 프로젝트에 대해서 다뤄보기전에 서버를 돌려 정상적으로 프로젝트가 실행되는지 확인해보도록 하겠습니다.


해당 위치에서 아래와 같은 명령어를 입력합니다.


python manage.py runserver



정상적으로 명령어를 입력하시면 위와 같이 결과가 나오게 되고 더 이상 명령어를 입력할 수 없게 됩니다.

해당 결과는 현재 127.0.0.1:8000 에서 서버가 돌아가고 있다는 것을 의미하며, 의미상으론 localhost:8000 과 동일합니다.

따라서 웹 브라우저의 주소창에 


127.0.0.1:8000 또는 localhost:8000 


을 입력합니다.


해당 주소를 입력하여,



위와 같은 화면이 떴다면 정상적으로 프로젝트를 만든 것 입니다.


이제 다음 포스팅부터 제대로 장고 프로젝트를 수정해가며 꾸며보도록 하겠습니다.


블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc



안녕하세요. 문범우입니다.

이번 포스팅을 시작으로 해서, 파이썬 기반 웹 프레임워크인 플라스크(Flask)에 대한 기초다지기 강의를 시작할 예정입니다.

해당강의는 서울시립대학교 멋쟁이사자처럼 python 스터디에서 진행되는 강의이며 블로그에 게시되는 내용들은 각 수업을 정리하여 스터디에 참석하지 못한 인원이나 복습용입니다.

(추가로 영상촬영을 생각하고 있지만 아직 실질적인 계획은 없습니다.)


해당 수업은 다음과 같은 분들을 대상으로 진행됩니다.

- HTML, CSS 에 대해서 기본적으로 알고계시는 분들(직접적으로 사용되지는 않습니다.)

- Python에 대해 관심이 있고 흥미가 있으신 분들(문법이 크게 중요시되지 않습니다. 파이썬 문법이 매우 simple하고 쉽기 때문에 중간중간 필요한 것들에 대해서는 설명드릴 예정입니다.)


해당 내용은 기본적으로 파이썬3가 설치되어 있는 기준에서 설명드리며, 맥OS를 기반으로 내용이 진행됩니다.

윈도우와 큰 차이는 없을 것으로 예상되지만 윈도우환경에서 작업하시면서 발생하시는 오류는 댓글 및 이메일을 통해 남겨주시면 빠른 시일내에 답변을 드리도록 하겠습니다.


수업에 대한 커리큘럼 및 강의자료는 아래 github 주소에 있습니다.

https://github.com/doorBW/UOS_LIKELION_python




그럼 바로 강의 내용을 진행해보도록 하겠습니다.



이번강의 내용은 위와 같은 순서로 진행됩니다.

먼저 우리가 다루고자 하는 Flask가 무엇인지 알아볼 텐데, 이에 대해 알기위해 Web Framework가 무엇인지도 매우 간단하게 알아볼 예정입니다.

이후 자신의 컴퓨터에 플라스크를 설치해보고, 기본적인 예제를 진행해보도록 하겠습니다.

이후에는 플라스크를 이용하여 두수의 곱에 대한 값을 구하는 페이지를 만들어보고, 이어서 학교의 공지사항을 크롤링하는 등 플라스크에서 외부 라이브러리를 사용해보는 연습을 해보도록 하겠습니다.


그럼, 플라스크는 과연 무엇일까요?

슬라이드의 그림을 보면, 우리가 과학실험시간에 자주 보던 플라스크..

우리가 지금 배우고자 하는 것과는 전혀 관련이 없습니다 :) ㅎ


플라스크는 쉽게 말해서, 웹 프레임워크(Web Framework) 입니다!

파이썬 기반의 웹 프레임워크로는 플라스크 이외에도 유명한 장고(Django)가 있습니다.

이 두가지에 대한 차이점은 우리가 웹 프레임워크가 무엇인지 먼저 알아보고 확인해볼게요!


웹 프레임워크...가 무엇일까요?

뭔가 자주 들어본 것 같긴한데!

멋쟁이 사자처럼을 하신 분들은 Ruby on Rails를 해보셨을텐데, 이것도 루비언어 기반의 웹 프레임워크입니다.


웹 프레임워크를 너무 어렵게 보지 말고 조금만 더 쉽게 생각해볼게요!


루비온레일즈를 다뤄보신분들은 조금 더 이해가 쉽겠지만, 우리가 웹 어플리케이션, 즉 웹 사이트를 만들때 해야될 것들이 뭐가 있을까요?

보통 처음에 ' http:// main. ~ . com' 이라는 주소로 들어오면 메인 화면을 띄어줄거에요! 그리고 거기서 음.. '게시판' 메뉴를 누르면, 'http:// main. ~ .com/post '이런 정도의 url로 넘어가겠죠!

근데 이런 설정은 누가하죠?

우리가 html에서 a태그를 이용해서 어디로 가는지 알려주죠, 근데 좀더 자세히 들어가서, 게시판에서는 우리가 단지 html로 작성된 내용만 보는게 아니잖아요?

사용자들은 자신이 게시글을 올릴 수도 있어야 하고, 게시글을 확인도 할 수 있어야하고~ 댓글도 달고, 좋아요도 누를수 있어야하죠!

근데 이걸 단순히 html이나 css를 통해서 구현이 가능할까요?


이렇게 우리가 어떤 화면으로 넘어가는지 경로를 설정해주고, 그 경로로 가서 단순히 정보를 보여주는 것 뿐 아니라, 내부적으로 어떤 처리를 할지, 어떤 함수를 실행할지 설정하고, 우리의 데이터베이스에 있는 내용을 어떻게 가져와서 어떻게 보여주게 할 것인지, 우리가 처음부터 하나씩 다~ 구현하려면.. 어떻게 하죠..?


그런데 이를 보다 쉽게 다룰 수 있도록 해주는 것이 바로 Flask이고 웹 프레임워크입니다!


적절한 비유가 될지는 모르겠지만, 제가 청량리에서 신촌으로 무언가 물건을 보내려할때 우리는 '퀵 서비스'를 이용할 수 있어요!

이런 서비스가 없다면, 저는 옷을 차려입고 나가서 집앞 버스정류장에 가서 272, 271 등의 버스를 타고 신촌으로 열심히 가서 알맞은 위치에 물건을 전해줘야 하죠. 하지만 '퀵 서비스'가 있기 때문에, '퀵 서비스'의 이용법만 안다면 아주 간편하게 물건을 전송할 수 있죠! (물론 요금을 지불해야하지만, 웹 프레임워크는 무료랍니다!)


이렇게, 우리가 웹 어플리케이션을 만들고자 하는데 필요한 다양한 설정이나 기능들을 보다 쉽고 간편하게 다룰 수 있도록 해주는 것이 웹 프레임워크입니다.

그리고 세계에 존재하는 다양한 언어별로 사용되는 웹 프레임워크가 여러 종류인 것이죠.

처음에 말씀드렸듯이, 파이썬을 기반으로 한 웹 프레임워크는 대표적으로 플라스크(Flask) 와 장고(Django)가 있습니다.


이 두개의 차이점에 대해서는 쉽게 생각해서,

플라스크는 덜 도와주지만 그만큼 자유도가 높고,

장고는 더 도와주지만 상대적으로 제한된 점이 있어요.


물론 우리와 같이 처음 시작해보는 사람들에게는 두가지 모두 큰차이는 없습니다.

저는 오히려 처음 할때는 깔끔한 플라스크가 조금 더 쉽게 느껴지지 않을까 라는 생각에 플라스크로 수업을 진행하게 되었습니다.



플라스크는 설치도 너무나 간편합니다.

파이썬을 설치하신 분들께서는 pip라는 파이썬 패키지툴이 자동으로 설치되어 있습니다.

이를 통해서 플라스크를 설치하시면 되는데, 위의 슬라이드와 같이


pip install flask


명령어를 맥은 터미널에, 윈도우는 cmd창에 입력시켜주세요!


* 파이썬을 이용하시는 많은 분들께서는 virtualenv 라는 가상환경을 통해 설치하시는 분들도 많은데, 이는 버전관리나 프로젝트 관리가 용이하도록 하는 방법 중에 하나입니다. 물론 이를 익히면 더 좋겠지만, 오히려 처음에는 머리속을 더 복잡하게 할 수 있다고 생각되어 단순히 로컬(자신의 컴퓨터)에 설치하는 과정으로 진행합니다.

이에 대해서 궁금하신 분들은 댓글 및 이메일에 말씀해주시면 답변드리겠습니다. :)


플라스크가 설치가 되었나요?

그럼 자신이 사용하는 에디터를 켜서 위의 코드를 먼저 따라서 쳐볼게요!


다 치셨으면, 이제 한줄씩 무엇을 의미하는지 함께 확인해볼게요.

조금 이따 보겠지만, 위와 같이 9줄 밖에 안되는 코드인데도 불구하고, 이것은 Hello World라는 문구를 출력하는 웹페이지를 완성한 상태입니다 :)


1번줄에서는, Flask라는 패키지, 우리가 방금 설치한 그것에서 flask를 가져옵니다. 쉽게 생각해서 우리가 앞으로 flask를 쓰겠다는 이야기에요.


2번줄에서는 플라스크를 생성(실행?)하는 의미입니다. app이라는 변수에 flask 프로젝트를 초기화 시켜서 실행하겠다라는 코드입니다.


3번줄은 공백이고~ 4번줄에서는, url을 지정해주는 코드입니다.

@app.route('/'), 즉 우리가 위에서 생성한 app에 대해 route, 경로를 설정해줄건데, ('/') http:// <우리 기본 주소> /  와 같은 경로를 이야기해요!

예를 들어, @app.route('/route_test') 라고했다면?

http:// <우리 기본 주소> /route_test 와 같은 경로를 이야기한 것 이겠죠?


그럼, 이렇게 경로를 설정해서 뭐할건데?

그것이바로 다음줄에 나와있습니다.

5번줄에서 함수를 정의하는데, 이것은 바로 위에서 설정한 경로에 사용자가 요청을 보냈을때 실행되는 것 입니다.

hello_world 라는 함수를 실행할 것이고, 그 함수의 내용으로는 6번줄에 나와있습니다.

return 'Hello World!' 단순히 Hello World! 를 반환하도록 하였습니다.

즉 Hello World! 라는 문자열을 띄어주라고 한거에요.


그리고 8,9번줄은 단순히 해당 플라스크 프로젝트를 실행시키는 코드라고 이해하시면 됩니다 :)


이제 위와 같은 구조를 가지는 구구단 계산 페이지를 만들어 볼거에요.

완성된 코드는 github에 있지만.. 일단 우리는 기능적으로 구현되는 것에 초점을 둘것이기에 디자인은 전~혀 예쁘지 않습니다.. :)


(해당 내용은 코드에 따로 주석으로 설명을 달아 놓았으니 추가적인 설명은 생략합니다.)



(해당 내용은 코드에 따로 주석으로 설명을 달아 놓았으니 추가적인 설명은 생략합니다.)




다음주에는 이메일 인증을 통한 회원가입을 구현해보는 실습을 진행할거에요.

실제로 자신의 구글계정을 이용해서 이메일을 보내보도록 하고, 이후에 회원가입 직접 구현해볼거에요!


실제로 비밀번호 암호화도 시켜볼 것이고, 우리가 이메일 보내는 실습을 해냈기 때문에, 회원가입을 요청한 사람이 자신이 등록한 이메일로 전송된 메일로 인증을 성공했을 때만 정상적인 사용자로 인식되게끔 할 예정입니다.


이를 위해서는 데이터베이스를 설치해서 db에 사용자 정보를 담아야하는데, 이때문에 mysql을 연결해볼지 말지 고민중입니다... (거의 할 예정이에요..ㅎㅎㅎㅎㅎ)

하지만 우리가 db 다루는 것이 목표가 아니기 때문에, db에 대해서는 대략대략 넘어가고 우리가 구현하고자 하는 기능을 구현하는데 초점을 둘 예정입니다.



이렇게 첫번째 수업에 대한 사전정리 작업을 하였습니다.

오늘 오후 7시에 수업이 진행되는데, 이후 추가적인 내용은 해당 포스트에 추가하여 정리하겠습니다.

궁금하신 점이나 잘 해결이 안되는 점들은 언제든지 댓글 및 이메일, 카카오톡을 통해 연락해주세요 :)


블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 이번에는 php로 MySQL에 접속하여 데이터를 삭제하는 방법에 대해서 알아보겠습니다.


1. MySQL에 접속하여 데이터 삭제하기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>MySQL에 접속하여 데이터 insert하기</h1>
    <?php 
    //mysql 접속 계정 정보 설정
    $mysql_host = 'localhost';
    $mysql_user = 'uos02';
    $mysql_password = 'uosftd.123';
    $mysql_db = 'uos02';
    //connetc 설정(host,user,password)
    $conn = mysql_connect($mysql_host,$mysql_user,$mysql_password);
    //db 연결
    $dbconn = mysql_select_db($mysql_db,$conn);
    //charset UTF8
    mysql_query("set names utf8");
    //쿼리문 작성
    $query = "select * from tb_student";
    //쿼리보내고 결과를 변수에 저장
    $result = mysql_query($query);
    echo "현재 데이터는 아래와 같습니다.<br/>"
    ."삭제하고자 하는 데이터가 있다면 해당 데이터를 선택하고 제출을 누르세요.";
    echo "<form method='POST' action='finalInsertDelete.php'>";
    while($row = mysql_fetch_array($result)){
        echo "<input type='radio' name='radio' value=".$row[id]." />";
        echo "번호: ".$row[id]."/ 이름: ".$row[name]."/ 성별: ".$row[sex]
        ."/ 몸무게: ".$row[weight]."/ 키: ".$row[height]."/ 영어점수: ".$row[engScore]
        ."/ 취미: ".$row[specialty]."<br/>";
    }
    echo "<input type='submit'/>";
    echo "</form>";
    $deleteQuery = "delete from tb_student where id=".$_POST['radio'];
    $result = mysql_query($deleteQuery,$conn);
    if ($_POST['radio'] != NULL) 
        echo "<meta http-equiv='refresh' content='1;finalInsertDelete.php' />";
    echo "<br/><h1>데이터 Insert</h1>입력하고자 하는 데이터를 입력하고 제출을 누르세요.";
    ?>
    <form method="POST" action="finalInsertDelete.php">
        이름: <input type="text" name="name"/><br/>
        성별: <input type="text" name="sex"/><br/>
        몸무게: <input type="text" name="weight"/><br/>
        키: <input type="text" name="height"/><br/>
        영어점수: <input type="text" name="engScore"/><br/>
        취미: <input type="text" name="specialty"/><br/>
        <input type="submit" name="answer"/><br/>
    </form>
    <?php 
        $insertQuery = "insert into tb_student (name,sex,weight,height,engScore,specialty)"
        ." values ('".$_POST['name']."','".$_POST['sex']."',".$_POST['weight'].","
        .$_POST['height'].",".$_POST['engScore'].",'".$_POST['specialty']."')";
        $result = mysql_query($insertQuery,$conn);
        //데이터가 전달되었으면 새로고침하기
        if (($_POST['name'] != NULL)&($_POST['sex'] != NULL)&($_POST['weight'] != NULL)
            &($_POST['height'] != NULL)&($_POST['engScore'] != NULL)){
         echo "<meta http-equiv='refresh' content='1;finalInsertDelete.php' />";
        }
    ?>
 
</body>
</html>
cs




블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


이번에는 지난 포스팅에 이어서, php에서 MySQL에 접속해서 데이터를 입력하는 방법에 대해서 알아보겠습니다.


1. MySQL에 접속해서 데이터 입력하기


이또한 db에 있는 각 칼럼의 자료형등을 잘 신경써줘야 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>MySQL에 접속하여 데이터 insert하기</h1>
    <?php 
    //mysql 접속 계정 정보 설정
    $mysql_host = 'localhost';
    $mysql_user = 'uos02';
    $mysql_password = 'uosftd.123';
    $mysql_db = 'uos02';
    //connetc 설정(host,user,password)
    $conn = mysql_connect($mysql_host,$mysql_user,$mysql_password);
    //db 연결
    $dbconn = mysql_select_db($mysql_db,$conn);
    //charset UTF8
    mysql_query("set names utf8");
    //쿼리문 작성
    $query = "select * from tb_student";
    //쿼리보내고 결과를 변수에 저장
    $result = mysql_query($query);
    echo "현재 데이터는 아래와 같습니다.<br/>";
    while($row = mysql_fetch_array($result)){
        echo "번호: ".$row[id]."/ 이름: ".$row[name]."/ 성별: ".$row[sex]
        ."/ 몸무게: ".$row[weight]."/ 키: ".$row[height]."/ 영어점수: ".$row[engScore]
        ."/ 취미: ".$row[specialty]."<br/>";
    }
    echo "<br/><h1>데이터 Insert</h1>입력하고자 하는 데이터를 입력하고 제출을 누르세요.";
    ?>
    <form method="POST" action="finalInsertDelete.php">
        이름: <input type="text" name="name"/><br/>
        성별: <input type="text" name="sex"/><br/>
        몸무게: <input type="text" name="weight"/><br/>
        키: <input type="text" name="height"/><br/>
        영어점수: <input type="text" name="engScore"/><br/>
        취미: <input type="text" name="specialty"/><br/>
        <input type="submit" name="answer"/><br/>
    </form>
    <?php 
        $insertQuery = "insert into tb_student (name,sex,weight,height,engScore,specialty)"
        ." values ('".$_POST['name']."','".$_POST['sex']."',".$_POST['weight'].","
        .$_POST['height'].",".$_POST['engScore'].",'".$_POST['specialty']."')";
        $result = mysql_query($insertQuery,$conn);
        //데이터가 전달되었으면 새로고침하기
        if (($_POST['name'] != NULL)&($_POST['sex'] != NULL)&($_POST['weight'] != NULL)
            &($_POST['height'] != NULL)&($_POST['engScore'] != NULL)){
         echo "<meta http-equiv='refresh' content='1;finalInsertDelete.php' />";
        }
    ?>
 
</body>
</html>
cs




블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


안녕하세요. 이번에는 php를 이용해 MySQL에 접속하여 원하는 데이터를 가져와보도록 하겠습니다.


1. MySQL 접속해서 데이터 가져오기


MySQL의 db에 있는 데이터를 잘 확인하고, 가져올 수 있도록 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>MySQL 접속해서 데이터 가져오기</h1>
    <?php 
    //mysql 접속 계정 정보 설정
    $mysql_host = 'localhost';
    $mysql_user = 'uos02';
    $mysql_password = 'uosftd.123';
    $mysql_db = 'uos02';
    //connetc 설정(host,user,password)
    $conn = mysql_connect($mysql_host,$mysql_user,$mysql_password);
    //db 연결
    $dbconn = mysql_select_db($mysql_db,$conn);
    //charset UTF8
    mysql_query("set names utf8");
    //쿼리문 작성
    $query = "select * from tb_student";
    //쿼리보내고 결과를 변수에 저장
    $result = mysql_query($query);
    echo "MySQL에서 가져온 데이터는 아래와 같습니다.<br/>";
    while($row = mysql_fetch_array($result)){
        echo "번호: ".$row[id]."/ 이름: ".$row[name]."/ 성별: ".$row[sex]
        ."/ 몸무게: ".$row[weight]."/ 키: ".$row[height]."/ 영어점수: ".$row[engScore]
        ."/ 취미: ".$row[specialty]."<br/>";
    }
    ?>
</body>
</html>
 
cs





블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc


이번에는 원하는 숫자를 버튼으로 눌렀을 때, 해당 하는 숫자에 대한 구구단이 출력되도록 하는 코드 구현합니다.

궁금하거나 이해가 안되는 부분에 있어서는 댓글을 이용해주세요 :)


1. 원하는 버튼 눌러서 구구단 출력하기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>문제6. 원하는 버튼을 눌러서 구구단 확인하기</h1>
    <p>구구단을 보고싶은 번호를 클릭하세요.</p>
    <form method="POST" action="finalPHP1.php">
        <?php 
            for($i=2;$i<10;$i++){
                echo "<button type='submit' name='button' value='".$i."'>".$i."단</button>";
            }
            echo "</form>";
            echo "선택한 숫자, ".$_POST['button']."의 구구단은 아래와 같습니다.<br/>";
            for($i=1;$i<10;$i++){
                echo $_POST['button']." X ".$i." = ".($_POST['button']*$i)."<br/>";
            }
        ?>
</body>
</html>
cs




블로그 이미지

Tigercow.Door

Data-Analysis / AI / back-end / Algorithm / DeepLearning / etc