20170813 django api server unit test and remote debugging

Post on 23-Jan-2018

661 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Jongwon�Han

Django�API�Server�Unit�Testand�Remote�Debugging

PyCon�Korea�2017

발표자�소개

• 한종원�

• Python과�Cloud�Infra,�Lean/Agile�방법론�그리고�애플의�제품을�사랑.�

• 2012년�석사�학위를�마치고,�startup을�시작(이때부터�Python,�AWS를�production�level에서�사용)�

• '의미가�있는�일을,�올바르게�하고�싶다.'�

• 경력�

• (현)�DevOps�전문�스타트업�‘HB�Smith’�대표�

• 택시�O2O�서비스�스타트업�‘Kanizsa�Lab’의�backend�server�/�infra�devops�담당�

• Cloud�computing�전문�스타트업�'A2�company'�co-founder�(‘KINX’에�인수합병)�

• NEXON�'MapleStory�국내�Live�Team'에서�DBA,�SA로�근무�(산업�기능�요원)

https://www.linkedin.com/in/addnull/

https://hbsmith.io

Startup�경력�=�Python�사용�기간

• 발표�대상:�중급�Django�API�server�개발자�

• 발표�순서�

• Django�API�server�unit�test�

• 나의�개발�환경�구축기�

• Remote�Debugging�

• Wrap�Up

(예상�발표�시간:�35~40분)

Django�API�server�unit�test

Django�API�server�unit�test

• Why�Django?�

• Python�이라서!�

• 정형화된�code�structure�

• 풍부한�troubleshooting�과�사용자�그룹

->�누가�개발해도�결과가�비슷

https://www.djangoproject.com/

Django�API�server�unit�test

• 물론�단점도�많습니다.�

• 다소�느리고,�무겁죠.�

• 살짝�아쉬운�ORM�최적화.

->�난�API�server만�만들고�싶고,HTML�template�같은�건�안쓰는데…

->�DML은�ORM�한테�맡겨도,database�schema(DDL)는�직접�관리하세요.

Django�API�server�unit�test

• 그럼�Django�말고�더�좋은게�있을까요?

->�그래도�API�개발�기한(due�date)을�지키기�위해선, Django�+�DRF�만한�것도�없는�것�같아요.

http://www.django-rest-framework.org/

Django�API�server�unit�test

• What�is�Django�API�server�unit�test?�

• 여기서�말하는�‘unit’은�각각의�API를�의미�

• 즉,�unit�test는�실제�API�call을�해보고의도한�결과가�나오는지�확인�

• 되도록�가능한�모든�API�call을�test

->�실행되지�않는�bug는�bug가�아니다?!?!

Django�API�server�unit�test

• API�call�example�

• HTTP�method:�

• base�URL:�

• endpoint(path):�

• query�parameters:�

(GET)�https://api.example.com/v1/users/?role=admin&status=active

GET,�POST,�PUT,�DELETE�…

https://api.example.com/v1

/users/

role=admin&status=active

Django�API�server�unit�test

• unit(API)�test에서�“의도한�결과”란?

->�성공(2XX)�뿐만�아니라�일부러�실패(4XX)하는지도�확인

Django�API�server�unit�test

• “되도록�가능한�모든”�API�call�test를�위해서�

• Django의�in-memory�DB:�

• DRF의�‘APITestCase’�Class:�

• ‘factory_boy’:

->�매번�깨끗한�test�DB�생성

->�API�call�template

->�random�parameter�value�generator

https://github.com/FactoryBoy/factory_boy

Django�API�server�unit�test

• 오늘�발표에�사용된�code�

• API�와�unit�test�example

• HTTP�method:�

• endpoint(path):�

• query�parameters:

GET

/numbers/

start=1&end=2

‘start’와�‘end’라는�정수�2개�사이에�있는�모든�정수를�반환하는�API

https://github.com/HardBoiledSmith/tabris/tree/master/pycon_kr_2017_addnull

Django�API�server�unit�test

• API�와�unit�test�example�(cont.)

Django�API�server�unit�test

• API�와�unit�test�example�(cont.)

