Anaconda , Django, Djangorestframework, Tensorflow, postgres 환경에서 REST API 호출을 통해 간단한 Tensorflow 예제를 실행하고 결과를 리턴하는 것까지 설명하고자 한다. Spark 연동 및 Tensorflow Serving 을 연동하는 부분은 따로 설명하겠다
[링크]
Anaconda – PyCharm – Tensorflow 환경 구성 : http://wp.me/p7xrpI-8Q
가. Anaconda sub Library Install
virtualenv 설정은 사용하지 않고 바로 설치하고 진행
[Django 설치] conda install -c anaconda django=1.9.5 [Django Rest Frame Work] conda install -c ioos djangorestframework=3.3.3 [postgress 연동 plugin] conda install -c anaconda psycopg2=2.6.1 [pygments 설치] conda install -c anaconda pygments=2.1.3
나. PostgresSql 설치
[설치]
yum install postgresql-server
[계정확인 / 비밀번호 지정]
cat /etc/passwd | grep postgres sudo passwd postgres
[DB 생성 경로 확인]
cat /var/lib/pgsql/.bash_profile env | grep PGDATA
[DB 초기화/실행]
sudo -i -u postgres initdb pg_ctl start ps -ef | grep postgress
[DB 접속 / database 생성]
# psql postgres=# create database test1 ; postgres=# select * from pg_database ;
[user 생성 및 권한 부여 ]
postgres=#CREATE USER testuser WITH PASSWORD '1234'; postgres=#ALTER ROLE testuser SET client_encoding TO 'utf8'; postgres=#ALTER ROLE testuser SET default_transaction_isolation TO 'read committed'; postgres=#ALTER ROLE testuser SET timezone TO 'UTC'; postgres=#GRANT ALL PRIVILEGES ON DATABASE test1 TO testuser;
[생성 유저 테스트]
psql -U testuser test1
[psql command]
순서대로 전체 DATABASE LIST 출력, 선택한 DATABASE 접속, 해당 DATABASE TABLES
postgres=#\list postgres=#\connect DATABASE_NAME postgres=#\dl+
다. Django 작업 목차
[1. 뼈대 구성]
startproject : 프로젝트 생성 settings.py : 프로젝트 설정 항목 변경 migrate : 유저/그룹 테이블 생성 createsuperuser : 프로젝트 관리자 생성 startaup : 북마크 앱 생성 settings.py : 북마크 앱 등록
[2. 모델 코딩]
models.py : 모델(테이블)정의 admin.py : Admin 사이트에 모델 등록 makemigrations : 모델을 데이터베이스에 반영 migrate
[3. 기타]
urls.py : URL 정의 views.py : 뷰 로직 작성 templates directory : 템플릿 파일 작성
라. 프로젝트 생성
[프로젝트 생성]
# cd ~/PycharmProjects # django-admin.py startproject djangodemo
마.북마크 앱 생성/등록
[북마크 앱 생성 ]
python manage.py startapp snippets
[북마크 앱 등록]
INSTALLED_APPS =(...'rest_framework','snippets.apps.SnippetsConfig',)
바. 디비 정보 세팅
[settings.py 수정 – 디비 정보 입력]
vi ~/PycharmProjects/djangodemo/djangodemo/settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'test1', 'USER': 'testuser', 'PASSWORD': '1234', 'HOST': 'localhost', 'PORT': '', } }
사. Model 생성
[models.py]
[예제 코드]
from django.db import models from pygments.lexers import get_all_lexers from pygments.styles import get_all_styles LEXERS = [item for item in get_all_lexers() if item[1]] LANGUAGE_CHOICES = sorted([(item[1][0], item[0]) for item in LEXERS]) STYLE_CHOICES = sorted((item, item) for item in get_all_styles()) class Snippet(models.Model): created = models.DateTimeField(auto_now_add=True) title = models.CharField(max_length=100, blank=True, default='') code = models.TextField() linenos = models.BooleanField(default=False) language = models.CharField(choices=LANGUAGE_CHOICES, default='python', max_length=100) style = models.CharField(choices=STYLE_CHOICES, default='friendly', max_length=100) class Meta: ordering = ('created',)
아. Admin.py 등록
위에 정의한 테이블 구조에 맞춰 admin UI 에서도 볼 수 있도록 정의해 줍니다.
[admin.py]
from django.contrib import admin from snippets.models import Snippet # Register your models here. class SnippetsAdmin(admin.ModelAdmin): list_display = ('created','title','code','linenos','language','style') admin.site.register(Snippet, SnippetsAdmin)
차. Project Migration
[migration]
python manage.py makemigrations python manage.py migrate
[reset migration]
python manage.py migrate --fake <app-name> zero
[실행 결과]
[Postgres DB Table 생성 확인]
마이그레이션은 기본적으로 디비와 모델을 동기화하는 작업
SELECT * FROM information_schema.tables ; SELECT <table name> FROM information_schema.tables ;
카. 슈퍼유저 생성 및 서버 테스트
[Create Super User]
python manage.py createsuperuser
[슈퍼유저 정보 입력]
Username (leave blank to use 'root'): kim Email address: kim@naver.com Password: Password (again):
[Server Start]
프로젝트 폴더로 이동 (프로젝트 폴더에 manage.py 가 있는 위치) 하여 서버를 기동한다.
ip addr | grep "inet "
python manage.py runserver localhost:8989
[Admin Page]
http://등록한 주소 : 포트 /admin
계정은 아까 위에서 생성한 슈퍼 유저 (저는 OS 계정과 동일하게 설정)
위에서 생성한 테이블까지 출력된다면, 여기까지 문제없이 진행된 것
타. REST Service App 개발
– 참조 사이트 : http://www.django-rest-framework.org/tutorial/1-serialization/
– 현재 상태
. snippets APP 생성 완료
. Snippet Model 생성
. postgresql 동기화 완료
==> 다음 포스트에서 작성