O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

201803 파이썬 세미나

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
T.D.D로 Flask API 맛보기
T.D.D로 Flask API 맛보기
Carregando em…3
×

Confira estes a seguir

1 de 61 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a 201803 파이썬 세미나 (20)

Anúncio

Mais recentes (20)

201803 파이썬 세미나

  1. 1. Web 개발 0년차 김정환
  2. 2. Web 개발 0년차 아무말 대잔치?
  3. 3. 다룰 내용 •Django 에 적응하면서 알게된 기존 발표 자료들 소개 •놓치기 쉬운 Django 의 이미 만들어져 있는 기능들 •Heavy traffic 서비스 운영시 지표 이해하기 •웹 개발시 반드시 알고 있어야 할 것들
  4. 4. 바퀴를 재발명 하지 말자
  5. 5. Admin Pages 조금만 손보면 간단한 Back Office 는 주워먹기
  6. 6. 기초를 탄탄히 하자 •Model 의 표현을 잘 정리해 두자 •verbose_name 를 꼭 기입해 두자 •기본 옵션들을 잘 활용하자
  7. 7. Model 표현 •__str__ 함수 활용 •admin 페이지에서 사용할 내용들 활용
  8. 8. verbose_name •verbose_name 과 __str__ 의 조합은 
 admin 페이지를 매우 직관적이게 변경 시켜줌 •비슷한 용도의 help_text 는 입력시 도움이 됨
  9. 9. 기본 옵션들 •다양한 기본 옵션을 잘 활용하면 
 복잡한 내용을 매우 간단히 줄일 수 있음 •unique, validators 등은 
 매우 유용한 활용법을 지님 •editable 은 object 수정 페이지의 
 불필요 필드를 숨겨줌
  10. 10. 기본 기능 적극 활용 •Actions 기능 활용 •Filter 기능 활용 •Search 기능 활용 •date_hierarchy 기능 활용 •fieldsets 기능 활용 •list_display_links
  11. 11. Actions •Model 의 method 를 호출 할 수 있음 •별도 페이지 생성을 최소화 가능 •선택된 row들을 queryset으로 
 하나씩 조회하여 처리 •https://docs.djangoproject.com/en/2.0/ ref/contrib/admin/actions/
  12. 12. Filter •이렇게 별도의 커스텀 필터를 만들 수 있음 •admin 페이지를 벋어나지 않도록 
 기본 기능을 재정의 해서 사용 •필터의 활용방법은 사이트 상황에 맞춰 직접 제 작
  13. 13. Search •가장 유용하다고 생각한 기능 •본 객체의 필드 조회는 당연,
 연결된 필드도 조회할 수 있음 •연관된 필드의 내용 조회가 가능함
 다양한 방법으로 활용 가능 •남용하는 것은 무거운 쿼리를 만들 수 있음 주 의!
  14. 14. date_hierarchy •날짜를 모아서 정리해 줄 수 있음 •이 발표 자료를 정리하기 전에는 몰랐던 내용
 (심지어 filter 기능을 재정의 해서 썼었음) •주별 정리 기능은 없어서 조금 아쉬움
  15. 15. fieldsets •default 를 잘 정의 해두면 더 유용함 •개발자 보다 관련팀들에게 유용한 기능 •너무 많은 옵션은 결국 안쓰게 되는 문제를 일 으킴
 (잘못 손대서 잘못 될까 하는 두려움) •admin 페이지를 활용하게 하기 위한 필수 팁
  16. 16. list_display_links •상세 데이터를 클릭 할 수 있는 필드 지정 •list_display 를 복잡하게 작성할 수록 큰 도움
  17. 17. 상세 설명 •Pycon Korea 2017 | Django admin site를 커스텀하여 적극적으로 활용하기 •https://www.slideshare.net/bbayoung7849/ djangoadminsitecustomexample •저는 혼자 고생 다하고 이 발표 자료를 찾았네요...
  18. 18. 추가 활용 팁 •Admin 페이지에서만 쓸 기능은 Admin 에서 •Import / Export 기능 모듈을 활용 •limit_choices_to : Relationships 에서 Limit 활용
  19. 19. Model 핵심 기능만 Admin 데이터 조회 기능 위주로
  20. 20. limit_choices_to •만약 Students 가 대학교 단위 전체라고 한다 면? •페이지를 생성하는 작업에 시간이 매우 오래 걸 림 •동적인 작업은 불가능함 •불필요한 데이터를 걸러주는 것으로 우선 사용
  21. 21. Function Based vs Class Based Which is Better between FBC and CBV 김석훈님 발표 자료 참고 분 류 지네릭 뷰 이름 뷰의 기능 또는 역할 Base View View 가장 기본이 되는 최상위 지네릭 뷰입니다. 다른 모든 지네릭 뷰들은 View의 하위 클래스입니다. TemplateView 템플릿이 주어지면 해당 템플릿을 렌더링해줍니다. RedirectView URL이 주어지면 해당 URL로 리다이렉트시켜줍니다. Generic Display View DetailView 객체 하나에 대한 상세한 정보를 보여줍니다. ListView 조건에 맞는 여러 개의 객체를 보여줍니다. Generic Edit View FormView 폼이 주어지면 해당 폼을 보여줍니다. CreateView 객체를 생성하는 폼을 보여줍니다. UpdateView 기존 객체를 수정하는 폼을 보여줍니다. DeleteView 기존 객체를 삭제하는 폼을 보여줍니다. Generic Date View ArchiveIndexView 조건에 맞는 여러 개의 객체 및 그 객체들에 대한 날짜 정보를 보여줍니다. YearArchiveView 년도가 주어지면 그 년도에 해당하는 객체들을 보여줍니다. MonthArchiveView 연, 월이 주어지면 그에 해당하는 객체들을 보여줍니다. WeekArchiveView 연도와 주차(week)가 주어지면 그에 해당하는 객체들을 보여줍니다. DayArchiveView 연, 월, 일이 주어지면 그 날짜에 해당하는 객체들을 보여줍니다. TodayArchiveView 오늘 날짜에 해당하는 객체들을 보여줍니다. DateDetailView 연, 월, 일, 기본키(또는 슬러그)가 주어지면 그에 해당하는 특정 객체 하나에 대한 상세한 정보를 보여줍니다. 4 / 12
  22. 22. FBV vs CBV •김석훈님의 자료를 참고
 https://www.slideshare.net/seokhunkim4/20171209pyconfbvcbv •Rest Framework 를 사용하게 되면 CBV 를 사용하시는 것을 매우 권함 •적은 코드 및 예외 처리 등 이점이 매우 많음
  23. 23. Rest Framework Frontend 와 Backend 분리
  24. 24. 장점 •분업 개발 및 App 제작에 이점이 생김 •테스트 API 페이지 자동 생성 •잘 정리된 Mixin 구조
  25. 25. 선택 전 확인 요소 •Sync AJAX & Async AJAX •앱에 비중이 좀더 높거나 angularJS 와 같은 API 비중이 높은 사이트 인지?
  26. 26. 반복 작업 줄이기 TDD Gulp Django Admin Command Jenkins
  27. 27. Gulp •gulp-sync •gulp-concat •gulp-uglify •gulp-rename •gulp-rev •gulp-rev-replace •gul-clean •sync-exec
  28. 28. •gulp-clean •gulp-sync •gulp-concat •gulp-uglify •gulp-rev •gulp-rename •gulp-rev-replace •sync-exec
 •파일 삭제 •task 순차 실행 •파일 내용 모아주기 •JS 간략화 •파일에 revision 생성 •파일을 revision 에 맞게 이름 변경 •revision 된 파일명을 연결 •외부 명령어 수행
  29. 29. Gulp 예제 gulp.task('file-hash', gulpsync.sync([ 'clean-static_work', 'clean-staticfiles', 'collectstatic', 'copy-static', 'rev-static', 'rev-replace', 'move-staticfiles-tmp', 'copy-static_work-staticfiles']) );
  30. 30. Jenkins 나 대신 일해주는 비서
  31. 31. Jenkins •OS 정리 작업 •로그 정리 •서버 생성 및 삭제 및 정지
 •Django 관련 기능 •배포 자동화 •캐시 생성 •데이터 정리 작업 / 상태 리포팅 •특수 관리자 기능 실행
  32. 32. Django Admin Command batch 작업
  33. 33. Admin Command
  34. 34. •django-rest-framework •django-import-export •openpyxl •django-phonenumber-field •freezegun : 시간을 얼려줌 django 와 함께 쓰면 좋을 모듈
  35. 35. 데이터 중심의 비지니스 모델을 테스트 주도 개발 DDP BDD TDD
  36. 36. 주의 : 완전히 주관적인 이야기 끔찍한 혼종 또는 아무말 대잔치
  37. 37. 주관적인 경험담 •웹을 만든다는 것은 주로 서비스 개발을 의미 •담당자 혹은 PM 은 당장 동작하는 페이지를 요구 •하지만 일정은 고정되어 있고 개발 요구사항은 계속 변경 됨 •반복에 반복, 반복을 거듭하다 보면 망가지는 것은 내 몸
  38. 38. 개발자가 가장 잘하는 일을 하자 •자동화 = TDD, BDD •빠른 확인 및 변화에 민첩하게 대 응 •기술적 접근 •간결하고 안전한 코드 생성 •임시방편 대응 자제 •결국은 자신 및 회사의 자산
  39. 39. DDP > BDD > TDD = X-DD •Data Driven Programming •개발 요구사항을 Model 별로 미리 정리 함 •Behavior Driven Development •모델의 변화를 Model 에 함수로 정리 함 •Test Driven Development •반복적으로 검증하며 개발함
  40. 40. 쉬운 것을 어렵게 만들지 말자 •data 기반 개발 잘 활용하기 = tdd 기반으로 검증하자 •잘 짜여진 tdd 만 보아도 주석과 인수인계가 대폭 줄어든다. •프레임웍 소스 보기 •DB models 에 mixin 을 적극적으로 활용하자 •title, description 과 같이 매우 당연히 쓰는 것들의 코드를 줄이자.
  41. 41. 대규모 서비스 준비 Scale-up Scale-out
  42. 42. •서비스가 느려요 •비싼서버 쓰죠! •서버는 돈 주면 늘릴수 있는거 아닌가요? •서버를 늘렸음 그러나 cpu는 계속 놀고 있음 •이유는 모르지만 일단 늘리고 본다
  43. 43. Process
  44. 44. I/O wait
  45. 45. Queue
  46. 46. 1 RPS vs 100 RPS
  47. 47. 1 RPS & 100 Process VS 100 RPS & 1 Process
  48. 48. I/O wait or long process
  49. 49. 서비스 모니터링 개인적으로는 zabbix
  50. 50. 급하면 기본 명령부터 htop
 tail -f /var/log/….
  51. 51. Application Performance Management •반드시 서비스 전에 실 데이터를 만들어 두고 APM 분석을 실시 해야 함 •어떤 부분에서 I/O wait 가 생기는지? •병목이 되는 부분은 어떤 곳일지? •실제 가장 많이 호출 되는 곳은 어떤 로직인지?
  52. 52. 대규모 서비스 준비 끊임 없는 자기 질문
  53. 53. apache2 
 server-status 오른쪽 그림을 100% 이해 해야함
  54. 54. LOCUST.IO 유져의 행동 기반을 시뮬레이션 가 능
  55. 55. Database Index •도서관 전체의 책을 모두 확인한다면? •관련된 내용을 정리하여 확인 할 내용을 줄임 •세부 내용은 index 를 확인 한 뒤 실제 데이터 접근 •cardinality : index 의 범위가 넓게 퍼지는 것
  56. 56. 대규모 서비스를 준비한다면? •apache2 server-status , nginx stub_status 를 이해하자. •어떤 서버를 얼만큼 준비해야할까? => locust 를 잘 활용하자 •계산이 많은 로직인지? I/O wait 가 많은 로직인지? •DB 의 부하는 얼만큼 생기는지? •django 는 db connection pool 이 없음 •생각보다 더 높은 max connection 수치를 설정해야 함
  57. 57. 진짜 아무말 대잔치
  58. 58. 웹 개발시 주의점 •DNS 갱신은 1일 이상 걸리는 것을 감안하고 옮긴다. •브라우져의 캐시를 완벽하게 컨트롤 하기는 어렵다. •파일명을 바꾸거나, 쿼리를 붙여 캐시 하지 않도록 하자 •한번의 요청으로 긴 처리 시간이 걸리는 작업은 반드시 별도로 분리시킨다. •예를 들어서 전체 통계 계산 처리등 등 •브라우져 호환성
  59. 59. django 개발 주의점 •admin 툴에서 구현한 것은 update(), delete() method 호출 안됨 •환경별 설정 파일은 반드시 분리해서 관리할 것 •ForeignKey 에 너무 많은 키가 연결되는 경우 admin 페이지를 호출하는 것만 으로도 부하가 걸리는 경우가 많음 주의 •fixture 를 꼭 만들어서 공유할 것 •tdd 에서 assertQuerysetEqual 을 반드시 활용할 것 •model 에 classmethod staticmethod 등을 잘 활용하여 구현할 것

×