`

• API�와�unit�test�example�(cont.)

Django�API�server�unit�test

• API�와�unit�test�example�(cont.)

Django�API�server�unit�test

• unit�test�실행�결과

Django�API�server�unit�test

• unit�test�실행�결과�(cont.)

나의�개발�환경�구축기

나의�개발�환경�구축기

• 저는�Mac�OS�X�에서�PyCharm으로�개발합니다.하지만�실제�서버�환경은�AWS의�Amazon�Linux죠.

CentOS와는�다르다!�CentOS와는!

나의�개발�환경�구축기

• 개발�환경과�실제�서버�환경�차이에서�오는�문제들…�

• 그럼�‘Virtualenv’�쓰면�어떤가요?

->�Mac�OS�X에서는�좀�이상하게�동작해요.�

->�그리고�결국�동일한�환경이�아니잖아요.

나의�개발�환경�구축기

• 여기�Vagrant�라는�silver�bullet이�있습니다.�

• 심지어�Amazon�Linux�box도�있습니다.

https://www.vagrantup.com/

https://app.vagrantup.com/mvbcoding/boxes/awslinux/

나의�개발�환경�구축기

• 즉,�개발을�위한�Amazon�Linux�VM을�만들었습니다.

나의�개발�환경�구축기

• ‘Vagrantfile’https://github.com/HardBoiledSmith/tabris/tree/master/pycon_kr_2017_addnull

나의�개발�환경�구축기

• ‘provisioning.py’https://github.com/HardBoiledSmith/tabris/tree/master/pycon_kr_2017_addnull

나의�개발�환경�구축기

• Vagrant�VM을�개발�환경으로�쓰면,

->�실제�서버와�거의�동일한�환경을�5~10분만에�구축�

->�개발팀의�모든�개발자가�동일한�환경을�사용�

->�뭔가�개발�환경이�이상해지면,�속편하게�VM�날리고,�새로�VM�생성

misconfiguration

dependency�hell

package�version�conflict

OOM garbage�files

Remote�Debugging

Remote�Debugging

• Why�remote�debugging?

->�실제�서버와�거의�동일한�환경을�위해서�Vagrant�VM을�쓰지만,�

->�PyCharm의�다양하고�편리한�debugger�기능을�쓰고�싶었어요.

Remote�Debugging

• Mac�OS�X에서�실행되는�PyCharm�입장에서Vagrant�VM�안의�Django�API�server는�딴�세계

Remote�Debugging

• PyCharm에서�지원하는�2가지�remote�debugging�

• Using�a�remote�interpreter�

• Using�Python�Debug�Server

->�기존�source�code�수정�불필요�(추천)

->�기존�source�code�수정�필요

Remote�Debugging

• PyCharm�‘Using�a�remote�interpreter’�설정�단계1.�Remote�Interpreter2.�Debug�Configuration 3.�Auto�Deployment

Remote�Debugging�-�1.�Remote�Interpreter�설정

• 1.1.�[preferences]�에서‘project�interpreter’�검색1.2.�우측�상단의�������톱니바퀴�클릭1.3.�‘Add�Remote’

Remote�Debugging�-�1.�Remote�Interpreter�설정

• 1.4.�SSH�Credentials�입력

Remote�Debugging�-�2.�Debug�Configuration�설정

• 2.1.�[Run]�->�[Edit�Configurations]2.2.�좌측�상단의�‘+’�버튼�클릭2.3.�‘Python’�선택

Remote�Debugging�-�2.�Debug�Configuration�설정

• 2.4.�오른쪽�화면처럼�설정

->�여기까지만해도,�remote�debugging가능합니다.�

->�하지만,�local(Mac�OS�X)에서Python�code를�변경한�내용이remote�debugging에�바로�반영하려면?

Remote�Debugging�-�3.�Auto�Deployment�설정

• 3.1.�[Tools]�->�[Deployment]�������->�[Configuration]3.2.�좌측�상단의�‘+’�버튼�클릭3.3.�‘SFTP’�선택

Remote�Debugging�-�3.�Auto�Deployment�설정

• 3.4.�아래�화면처럼�‘Connection’�항목과�‘Mappings’�항목�설정

Remote�Debugging�-�3.�Auto�Deployment�설정

• 3.6.�[Tools]�->�[Deployment]�->�[Automatic�Upload]�

• Auto�Deployment�결과�예시

->�이제�local(Mac�OS�X)에서Python�code를�변경한�내용이remote�debugging에�바로�반영됩니다.

Remote�Debugging�-�Demo

우측�상단에�‘벌레’�icon�클릭

Remote�Debugging�-�Demo

/numbers/�?start�=�1&end�=�10

Remote�Debugging�-�Demo

/numbers/�?start�=�10 &end�=�1

###�QUIZ�###�‘unit�test’를�‘remote�debugging’하려면?

Remote�Debugging

• Debug�Configuration�설정

->�Script�parameters에�

‘runserver�0.0.0.0:80’�대신에�

‘test�-v�3’을�입력

Wrap�Up

Wrap�Up

• Django�API�server�unit�test�

• Django�+�DRF�+�factory_boy�

• 나의�개발�환경�구축기�

• Mac�OS�X�+�Vagrant(Amazon�Linux)�

• Remote�Debugging�

• PyCharm�‘Using�a�remote�interpreter’

Call�to�Action

• 저희는�API�개발팀을�위한�모니터링�서비스를�만들고�있습니다.저희의�early�bird�고객이�되어주세요.�

• 아직�Python�Korea�FG�가입하지�않으셨다구요?�

• 저희�사이트에서�개발팁을�가져가세요!

https://hbsmith.io

https://www.facebook.com/groups/pythonkorea/

https://medium.com/hbsmith

Jongwon�Han

감사합니다

addnull@hbsmith.io�010-9166-6855

top related